From 10d2fefa241f2a96bf57a3f9f92216791afea80a Mon Sep 17 00:00:00 2001 From: francescods Date: Mon, 14 Apr 2025 11:47:55 +0200 Subject: [PATCH] GET recupero slot orari --- src/main/kotlin/eu/maiora/db/Mapping.kt | 33 ++++++++++-- src/main/kotlin/eu/maiora/model/SlotOrari.kt | 21 ++++++++ .../eu/maiora/model/SlotOrariRepository.kt | 8 +++ .../maiora/model/SlotOrariRepositoryImpl.kt | 25 +++++++++ src/main/kotlin/eu/maiora/plugins/Routing.kt | 1 + src/main/kotlin/eu/maiora/routes/SlotOrari.kt | 54 +++++++++++++++++++ 6 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/eu/maiora/model/SlotOrari.kt create mode 100644 src/main/kotlin/eu/maiora/model/SlotOrariRepository.kt create mode 100644 src/main/kotlin/eu/maiora/model/SlotOrariRepositoryImpl.kt create mode 100644 src/main/kotlin/eu/maiora/routes/SlotOrari.kt diff --git a/src/main/kotlin/eu/maiora/db/Mapping.kt b/src/main/kotlin/eu/maiora/db/Mapping.kt index fdb7d86..174ba9c 100644 --- a/src/main/kotlin/eu/maiora/db/Mapping.kt +++ b/src/main/kotlin/eu/maiora/db/Mapping.kt @@ -89,9 +89,9 @@ object SlotPrenotabiliTable : IdTable("view_slot_prenotabili"){ val idPuntoCassa = long("id_punto_cassa") val puntoCassa = varchar("punto_cassa", 255) val idTurno = long("id_turno") - //val turno = varchar("turno", 255) - val idResidenza = long("id_residenza") - val residenza = varchar("residenza", 255) + val turno = varchar("turno", 255) + val idResidenza = long("id_residenza").nullable() + val residenza = varchar("residenza", 255).nullable() } class AccountsDAO(id: EntityID) :IntEntity(id) { @@ -168,7 +168,7 @@ class SlotPrenotabiliDao(id: EntityID) :LongEntity(id) { var idPuntoCassa by SlotPrenotabiliTable.idPuntoCassa var puntoCassa by SlotPrenotabiliTable.puntoCassa var idTurno by SlotPrenotabiliTable.idTurno - //var turno by SlotPrenotabiliTable.turno + var turno by SlotPrenotabiliTable.turno var idResidenza by SlotPrenotabiliTable.idResidenza var residenza by SlotPrenotabiliTable.residenza } @@ -237,6 +237,31 @@ fun puntiDistribuzioneDaoToModel(dao: SlotPrenotabiliDao) :PuntiDistribuzione{ ) } +fun slotOrariDaoToModel(dao: SlotPrenotabiliDao) :SlotOrari{ + val formatterGiorno = DateTimeFormatter.ofPattern("ddMMyyyy") + val formatterConOra = DateTimeFormatter.ofPattern("ddMMyyyy HH:mm") + val formattedGiorno = dao.giorno.format(formatterGiorno) + val formattedDataInizio = dao.dataInizio.format(formatterConOra) + val formattedDataFine = dao.dataFine.format(formatterConOra) + + return SlotOrari( + dao.id.value, + formattedGiorno, + formattedDataInizio, + formattedDataFine, + dao.idPuntoDistribuzione, + dao.puntoDistribuzione, + dao.idPuntoCassa, + dao.puntoCassa, + dao.idModalita, + dao.modalitaPrenotazione, + dao.idTurno, + dao.turno, + dao.idResidenza, + dao.residenza + ) +} + 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/SlotOrari.kt b/src/main/kotlin/eu/maiora/model/SlotOrari.kt new file mode 100644 index 0000000..6c4c46c --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/SlotOrari.kt @@ -0,0 +1,21 @@ +package eu.maiora.model + +import kotlinx.serialization.Serializable + +@Serializable +data class SlotOrari( + val id: Long, + val giorno : String, + val dataInizio : String, + val dataFine : String, + val idPuntoDistribuzione : Long, + val puntoDistribuzione : String, + val idPuntoCassa : Long, + val puntoCassa : String, + val idModalita : Long, + val modalitaPrenotazione : String, + val idTurno : Long, + val turno : String, + val idResidenza : Long? = null, + val residenza : String? = null +) \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/SlotOrariRepository.kt b/src/main/kotlin/eu/maiora/model/SlotOrariRepository.kt new file mode 100644 index 0000000..2052ea5 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/SlotOrariRepository.kt @@ -0,0 +1,8 @@ +package eu.maiora.model + +interface SlotOrariRepository { + suspend fun slotOrariByGiornoIdTurnoIdPuntoDistIdMod(giorno : String, + idTurno : Long, + idPuntoDistribuzione : Long, + idModalita : Long): List? +} \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/SlotOrariRepositoryImpl.kt b/src/main/kotlin/eu/maiora/model/SlotOrariRepositoryImpl.kt new file mode 100644 index 0000000..1d63f45 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/SlotOrariRepositoryImpl.kt @@ -0,0 +1,25 @@ +package eu.maiora.model + +import eu.maiora.db.* +import org.jetbrains.exposed.sql.and +import java.time.LocalDate +import java.time.format.DateTimeFormatter + +class SlotOrariRepositoryImpl : SlotOrariRepository { + override suspend fun slotOrariByGiornoIdTurnoIdPuntoDistIdMod(giorno : String, + idTurno : Long, + idPuntoDistribuzione : Long, + idModalita : Long): List = suspendTransaction { + // Cerca la lista di slot orari + val formatter = DateTimeFormatter.ofPattern("ddMMyyyy") + val formattedDate = LocalDate.parse(giorno, formatter) + + SlotPrenotabiliDao.find { (SlotPrenotabiliTable.giorno eq formattedDate) and + (SlotPrenotabiliTable.idTurno eq idTurno) and + (SlotPrenotabiliTable.idPuntoDistribuzione eq idPuntoDistribuzione) and + (SlotPrenotabiliTable.idModalita eq idModalita)} + .toList() // Restituisce la lista degli slot prenotabili da cui ricavare i punti distribuzione + .map { slotOrariDaoToModel(it) } // Converte il DAO in un oggetto SlotOrari + + } +} \ 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 c791cf6..36c9d59 100644 --- a/src/main/kotlin/eu/maiora/plugins/Routing.kt +++ b/src/main/kotlin/eu/maiora/plugins/Routing.kt @@ -19,5 +19,6 @@ fun Application.configureRouting() { valorePasti(ValorePastiRepositoryImpl()) ricariche(RicaricheRepositoryImpl()) puntiDistribuzione(PuntiDistribuzioneRepositoryImpl()) + slotOrari(SlotOrariRepositoryImpl()) } } diff --git a/src/main/kotlin/eu/maiora/routes/SlotOrari.kt b/src/main/kotlin/eu/maiora/routes/SlotOrari.kt new file mode 100644 index 0000000..9a0c363 --- /dev/null +++ b/src/main/kotlin/eu/maiora/routes/SlotOrari.kt @@ -0,0 +1,54 @@ +package eu.maiora.routes + +import eu.maiora.model.SlotOrariRepositoryImpl +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.slotOrari(slotOrariRepository: SlotOrariRepositoryImpl){ + route("/api/slotOrari"){ + authenticate("auth-jwt") { + get(){ + // Ottieni l'id del turno, il giorno, l'id della modalita e l'id del punto di distribuzione dal percorso + val idTurno = call.parameters["idTurno"] + val giorno = call.parameters["giorno"] + val idPuntoDistribuzione = call.parameters["idPuntoDistribuzione"] + val idModalita = call.parameters["idModalita"] + + if (idTurno.isNullOrEmpty()) { + call.respondText("ID turno non valido o non presente nei parametri", status = HttpStatusCode.BadRequest) + return@get + } + if (idPuntoDistribuzione.isNullOrEmpty()) { + call.respondText("ID punto distribuzione non valido o non presente nei parametri", status = HttpStatusCode.BadRequest) + return@get + } + if (idModalita.isNullOrEmpty()) { + call.respondText("ID modalita non valido o non presente nei parametri", status = HttpStatusCode.BadRequest) + return@get + } + if (giorno.isNullOrEmpty()) { + call.respondText("Giorno non valido o non presente nei parametri", status = HttpStatusCode.BadRequest) + return@get + } + + // Cerca gli slot orari per giorno, turno, punto distribuzione e modalita + val listaSlotOrari = slotOrariRepository.slotOrariByGiornoIdTurnoIdPuntoDistIdMod(giorno, + idTurno.toLong(), + idPuntoDistribuzione.toLong(), + idModalita.toLong()) + + + if (listaSlotOrari != null) { + call.respond(listaSlotOrari) + } else { + call.respondText("Slot orari non trovati", status = HttpStatusCode.NotFound) + } + } + } + + } +} \ No newline at end of file