recupero prezzo e punti

dati una tessera, un vassoio e una data
This commit is contained in:
Francesco Di Sciascio 2025-04-01 08:45:33 +02:00
parent 57597c3d94
commit 3f8ecb0370
5 changed files with 101 additions and 4 deletions

View File

@ -0,0 +1,12 @@
package eu.maiora.model
import kotlinx.serialization.Serializable
@Serializable
data class ValorePasti(
val idTessera : Long,
val idVassoio : Long,
val data : String,
val prezzo : Double,
val punti : Int
)

View File

@ -0,0 +1,5 @@
package eu.maiora.model
interface ValorePastiRepository {
suspend fun valorePastoByTessVassData(idTessera : String, idVassoio : String, data : String): String
}

View File

@ -0,0 +1,31 @@
package eu.maiora.model
import eu.maiora.db.*
import org.jetbrains.exposed.sql.LongColumnType
import org.jetbrains.exposed.sql.SqlExpressionBuilder
import org.jetbrains.exposed.sql.VarCharColumnType
class ValorePastiRepositoryImpl : ValorePastiRepository {
override suspend fun valorePastoByTessVassData(idTessera : String, idVassoio : String, data : String): String = suspendTransaction {
// Cerca valore del pasto e punti in base alla tessera, al vassoio e al giorno
val result = exec("SELECT SIR.trova_tariffa(?, ?, ?) FROM dual",
listOf(
Pair(LongColumnType(), idTessera),
Pair(LongColumnType(), idVassoio),
Pair(VarCharColumnType(), data)
)){ rs ->
var resultString: String? = null
// Processiamo il ResultSet restituito dalla query
if (rs.next()) {
resultString = rs.getString(1) // Leggiamo il primo risultato
}
resultString
}
result ?: "Nessun risultato"
}
}

View File

@ -1,12 +1,10 @@
package eu.maiora.plugins
import eu.maiora.model.AccountsRepositoryImpl
import eu.maiora.model.MovimentiRepositoryImpl
import eu.maiora.model.ParametriRepositoryImpl
import eu.maiora.model.TessereRepositoryImpl
import eu.maiora.model.*
import eu.maiora.routes.auth
import eu.maiora.routes.movimenti
import eu.maiora.routes.tessere
import eu.maiora.routes.valorePasti
import io.ktor.server.application.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
@ -20,5 +18,6 @@ fun Application.configureRouting() {
auth(AccountsRepositoryImpl())
tessere(TessereRepositoryImpl())
movimenti(MovimentiRepositoryImpl())
valorePasti(ValorePastiRepositoryImpl())
}
}

View File

@ -0,0 +1,50 @@
package eu.maiora.routes
import eu.maiora.model.TessereRepositoryImpl
import eu.maiora.model.ValorePasti
import eu.maiora.model.ValorePastiRepository
import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.auth.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
fun Route.valorePasti(valorePastiRepository: ValorePastiRepository){
route("/api/valorePasti"){
authenticate("auth-jwt") {
get(){
// Ottieni i parametri dal percorso
val idTessera = call.parameters["idTessera"]
val idVassoio = call.parameters["idVassoio"]
val data = call.parameters["data"]
if (idTessera == null) {
call.respondText("ID tessera non valido", status = HttpStatusCode.BadRequest)
return@get
}
if (idVassoio == null) {
call.respondText("ID vassoio non valido", status = HttpStatusCode.BadRequest)
return@get
}
if (data == null) {
call.respondText("data non valida", status = HttpStatusCode.BadRequest)
return@get
}
// Cerca la tessera per codice fiscale
val valorePasto = valorePastiRepository.valorePastoByTessVassData(idTessera, idVassoio, data)
val prezzo = valorePasto.split("#").get(0)
val punti = valorePasto.split("#").get(1)
call.respond( ValorePasti(idTessera.toLong(),
idVassoio.toLong(), data,
prezzo.replace(',', '.').toDouble(),
punti.toInt()))
}
}
}
}