From 5c169dcfdd1522c8dfe3b31c0a6eed9a115ee81f Mon Sep 17 00:00:00 2001 From: francescods Date: Fri, 11 Apr 2025 16:28:18 +0200 Subject: [PATCH] GET recupero punti distribuzione --- src/main/kotlin/eu/maiora/db/Mapping.kt | 47 +++++++++++++++++++ .../eu/maiora/model/PuntiDistribuzione.kt | 14 ++++++ .../model/PuntiDistribuzioneRepository.kt | 5 ++ .../model/PuntiDistribuzioneRepositoryImpl.kt | 21 +++++++++ src/main/kotlin/eu/maiora/plugins/Routing.kt | 1 + .../eu/maiora/routes/PuntiDistribuzione.kt | 41 ++++++++++++++++ 6 files changed, 129 insertions(+) create mode 100644 src/main/kotlin/eu/maiora/model/PuntiDistribuzione.kt create mode 100644 src/main/kotlin/eu/maiora/model/PuntiDistribuzioneRepository.kt create mode 100644 src/main/kotlin/eu/maiora/model/PuntiDistribuzioneRepositoryImpl.kt create mode 100644 src/main/kotlin/eu/maiora/routes/PuntiDistribuzione.kt diff --git a/src/main/kotlin/eu/maiora/db/Mapping.kt b/src/main/kotlin/eu/maiora/db/Mapping.kt index 173c013..fdb7d86 100644 --- a/src/main/kotlin/eu/maiora/db/Mapping.kt +++ b/src/main/kotlin/eu/maiora/db/Mapping.kt @@ -9,6 +9,7 @@ import org.jetbrains.exposed.dao.LongEntityClass import org.jetbrains.exposed.dao.id.EntityID import org.jetbrains.exposed.dao.id.IdTable import org.jetbrains.exposed.sql.Transaction +import org.jetbrains.exposed.sql.javatime.date import org.jetbrains.exposed.sql.javatime.datetime import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction import java.time.format.DateTimeFormatter @@ -76,6 +77,23 @@ object RicaricheTable : IdTable("ricariche_app"){ val importo = double("importo") } +object SlotPrenotabiliTable : IdTable("view_slot_prenotabili"){ + override val id = long("id").entityId() + val giorno = date("giorno") + val dataInizio = datetime("data_inizio") + val dataFine = datetime("data_fine") + val idModalita = long("id_modalita") + val modalitaPrenotazione = varchar("modalita_prenotazione", 255) + val idPuntoDistribuzione = long("id_punto_distribuzione") + val puntoDistribuzione = varchar("punto_distribuzione", 255) + 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) +} + class AccountsDAO(id: EntityID) :IntEntity(id) { companion object : IntEntityClass(AccountsTable) @@ -137,6 +155,23 @@ class RicaricheDao(id: EntityID) :LongEntity(id){ var importo by RicaricheTable.importo } +class SlotPrenotabiliDao(id: EntityID) :LongEntity(id) { + companion object : LongEntityClass(SlotPrenotabiliTable) + + var giorno by SlotPrenotabiliTable.giorno + var dataInizio by SlotPrenotabiliTable.dataInizio + var dataFine by SlotPrenotabiliTable.dataFine + var idModalita by SlotPrenotabiliTable.idModalita + var modalitaPrenotazione by SlotPrenotabiliTable.modalitaPrenotazione + var idPuntoDistribuzione by SlotPrenotabiliTable.idPuntoDistribuzione + var puntoDistribuzione by SlotPrenotabiliTable.puntoDistribuzione + var idPuntoCassa by SlotPrenotabiliTable.idPuntoCassa + var puntoCassa by SlotPrenotabiliTable.puntoCassa + var idTurno by SlotPrenotabiliTable.idTurno + //var turno by SlotPrenotabiliTable.turno + var idResidenza by SlotPrenotabiliTable.idResidenza + var residenza by SlotPrenotabiliTable.residenza +} fun accountsDaoToModel(dao: AccountsDAO) = Accounts( dao.id.value, @@ -190,6 +225,18 @@ fun composizioniDaoToModel(dao: ComposizioniDao) = Composizioni( dao.quantita ) +fun puntiDistribuzioneDaoToModel(dao: SlotPrenotabiliDao) :PuntiDistribuzione{ + return PuntiDistribuzione( + dao.id.value, + dao.idPuntoDistribuzione, + dao.puntoDistribuzione, + dao.idPuntoCassa, + dao.puntoCassa, + dao.idModalita, + dao.modalitaPrenotazione + ) +} + 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/PuntiDistribuzione.kt b/src/main/kotlin/eu/maiora/model/PuntiDistribuzione.kt new file mode 100644 index 0000000..ac03c43 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/PuntiDistribuzione.kt @@ -0,0 +1,14 @@ +package eu.maiora.model + +import kotlinx.serialization.Serializable + +@Serializable +data class PuntiDistribuzione( + val id: Long, + val idPuntoDistribuzione : Long, + val puntoDistribuzione : String, + val idPuntoCassa : Long, + val puntoCassa : String, + val idModalita : Long, + val modalitaPrenotazione : String +) \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/PuntiDistribuzioneRepository.kt b/src/main/kotlin/eu/maiora/model/PuntiDistribuzioneRepository.kt new file mode 100644 index 0000000..5725f0d --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/PuntiDistribuzioneRepository.kt @@ -0,0 +1,5 @@ +package eu.maiora.model + +interface PuntiDistribuzioneRepository { + suspend fun puntiDistByGiornoIdTurno(giorno : String, idTurno : Long): List? +} \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/PuntiDistribuzioneRepositoryImpl.kt b/src/main/kotlin/eu/maiora/model/PuntiDistribuzioneRepositoryImpl.kt new file mode 100644 index 0000000..dc4a225 --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/PuntiDistribuzioneRepositoryImpl.kt @@ -0,0 +1,21 @@ +package eu.maiora.model + +import eu.maiora.db.* +import org.jetbrains.exposed.sql.SortOrder +import org.jetbrains.exposed.sql.and +import java.time.LocalDate +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + +class PuntiDistribuzioneRepositoryImpl : PuntiDistribuzioneRepository { + override suspend fun puntiDistByGiornoIdTurno(giorno : String, idTurno : Long): List = suspendTransaction { + // Cerca la lista di punti distribuzione dalla tabella degli slot prenotabili + val formatter = DateTimeFormatter.ofPattern("ddMMyyyy") + val formattedDate = LocalDate.parse(giorno, formatter) + + SlotPrenotabiliDao.find { (SlotPrenotabiliTable.giorno eq formattedDate) and (SlotPrenotabiliTable.idTurno eq idTurno)} + .toList() // Restituisce la lista degli slot prenotabili da cui ricavare i punti distribuzione + .map { puntiDistribuzioneDaoToModel(it) } // Converte il DAO in un oggetto PuntiDistribuzione + + } +} \ 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 a94401b..c791cf6 100644 --- a/src/main/kotlin/eu/maiora/plugins/Routing.kt +++ b/src/main/kotlin/eu/maiora/plugins/Routing.kt @@ -18,5 +18,6 @@ fun Application.configureRouting() { composizioni(ComposizioniRepositoryImpl()) valorePasti(ValorePastiRepositoryImpl()) ricariche(RicaricheRepositoryImpl()) + puntiDistribuzione(PuntiDistribuzioneRepositoryImpl()) } } diff --git a/src/main/kotlin/eu/maiora/routes/PuntiDistribuzione.kt b/src/main/kotlin/eu/maiora/routes/PuntiDistribuzione.kt new file mode 100644 index 0000000..4848b45 --- /dev/null +++ b/src/main/kotlin/eu/maiora/routes/PuntiDistribuzione.kt @@ -0,0 +1,41 @@ +package eu.maiora.routes + +import eu.maiora.model.PuntiDistribuzioneRepositoryImpl +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.puntiDistribuzione(puntiDistribuzioneRepository: PuntiDistribuzioneRepositoryImpl){ + route("/api/puntiDistribuzione"){ + authenticate("auth-jwt") { + get(){ + // Ottieni l'id del turno e il giorno dal percorso + val idTurno = call.parameters["idTurno"] + val giorno = call.parameters["giorno"] + + if (idTurno == null) { + call.respondText("ID turno non valido", status = HttpStatusCode.BadRequest) + return@get + } + if (giorno == null) { + call.respondText("Giorno non valido", status = HttpStatusCode.BadRequest) + return@get + } + + // Cerca i punti distribuzione per giorno e turno + val listaPuntiDistribuzione = puntiDistribuzioneRepository.puntiDistByGiornoIdTurno(giorno, idTurno.toLong()) + + + if (listaPuntiDistribuzione != null) { + call.respond(listaPuntiDistribuzione) + } else { + call.respondText("Punti distribuzione non trovati", status = HttpStatusCode.NotFound) + } + } + } + + } +} \ No newline at end of file