From 213d7fdd74dd08a9b35d86d9b19176e0732fa7f4 Mon Sep 17 00:00:00 2001 From: francescods Date: Mon, 14 Apr 2025 17:03:57 +0200 Subject: [PATCH] GET prodotti prenotabili --- src/main/kotlin/eu/maiora/db/Mapping.kt | 57 +++++++++++++++++++ .../eu/maiora/model/ProdottiPrenotabili.kt | 21 +++++++ .../model/ProdottiPrenotabiliRepository.kt | 8 +++ .../ProdottiPrenotabiliRepositoryImpl.kt | 25 ++++++++ src/main/kotlin/eu/maiora/plugins/Routing.kt | 1 + .../eu/maiora/routes/ProdottiPrenotabili.kt | 55 ++++++++++++++++++ 6 files changed, 167 insertions(+) create mode 100644 src/main/kotlin/eu/maiora/model/ProdottiPrenotabili.kt create mode 100644 src/main/kotlin/eu/maiora/model/ProdottiPrenotabiliRepository.kt create mode 100644 src/main/kotlin/eu/maiora/model/ProdottiPrenotabiliRepositoryImpl.kt create mode 100644 src/main/kotlin/eu/maiora/routes/ProdottiPrenotabili.kt diff --git a/src/main/kotlin/eu/maiora/db/Mapping.kt b/src/main/kotlin/eu/maiora/db/Mapping.kt index 174ba9c..bd43374 100644 --- a/src/main/kotlin/eu/maiora/db/Mapping.kt +++ b/src/main/kotlin/eu/maiora/db/Mapping.kt @@ -94,6 +94,23 @@ object SlotPrenotabiliTable : IdTable("view_slot_prenotabili"){ val residenza = varchar("residenza", 255).nullable() } +object ProdottiPrenotabiliTable : IdTable("view_prodotti_prenotabili"){ + override val id = long("id").entityId() + val giorno = date("giorno") + val idPuntoDistribuzione = long("id_punto_distribuzione") + val puntoDistribuzione = varchar("punto_distribuzione", 255) + val idTurno = long("id_turno") + val turno = varchar("turno", 255) + val idProdotto = long("id_prodotto") + val prodotto = varchar("prodotto", 255) + val codiceProdotto = varchar("codice_prodotto", 255) + val descrizioneProdotto = varchar("descrizione_prodotto", 255) + val idCategoria = long("id_categoria") + val categoria = varchar("categoria", 255) + val idModalita = long("id_modalita") + val modalitaPrenotazione = varchar("modalita_prenotazione", 255) +} + class AccountsDAO(id: EntityID) :IntEntity(id) { companion object : IntEntityClass(AccountsTable) @@ -173,6 +190,24 @@ class SlotPrenotabiliDao(id: EntityID) :LongEntity(id) { var residenza by SlotPrenotabiliTable.residenza } +class ProdottiPrenotabiliDao(id: EntityID) :LongEntity(id) { + companion object : LongEntityClass(ProdottiPrenotabiliTable) + + var giorno by ProdottiPrenotabiliTable.giorno + var idPuntoDistribuzione by ProdottiPrenotabiliTable.idPuntoDistribuzione + var puntoDistribuzione by ProdottiPrenotabiliTable.puntoDistribuzione + var idTurno by ProdottiPrenotabiliTable.idTurno + var turno by ProdottiPrenotabiliTable.turno + var idProdotto by ProdottiPrenotabiliTable.idProdotto + var prodotto by ProdottiPrenotabiliTable.prodotto + var codiceProdotto by ProdottiPrenotabiliTable.codiceProdotto + var descrizioneProdotto by ProdottiPrenotabiliTable.descrizioneProdotto + var idCategoria by ProdottiPrenotabiliTable.idCategoria + var categoria by ProdottiPrenotabiliTable.categoria + var idModalita by ProdottiPrenotabiliTable.idModalita + var modalitaPrenotazione by ProdottiPrenotabiliTable.modalitaPrenotazione +} + fun accountsDaoToModel(dao: AccountsDAO) = Accounts( dao.id.value, dao.username, @@ -262,6 +297,28 @@ fun slotOrariDaoToModel(dao: SlotPrenotabiliDao) :SlotOrari{ ) } +fun prodottiPrenotabiliDaoToModel(dao: ProdottiPrenotabiliDao) :ProdottiPrenotabili{ + val formatterGiorno = DateTimeFormatter.ofPattern("ddMMyyyy") + val formattedGiorno = dao.giorno.format(formatterGiorno) + + return ProdottiPrenotabili( + dao.id.value, + formattedGiorno, + dao.idPuntoDistribuzione, + dao.puntoDistribuzione, + dao.idTurno, + dao.turno, + dao.idProdotto, + dao.prodotto, + dao.codiceProdotto, + dao.descrizioneProdotto, + dao.idCategoria, + dao.categoria, + 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/ProdottiPrenotabili.kt b/src/main/kotlin/eu/maiora/model/ProdottiPrenotabili.kt new file mode 100644 index 0000000..1d8425e --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ProdottiPrenotabili.kt @@ -0,0 +1,21 @@ +package eu.maiora.model + +import kotlinx.serialization.Serializable + +@Serializable +data class ProdottiPrenotabili( + val id: Long, + val giorno : String, + val idPuntoDistribuzione : Long, + val puntoDistribuzione : String, + val idTurno : Long, + val turno : String, + val idProdotto : Long, + val prodotto : String, + val codiceProdotto : String, + val descrizioneProdotto : String, + val idCategoria : Long, + val categoria : String, + val idModalita : Long, + val modalitaPrenotazione : String +) \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ProdottiPrenotabiliRepository.kt b/src/main/kotlin/eu/maiora/model/ProdottiPrenotabiliRepository.kt new file mode 100644 index 0000000..728977d --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ProdottiPrenotabiliRepository.kt @@ -0,0 +1,8 @@ +package eu.maiora.model + +interface ProdottiPrenotabiliRepository { + suspend fun prodottiPrenotabiliByGiornoIdTurnoIdPuntoDistIdMod(giorno : String, + idTurno : Long, + idPuntoDistribuzione : Long, + idModalita : Long): List? +} \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ProdottiPrenotabiliRepositoryImpl.kt b/src/main/kotlin/eu/maiora/model/ProdottiPrenotabiliRepositoryImpl.kt new file mode 100644 index 0000000..d73057b --- /dev/null +++ b/src/main/kotlin/eu/maiora/model/ProdottiPrenotabiliRepositoryImpl.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 ProdottiPrenotabiliRepositoryImpl : ProdottiPrenotabiliRepository { + override suspend fun prodottiPrenotabiliByGiornoIdTurnoIdPuntoDistIdMod(giorno : String, + idTurno : Long, + idPuntoDistribuzione : Long, + idModalita : Long): List = suspendTransaction { + // Cerca la lista di prodotti prenotabili + val formatter = DateTimeFormatter.ofPattern("ddMMyyyy") + val formattedDate = LocalDate.parse(giorno, formatter) + + ProdottiPrenotabiliDao.find { (ProdottiPrenotabiliTable.giorno eq formattedDate) and + (ProdottiPrenotabiliTable.idTurno eq idTurno) and + (ProdottiPrenotabiliTable.idPuntoDistribuzione eq idPuntoDistribuzione) and + (ProdottiPrenotabiliTable.idModalita eq idModalita)} + .toList() // Restituisce la lista dei prodotti prenotabili + .map { prodottiPrenotabiliDaoToModel(it) } // Converte il DAO in un oggetto ProdottiPrenotabili + + } +} \ 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 36c9d59..3c57860 100644 --- a/src/main/kotlin/eu/maiora/plugins/Routing.kt +++ b/src/main/kotlin/eu/maiora/plugins/Routing.kt @@ -20,5 +20,6 @@ fun Application.configureRouting() { ricariche(RicaricheRepositoryImpl()) puntiDistribuzione(PuntiDistribuzioneRepositoryImpl()) slotOrari(SlotOrariRepositoryImpl()) + prodottiPrenotabili(ProdottiPrenotabiliRepositoryImpl()) } } diff --git a/src/main/kotlin/eu/maiora/routes/ProdottiPrenotabili.kt b/src/main/kotlin/eu/maiora/routes/ProdottiPrenotabili.kt new file mode 100644 index 0000000..a2af596 --- /dev/null +++ b/src/main/kotlin/eu/maiora/routes/ProdottiPrenotabili.kt @@ -0,0 +1,55 @@ +package eu.maiora.routes + +import eu.maiora.model.ProdottiPrenotabiliRepositoryImpl +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.prodottiPrenotabili(prodottiPrenotabiliRepository: ProdottiPrenotabiliRepositoryImpl){ + route("/api/prodottiPrenotabili"){ + 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 i prodotti prenotabili per giorno, turno, punto distribuzione e modalita + val listaProdottiPrenotabili = prodottiPrenotabiliRepository.prodottiPrenotabiliByGiornoIdTurnoIdPuntoDistIdMod(giorno, + idTurno.toLong(), + idPuntoDistribuzione.toLong(), + idModalita.toLong()) + + + if (listaProdottiPrenotabili != null) { + call.respond(listaProdottiPrenotabili) + } else { + call.respondText("Prodotti prenotabili non trovati", status = HttpStatusCode.NotFound) + } + } + } + + } +} \ No newline at end of file