diff --git a/src/main/kotlin/eu/maiora/Application.kt b/src/main/kotlin/eu/maiora/Application.kt index 4e693fc..e7b0fe9 100644 --- a/src/main/kotlin/eu/maiora/Application.kt +++ b/src/main/kotlin/eu/maiora/Application.kt @@ -47,7 +47,7 @@ fun Application.module(configFile: Properties) { fun loadConfig(): Properties { val properties = Properties() - val inputStream = FileInputStream("/home/backend_api/config.properties") + val inputStream = FileInputStream("/home/ristocloudadm/config.properties") properties.load(inputStream) return properties } diff --git a/src/main/kotlin/eu/maiora/db/Mapping.kt b/src/main/kotlin/eu/maiora/db/Mapping.kt index 7b2998f..173c013 100644 --- a/src/main/kotlin/eu/maiora/db/Mapping.kt +++ b/src/main/kotlin/eu/maiora/db/Mapping.kt @@ -68,6 +68,14 @@ object ComposizioniTable : IdTable("view_composizioni"){ val quantita = integer("quantita") } +object RicaricheTable : IdTable("ricariche_app"){ + override val id = long("id").autoIncrement("seq_ricariche_app").entityId() + val codiceTransazione = varchar("codice_transazione", 255) + val messaggio = varchar("messaggio", 255).nullable() + val idTessera = long("id_tessera") + val importo = double("importo") +} + class AccountsDAO(id: EntityID) :IntEntity(id) { companion object : IntEntityClass(AccountsTable) @@ -120,6 +128,15 @@ class ComposizioniDao(id: EntityID) :LongEntity(id){ var quantita by ComposizioniTable.quantita } +class RicaricheDao(id: EntityID) :LongEntity(id){ + companion object : LongEntityClass(RicaricheTable) + + var codiceTransazione by RicaricheTable.codiceTransazione + var messaggio by RicaricheTable.messaggio + var idTessera by RicaricheTable.idTessera + var importo by RicaricheTable.importo +} + fun accountsDaoToModel(dao: AccountsDAO) = Accounts( dao.id.value, @@ -164,7 +181,7 @@ fun movimentiDaoToModel(dao: MovimentiDao) :Movimenti{ ) } -fun composizioniDaoToModel(dao: ComposizioniDao) =Composizioni( +fun composizioniDaoToModel(dao: ComposizioniDao) = Composizioni( dao.id.value, dao.idVassoio, dao.vassoio, @@ -174,8 +191,5 @@ fun composizioniDaoToModel(dao: ComposizioniDao) =Composizioni( ) - - - suspend fun suspendTransaction(block: Transaction.() -> T): T = newSuspendedTransaction(Dispatchers.IO, statement = block) \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/Ricariche.kt b/src/main/kotlin/eu/maiora/model/Ricariche.kt new file mode 100644 index 0000000..add7d27 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/Ricariche.kt @@ -0,0 +1,12 @@ +package eu.maiora.model + +import kotlinx.serialization.Serializable + +@Serializable +data class Ricariche( + val id : Long? = null, + val codiceTransazione : String, + val messaggio : String? = null, + val idTessera : Long, + val importo : Double +) \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/RicaricheRepository.kt b/src/main/kotlin/eu/maiora/model/RicaricheRepository.kt new file mode 100644 index 0000000..76a637c --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/RicaricheRepository.kt @@ -0,0 +1,5 @@ +package eu.maiora.model + +interface RicaricheRepository { + suspend fun insert(ricarica : Ricariche): Ricariche +} \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/RicaricheRepositoryImpl.kt b/src/main/kotlin/eu/maiora/model/RicaricheRepositoryImpl.kt new file mode 100644 index 0000000..3dfa7e0 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/RicaricheRepositoryImpl.kt @@ -0,0 +1,26 @@ +package eu.maiora.model + +import eu.maiora.db.* +import org.jetbrains.exposed.sql.insert +import org.jetbrains.exposed.sql.insertAndGetId + +class RicaricheRepositoryImpl : RicaricheRepository { + override suspend fun insert(ricarica : Ricariche): Ricariche = suspendTransaction { + // Inserisci una nuova ricarica + // ID non definito: viene gestito dalla sequence + val idRicaricaInserted = RicaricheTable.insertAndGetId { + it[codiceTransazione] = ricarica.codiceTransazione + it[messaggio] = ricarica.messaggio + it[idTessera] = ricarica.idTessera + it[importo] = ricarica.importo + }.value + + Ricariche( + idRicaricaInserted, + ricarica.codiceTransazione, + ricarica.messaggio, + ricarica.idTessera, + ricarica.importo + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/plugins/Routing.kt b/src/main/kotlin/eu/maiora/plugins/Routing.kt index ce934be..a94401b 100644 --- a/src/main/kotlin/eu/maiora/plugins/Routing.kt +++ b/src/main/kotlin/eu/maiora/plugins/Routing.kt @@ -1,11 +1,7 @@ package eu.maiora.plugins import eu.maiora.model.* -import eu.maiora.routes.auth -import eu.maiora.routes.composizioni -import eu.maiora.routes.movimenti -import eu.maiora.routes.tessere -import eu.maiora.routes.valorePasti +import eu.maiora.routes.* import io.ktor.server.application.* import io.ktor.server.response.* import io.ktor.server.routing.* @@ -21,5 +17,6 @@ fun Application.configureRouting() { movimenti(MovimentiRepositoryImpl()) composizioni(ComposizioniRepositoryImpl()) valorePasti(ValorePastiRepositoryImpl()) + ricariche(RicaricheRepositoryImpl()) } } diff --git a/src/main/kotlin/eu/maiora/routes/Ricariche.kt b/src/main/kotlin/eu/maiora/routes/Ricariche.kt new file mode 100644 index 0000000..485b4e1 --- /dev/null +++ b/src/main/kotlin/eu/maiora/routes/Ricariche.kt @@ -0,0 +1,43 @@ +package eu.maiora.routes + +import eu.maiora.model.* +import io.ktor.http.* +import io.ktor.server.application.* +import io.ktor.server.auth.* +import io.ktor.server.request.* +import io.ktor.server.response.* +import io.ktor.server.routing.* + + +fun Route.ricariche(ricaricheRepository: RicaricheRepository){ + route("/api/ricariche"){ + authenticate("auth-jwt") { + post(){ + try{ + val ricaricaRequest = call.receive() + + //solo per il codiceTransazione (String) è necessario controllare se è vuoto + if(ricaricaRequest.codiceTransazione.isBlank()){ + call.respond( + HttpStatusCode.BadRequest, + "Errore nel processare la richiesta: codiceTransazione vuoto" + ) + } + + // Inserisci la ricarica nel database + val ricaricaInserita = ricaricheRepository.insert(ricaricaRequest) + + // Rispondi con l'oggetto Ricariche, che include l'ID generato + call.respond(HttpStatusCode.Created, ricaricaInserita) + } + catch (e: Exception){ + call.respond( + HttpStatusCode.BadRequest, + "Errore nel processare la richiesta: ${e.cause}" + ) + } + } + } + + } +} \ No newline at end of file