diff --git a/src/main/kotlin/eu/maiora/db/Mapping.kt b/src/main/kotlin/eu/maiora/db/Mapping.kt index 7dc6b6e..2688dbb 100644 --- a/src/main/kotlin/eu/maiora/db/Mapping.kt +++ b/src/main/kotlin/eu/maiora/db/Mapping.kt @@ -1,8 +1,10 @@ package eu.maiora.db + import eu.maiora.model.* import kotlinx.coroutines.Dispatchers import kotlinx.datetime.toKotlinLocalDateTime +import kotlinx.datetime.toKotlinLocalDate import org.jetbrains.exposed.dao.IntEntity import org.jetbrains.exposed.dao.IntEntityClass import org.jetbrains.exposed.dao.LongEntity @@ -142,7 +144,15 @@ object ViewPrenotazioniPastiTable : IdTable("view_prenotazioni_pasti"){ val idPrenotazione = long("id_prenotazione") val idStato = long("id_stato") val stato = varchar("stato", 255) + val idTessera = long("id_tessera") + val idSlotPuntoCassa = long("id_slot_punto_cassa") + val giorno = date("giorno") + val turno = varchar("turno", 255) + val dataInizio = datetime("data_inizio") val dataLimiteCancellazione = datetime("data_limite_cancellazione") + val idVassoio = long("id_vassoio") + val codiceRistocloud = varchar("codice_ristocloud", 255).nullable() + val importoPagato = double("importo_pagato") } class AccountsDAO(id: EntityID) :IntEntity(id) { @@ -274,8 +284,16 @@ class ViewPrenotazioniPastiDao(id: EntityID) :LongEntity(id){ val idPrenotazione by ViewPrenotazioniPastiTable.idPrenotazione val idStato by ViewPrenotazioniPastiTable.idStato + val idTessera by ViewPrenotazioniPastiTable.idTessera + val idSlotPuntoCassa by ViewPrenotazioniPastiTable.idSlotPuntoCassa val stato by ViewPrenotazioniPastiTable.stato + val giorno by ViewPrenotazioniPastiTable.giorno + val turno by ViewPrenotazioniPastiTable.turno + val dataInizio by ViewPrenotazioniPastiTable.dataInizio val dataLimiteCancellazione by ViewPrenotazioniPastiTable.dataLimiteCancellazione + val idVassoio by ViewPrenotazioniPastiTable.idVassoio + val codiceRistocloud by ViewPrenotazioniPastiTable.codiceRistocloud + val importoPagato by ViewPrenotazioniPastiTable.importoPagato } fun accountsDaoToModel(dao: AccountsDAO) = Accounts( @@ -426,7 +444,16 @@ fun viewPrenotazioniPastiDaoToModel(dao: ViewPrenotazioniPastiDao) : ViewPrenota dao.idPrenotazione, dao.idStato, dao.stato, - dao.dataLimiteCancellazione.toKotlinLocalDateTime() + dao.idTessera, + dao.idSlotPuntoCassa, + dao.giorno.toKotlinLocalDate(), + dao.turno, + dao.dataInizio.toKotlinLocalDateTime(), + dao.dataLimiteCancellazione.toKotlinLocalDateTime(), + dao.idVassoio, + dao.codiceRistocloud, + dao.importoPagato, + null ) } diff --git a/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPasti.kt b/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPasti.kt index 8ff0756..c8328a0 100644 --- a/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPasti.kt +++ b/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPasti.kt @@ -1,5 +1,6 @@ package eu.maiora.model +import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDateTime import kotlinx.serialization.Serializable @@ -9,5 +10,15 @@ data class ViewPrenotazioniPasti( val idPrenotazione: Long, val idStato: Long, val stato: String, - val dataLimiteCancellazione: LocalDateTime + val idTessera: Long, + val idSlotPuntoCassa: Long, + val giorno: LocalDate, + val turno: String, + val dataInizio: LocalDateTime, + val dataLimiteCancellazione: LocalDateTime, + val idVassoio: Long, + val codiceRistocloud: String? = null, + val importoPagato: Double, + var listaProdottiPrenotati: List? = null + ) \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPastiRepository.kt b/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPastiRepository.kt index 2745b7a..96347be 100644 --- a/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPastiRepository.kt +++ b/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPastiRepository.kt @@ -2,4 +2,5 @@ package eu.maiora.model interface ViewPrenotazioniPastiRepository { suspend fun prenotazioniPastiById(id : Long): ViewPrenotazioniPasti + suspend fun prenotazioniPastiByIdTessera(idTessera : Long): List } \ No newline at end of file diff --git a/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPastiRepositoryImpl.kt b/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPastiRepositoryImpl.kt index 617d58d..843f388 100644 --- a/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPastiRepositoryImpl.kt +++ b/src/main/kotlin/eu/maiora/model/ViewPrenotazioniPastiRepositoryImpl.kt @@ -12,4 +12,13 @@ class ViewPrenotazioniPastiRepositoryImpl : ViewPrenotazioniPastiRepository { .first() //prendo solo il primo record, dato che ci sono tanti record quanti prodotti prenotati .let { viewPrenotazioniPastiDaoToModel(it) } // Converte il DAO in un oggetto ViewPrenotazioniPasti } + + override suspend fun prenotazioniPastiByIdTessera(idTessera : Long): List = suspendTransaction { + // Cerca la lista di prenotazioni + ViewPrenotazioniPastiDao.find { ViewPrenotazioniPastiTable.idTessera eq idTessera } + .orderBy(ViewPrenotazioniPastiTable.giorno to SortOrder.DESC) + .toList() // Restituisce la lista delle prenotazioni + .map { viewPrenotazioniPastiDaoToModel(it) } // Converte il DAO in un oggetto Movimenti + + } } \ 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 9590816..a3c8e1f 100644 --- a/src/main/kotlin/eu/maiora/plugins/Routing.kt +++ b/src/main/kotlin/eu/maiora/plugins/Routing.kt @@ -22,7 +22,10 @@ fun Application.configureRouting() { slotOrari(SlotOrariRepositoryImpl()) prodottiPrenotabili(ProdottiPrenotabiliRepositoryImpl()) residenze(ResidenzeRepositoryImpl()) - prenotazioni(PrenotazioniPastiRepositoryImpl(), SlotOrariRepositoryImpl(), PrenotazioniPastiDettaglioRepositoryImpl()) + prenotazioni(PrenotazioniPastiRepositoryImpl(), + SlotOrariRepositoryImpl(), + PrenotazioniPastiDettaglioRepositoryImpl(), + ViewPrenotazioniPastiRepositoryImpl()) annullaPrenotazioni(ViewPrenotazioniPastiRepositoryImpl(), PrenotazioniPastiDettaglioRepositoryImpl()) } } diff --git a/src/main/kotlin/eu/maiora/routes/Prenotazioni.kt b/src/main/kotlin/eu/maiora/routes/Prenotazioni.kt index 8afeb6a..a2f71b8 100644 --- a/src/main/kotlin/eu/maiora/routes/Prenotazioni.kt +++ b/src/main/kotlin/eu/maiora/routes/Prenotazioni.kt @@ -11,9 +11,30 @@ import io.ktor.server.routing.* fun Route.prenotazioni(prenotazioniPastiRepository: PrenotazioniPastiRepository, slotOrariRepository: SlotOrariRepository, - prenotazioniPastiDettaglioRepository : PrenotazioniPastiDettaglioRepository){ + prenotazioniPastiDettaglioRepository : PrenotazioniPastiDettaglioRepository, + viewPrenotazioniPastiRepositoryImpl: ViewPrenotazioniPastiRepositoryImpl){ route("/api/prenotazioni"){ authenticate("auth-jwt") { + get("{idTessera}"){ + // Ottieni l'id della tessera dal percorso + val idTessera = call.parameters["idTessera"] + + if (idTessera == null) { + call.respondText("ID tessera non valido", status = HttpStatusCode.BadRequest) + return@get + } + + // Cerca le prenotazioni per la tessera indicata + val listaPrenotazioniPasti = viewPrenotazioniPastiRepositoryImpl.prenotazioniPastiByIdTessera(idTessera.toLong()) + + listaPrenotazioniPasti.forEach{ el -> + el.listaProdottiPrenotati = + prenotazioniPastiDettaglioRepository.listaDettagliByIdPrenotazione(el.idPrenotazione.toLong()) + } + + + call.respond(listaPrenotazioniPasti) + } post(){ try{ val listaDettagliInseriti = mutableListOf()