diff --git a/src/main/kotlin/eu/maiora/model/ValorePasti.kt b/src/main/kotlin/eu/maiora/model/ValorePasti.kt new file mode 100644 index 0000000..de34988 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ValorePasti.kt @@ -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 +) \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ValorePastiRepository.kt b/src/main/kotlin/eu/maiora/model/ValorePastiRepository.kt new file mode 100644 index 0000000..29f43f7 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ValorePastiRepository.kt @@ -0,0 +1,5 @@ +package eu.maiora.model + +interface ValorePastiRepository { + suspend fun valorePastoByTessVassData(idTessera : String, idVassoio : String, data : String): String +} \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ValorePastiRepositoryImpl.kt b/src/main/kotlin/eu/maiora/model/ValorePastiRepositoryImpl.kt new file mode 100644 index 0000000..a65f3c3 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ValorePastiRepositoryImpl.kt @@ -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" + + + } +} \ 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 bed0c84..24e649c 100644 --- a/src/main/kotlin/eu/maiora/plugins/Routing.kt +++ b/src/main/kotlin/eu/maiora/plugins/Routing.kt @@ -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()) } } diff --git a/src/main/kotlin/eu/maiora/routes/ValorePasti.kt b/src/main/kotlin/eu/maiora/routes/ValorePasti.kt new file mode 100644 index 0000000..283f663 --- /dev/null +++ b/src/main/kotlin/eu/maiora/routes/ValorePasti.kt @@ -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())) + } + } + + } +} \ No newline at end of file