Merge pull request '/GET prenotazioni' (#15) from 0002429-endpoint-prenotazioni into dev

Reviewed-on: #15
This commit is contained in:
Francesco Di Sciascio 2025-05-12 15:52:44 +00:00
commit 3a3e9b633b
6 changed files with 76 additions and 4 deletions

View File

@ -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<Long>("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<Int>) :IntEntity(id) {
@ -274,8 +284,16 @@ class ViewPrenotazioniPastiDao(id: EntityID<Long>) :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
)
}

View File

@ -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<PrenotazioniPastiDettaglio>? = null
)

View File

@ -2,4 +2,5 @@ package eu.maiora.model
interface ViewPrenotazioniPastiRepository {
suspend fun prenotazioniPastiById(id : Long): ViewPrenotazioniPasti
suspend fun prenotazioniPastiByIdTessera(idTessera : Long): List<ViewPrenotazioniPasti>
}

View File

@ -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<ViewPrenotazioniPasti> = 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
}
}

View File

@ -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())
}
}

View File

@ -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<PrenotazioniPastiDettaglio>()