84 lines
3.5 KiB
Kotlin
84 lines
3.5 KiB
Kotlin
package eu.maiora.routes
|
|
|
|
import eu.maiora.model.*
|
|
import io.ktor.http.*
|
|
import io.ktor.server.application.*
|
|
import io.ktor.server.auth.*
|
|
import io.ktor.server.request.*
|
|
import io.ktor.server.response.*
|
|
import io.ktor.server.routing.*
|
|
|
|
|
|
fun Route.prenotazioni(prenotazioniPastiRepository: PrenotazioniPastiRepository,
|
|
slotOrariRepository: SlotOrariRepository,
|
|
prenotazioniPastiDettaglioRepository : PrenotazioniPastiDettaglioRepository){
|
|
route("/api/prenotazioni"){
|
|
authenticate("auth-jwt") {
|
|
post(){
|
|
try{
|
|
val listaDettagliInseriti = mutableListOf<PrenotazioniPastiDettaglio>()
|
|
val prenotazioneRequest = call.receive<Prenotazioni>()
|
|
//recupera lo slot orario selezionato
|
|
val idSlotOrario = slotOrariRepository.slotOrarioById(prenotazioneRequest.idSlotPuntoCassa)
|
|
if(idSlotOrario == null){
|
|
call.respond(HttpStatusCode.BadRequest,"Slot orario non esistente")
|
|
return@post
|
|
}
|
|
|
|
|
|
val prenotazionePasto = PrenotazioniPasti(
|
|
-1,
|
|
prenotazioneRequest.idTessera,
|
|
prenotazioneRequest.idSlotPuntoCassa,
|
|
idSlotOrario.idResidenza,
|
|
prenotazioneRequest.idVassoio,
|
|
prenotazioneRequest.importoPagato,
|
|
prenotazioneRequest.codiceRistocloud
|
|
)
|
|
|
|
//Inserisci la prenotazione nel database
|
|
val prenotazioneInserita = prenotazioniPastiRepository.insert(prenotazionePasto)
|
|
|
|
//per ogni prodotto, inserisci il dettaglio della prenotazione
|
|
prenotazioneRequest.listaProdotti?.forEach { el ->
|
|
val dettaglioPrenotazione = PrenotazioniPastiDettaglio(
|
|
-1,
|
|
prenotazioneInserita.id,
|
|
el.id,
|
|
0L
|
|
)
|
|
listaDettagliInseriti.add(prenotazioniPastiDettaglioRepository.insert(dettaglioPrenotazione))
|
|
|
|
}
|
|
|
|
|
|
//restituisci la prenotazione
|
|
val prenotazione = Prenotazioni(
|
|
prenotazioneInserita.id,
|
|
prenotazioneRequest.codiceRistocloud,
|
|
prenotazioneInserita.idTessera,
|
|
prenotazioneInserita.idSlotPuntoCassa,
|
|
idSlotOrario.giorno,
|
|
idSlotOrario.turno,
|
|
idSlotOrario.dataInizio,
|
|
idSlotOrario.dataFine,
|
|
idSlotOrario.dataLimiteCancellazione,
|
|
prenotazioneRequest.idVassoio,
|
|
prenotazioneRequest.idStato,
|
|
prenotazioneRequest.stato,
|
|
prenotazioneRequest.listaProdotti,
|
|
prenotazioneRequest.importoPagato
|
|
)
|
|
call.respond(HttpStatusCode.Created, prenotazione)
|
|
}
|
|
catch (e: Exception){
|
|
call.respond(
|
|
HttpStatusCode.BadRequest,
|
|
"Errore nel processare la richiesta: ${e.cause}"
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
} |