Merge pull request '0002357-endpoint-ricariche' (#7) from 0002357-endpoint-ricariche into dev

Reviewed-on: #7
This commit is contained in:
Francesco Di Sciascio 2025-04-10 07:50:08 +00:00
commit 3e0ae28708
7 changed files with 107 additions and 10 deletions

View File

@ -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
}

View File

@ -68,6 +68,14 @@ object ComposizioniTable : IdTable<Long>("view_composizioni"){
val quantita = integer("quantita")
}
object RicaricheTable : IdTable<Long>("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<Int>) :IntEntity(id) {
companion object : IntEntityClass<AccountsDAO>(AccountsTable)
@ -120,6 +128,15 @@ class ComposizioniDao(id: EntityID<Long>) :LongEntity(id){
var quantita by ComposizioniTable.quantita
}
class RicaricheDao(id: EntityID<Long>) :LongEntity(id){
companion object : LongEntityClass<RicaricheDao>(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 <T> suspendTransaction(block: Transaction.() -> T): T =
newSuspendedTransaction(Dispatchers.IO, statement = block)

View File

@ -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
)

View File

@ -0,0 +1,5 @@
package eu.maiora.model
interface RicaricheRepository {
suspend fun insert(ricarica : Ricariche): Ricariche
}

View File

@ -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
)
}
}

View File

@ -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())
}
}

View File

@ -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<Ricariche>()
//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}"
)
}
}
}
}
}