forked from maiora/backend-api
/POST prenotazioni
inserimento nuova prenotazione, con i relativi prodotti
This commit is contained in:
parent
4c3ea7fbf0
commit
fbcef1af3e
@ -82,6 +82,7 @@ object SlotPrenotabiliTable : IdTable<Long>("view_slot_prenotabili"){
|
|||||||
val giorno = date("giorno")
|
val giorno = date("giorno")
|
||||||
val dataInizio = datetime("data_inizio")
|
val dataInizio = datetime("data_inizio")
|
||||||
val dataFine = datetime("data_fine")
|
val dataFine = datetime("data_fine")
|
||||||
|
val dataLimiteCancellazione = datetime("data_limite_cancellazione")
|
||||||
val idModalita = long("id_modalita")
|
val idModalita = long("id_modalita")
|
||||||
val modalitaPrenotazione = varchar("modalita_prenotazione", 255)
|
val modalitaPrenotazione = varchar("modalita_prenotazione", 255)
|
||||||
val idPuntoDistribuzione = long("id_punto_distribuzione")
|
val idPuntoDistribuzione = long("id_punto_distribuzione")
|
||||||
@ -117,6 +118,23 @@ object ResidenzeTable : IdTable<Long>("residenze"){
|
|||||||
val nome = varchar("nome", 255)
|
val nome = varchar("nome", 255)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object PrenotazioniPastiTable : IdTable<Long>("prenotazioni_pasti"){
|
||||||
|
override val id = long("id").autoIncrement("seq_prenotazioni_pasti").entityId()
|
||||||
|
val idTessera = long("id_tessera")
|
||||||
|
val idSlotPuntoCassa = long("id_slot_punto_cassa")
|
||||||
|
val idResidenza = long("id_residenza").nullable()
|
||||||
|
val idVassoio = long("id_vassoio")
|
||||||
|
val importoPagato = RicaricheTable.double("importo_pagato")
|
||||||
|
}
|
||||||
|
|
||||||
|
object PrenotazioniPastiDettaglioTable : IdTable<Long>("prenotazioni_pasti_dettaglio"){
|
||||||
|
override val id = long("id").autoIncrement("seq_pren_past_dettaglio").entityId()
|
||||||
|
val idPrenotazione = long("id_prenotazione")
|
||||||
|
val idProdotto = long("id_prodotto")
|
||||||
|
val idStato = long("id_stato")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
class AccountsDAO(id: EntityID<Int>) :IntEntity(id) {
|
class AccountsDAO(id: EntityID<Int>) :IntEntity(id) {
|
||||||
companion object : IntEntityClass<AccountsDAO>(AccountsTable)
|
companion object : IntEntityClass<AccountsDAO>(AccountsTable)
|
||||||
|
|
||||||
@ -184,6 +202,7 @@ class SlotPrenotabiliDao(id: EntityID<Long>) :LongEntity(id) {
|
|||||||
var giorno by SlotPrenotabiliTable.giorno
|
var giorno by SlotPrenotabiliTable.giorno
|
||||||
var dataInizio by SlotPrenotabiliTable.dataInizio
|
var dataInizio by SlotPrenotabiliTable.dataInizio
|
||||||
var dataFine by SlotPrenotabiliTable.dataFine
|
var dataFine by SlotPrenotabiliTable.dataFine
|
||||||
|
var dataLimiteCancellazione by SlotPrenotabiliTable.dataLimiteCancellazione
|
||||||
var idModalita by SlotPrenotabiliTable.idModalita
|
var idModalita by SlotPrenotabiliTable.idModalita
|
||||||
var modalitaPrenotazione by SlotPrenotabiliTable.modalitaPrenotazione
|
var modalitaPrenotazione by SlotPrenotabiliTable.modalitaPrenotazione
|
||||||
var idPuntoDistribuzione by SlotPrenotabiliTable.idPuntoDistribuzione
|
var idPuntoDistribuzione by SlotPrenotabiliTable.idPuntoDistribuzione
|
||||||
@ -291,12 +310,14 @@ fun slotOrariDaoToModel(dao: SlotPrenotabiliDao) :SlotOrari{
|
|||||||
val formattedGiorno = dao.giorno.format(formatterGiorno)
|
val formattedGiorno = dao.giorno.format(formatterGiorno)
|
||||||
val formattedDataInizio = dao.dataInizio.format(formatterConOra)
|
val formattedDataInizio = dao.dataInizio.format(formatterConOra)
|
||||||
val formattedDataFine = dao.dataFine.format(formatterConOra)
|
val formattedDataFine = dao.dataFine.format(formatterConOra)
|
||||||
|
val formattedDataLimiteCancellazione = dao.dataLimiteCancellazione.format(formatterConOra)
|
||||||
|
|
||||||
return SlotOrari(
|
return SlotOrari(
|
||||||
dao.id.value,
|
dao.id.value,
|
||||||
formattedGiorno,
|
formattedGiorno,
|
||||||
formattedDataInizio,
|
formattedDataInizio,
|
||||||
formattedDataFine,
|
formattedDataFine,
|
||||||
|
formattedDataLimiteCancellazione,
|
||||||
dao.idPuntoDistribuzione,
|
dao.idPuntoDistribuzione,
|
||||||
dao.puntoDistribuzione,
|
dao.puntoDistribuzione,
|
||||||
dao.idPuntoCassa,
|
dao.idPuntoCassa,
|
||||||
|
21
src/main/kotlin/eu/maiora/model/Prenotazioni.kt
Normal file
21
src/main/kotlin/eu/maiora/model/Prenotazioni.kt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package eu.maiora.model
|
||||||
|
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class Prenotazioni(
|
||||||
|
val id: Long? = null,
|
||||||
|
val codicePrenotazione: String? = null,
|
||||||
|
val idTessera : Long,
|
||||||
|
val idSlotPuntoCassa : Long,
|
||||||
|
val giorno : String? = null,
|
||||||
|
val turno : String? = null,
|
||||||
|
val dataInizio : String? = null,
|
||||||
|
val dataFine : String? = null,
|
||||||
|
val dataLimiteCancellazione : String? = null,
|
||||||
|
val idVassoio : Long,
|
||||||
|
val idStato : Long? = null,
|
||||||
|
val stato : String? = null,
|
||||||
|
val listaProdotti : List<ProdottiPrenotabili>? = null,
|
||||||
|
val importoPagato : Double
|
||||||
|
)
|
13
src/main/kotlin/eu/maiora/model/PrenotazioniPasti.kt
Normal file
13
src/main/kotlin/eu/maiora/model/PrenotazioniPasti.kt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package eu.maiora.model
|
||||||
|
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class PrenotazioniPasti(
|
||||||
|
val id: Long,
|
||||||
|
val idTessera : Long,
|
||||||
|
val idSlotPuntoCassa : Long,
|
||||||
|
val idResidenza : Long? = null,
|
||||||
|
val idVassoio : Long,
|
||||||
|
val importoPagato : Double
|
||||||
|
)
|
@ -0,0 +1,11 @@
|
|||||||
|
package eu.maiora.model
|
||||||
|
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class PrenotazioniPastiDettaglio(
|
||||||
|
val id: Long? = null,
|
||||||
|
val idPrenotazione : Long,
|
||||||
|
val idProdotto : Long,
|
||||||
|
val idStato : Long
|
||||||
|
)
|
@ -0,0 +1,5 @@
|
|||||||
|
package eu.maiora.model
|
||||||
|
|
||||||
|
interface PrenotazioniPastiDettaglioRepository {
|
||||||
|
suspend fun insert(prenotazionePastoDettaglio : PrenotazioniPastiDettaglio): PrenotazioniPastiDettaglio
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package eu.maiora.model
|
||||||
|
|
||||||
|
import eu.maiora.db.*
|
||||||
|
import org.jetbrains.exposed.sql.insertAndGetId
|
||||||
|
|
||||||
|
class PrenotazioniPastiDettaglioRepositoryImpl : PrenotazioniPastiDettaglioRepository {
|
||||||
|
override suspend fun insert(prenotazionePastoDettaglio : PrenotazioniPastiDettaglio): PrenotazioniPastiDettaglio = suspendTransaction {
|
||||||
|
// Inserisci un nuovo dettaglio di una prenotazione pasto
|
||||||
|
// ID non definito: viene gestito dalla sequence
|
||||||
|
val idPrenPastiDettInserted = PrenotazioniPastiDettaglioTable.insertAndGetId {
|
||||||
|
it[idPrenotazione] = prenotazionePastoDettaglio.idPrenotazione
|
||||||
|
it[idProdotto] = prenotazionePastoDettaglio.idProdotto
|
||||||
|
it[idStato] = prenotazionePastoDettaglio.idStato
|
||||||
|
}.value
|
||||||
|
|
||||||
|
PrenotazioniPastiDettaglio(
|
||||||
|
idPrenPastiDettInserted,
|
||||||
|
prenotazionePastoDettaglio.idPrenotazione,
|
||||||
|
prenotazionePastoDettaglio.idProdotto,
|
||||||
|
prenotazionePastoDettaglio.idStato
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package eu.maiora.model
|
||||||
|
|
||||||
|
interface PrenotazioniPastiRepository {
|
||||||
|
suspend fun insert(prenotazionePasto : PrenotazioniPasti): PrenotazioniPasti
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package eu.maiora.model
|
||||||
|
|
||||||
|
import eu.maiora.db.*
|
||||||
|
import org.jetbrains.exposed.sql.insertAndGetId
|
||||||
|
|
||||||
|
class PrenotazioniPastiRepositoryImpl : PrenotazioniPastiRepository {
|
||||||
|
override suspend fun insert(prenotazionePasto : PrenotazioniPasti): PrenotazioniPasti = suspendTransaction {
|
||||||
|
// Inserisci una nuova prenotazione pasto
|
||||||
|
// ID non definito: viene gestito dalla sequence
|
||||||
|
val idPrenPastiInserted = PrenotazioniPastiTable.insertAndGetId {
|
||||||
|
it[idTessera] = prenotazionePasto.idTessera
|
||||||
|
it[idSlotPuntoCassa] = prenotazionePasto.idSlotPuntoCassa
|
||||||
|
it[idResidenza] = prenotazionePasto.idResidenza
|
||||||
|
it[idVassoio] = prenotazionePasto.idVassoio
|
||||||
|
it[importoPagato] = prenotazionePasto.importoPagato
|
||||||
|
}.value
|
||||||
|
|
||||||
|
PrenotazioniPasti(
|
||||||
|
idPrenPastiInserted,
|
||||||
|
prenotazionePasto.idTessera,
|
||||||
|
prenotazionePasto.idSlotPuntoCassa,
|
||||||
|
prenotazionePasto.idResidenza,
|
||||||
|
prenotazionePasto.idVassoio,
|
||||||
|
prenotazionePasto.importoPagato
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -5,17 +5,17 @@ import kotlinx.serialization.Serializable
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class ProdottiPrenotabili(
|
data class ProdottiPrenotabili(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
val giorno : String,
|
val giorno : String? = null,
|
||||||
val idPuntoDistribuzione : Long,
|
val idPuntoDistribuzione : Long? = null,
|
||||||
val puntoDistribuzione : String,
|
val puntoDistribuzione : String? = null,
|
||||||
val idTurno : Long,
|
val idTurno : Long? = null,
|
||||||
val turno : String,
|
val turno : String? = null,
|
||||||
val idProdotto : Long,
|
val idProdotto : Long? = null,
|
||||||
val prodotto : String,
|
val prodotto : String? = null,
|
||||||
val codiceProdotto : String,
|
val codiceProdotto : String? = null,
|
||||||
val descrizioneProdotto : String,
|
val descrizioneProdotto : String? = null,
|
||||||
val idCategoria : Long,
|
val idCategoria : Long? = null,
|
||||||
val categoria : String,
|
val categoria : String? = null,
|
||||||
val idModalita : Long,
|
val idModalita : Long? = null,
|
||||||
val modalitaPrenotazione : String
|
val modalitaPrenotazione : String? = null
|
||||||
)
|
)
|
@ -8,6 +8,7 @@ data class SlotOrari(
|
|||||||
val giorno : String,
|
val giorno : String,
|
||||||
val dataInizio : String,
|
val dataInizio : String,
|
||||||
val dataFine : String,
|
val dataFine : String,
|
||||||
|
val dataLimiteCancellazione : String,
|
||||||
val idPuntoDistribuzione : Long,
|
val idPuntoDistribuzione : Long,
|
||||||
val puntoDistribuzione : String,
|
val puntoDistribuzione : String,
|
||||||
val idPuntoCassa : Long,
|
val idPuntoCassa : Long,
|
||||||
|
@ -5,4 +5,8 @@ interface SlotOrariRepository {
|
|||||||
idTurno : Long,
|
idTurno : Long,
|
||||||
idPuntoDistribuzione : Long,
|
idPuntoDistribuzione : Long,
|
||||||
idModalita : Long): List<SlotOrari>?
|
idModalita : Long): List<SlotOrari>?
|
||||||
|
|
||||||
|
suspend fun idResidenzaByIdSlotOrario(idSlot : Long) : Long?
|
||||||
|
|
||||||
|
suspend fun slotOrarioById(idSlot : Long) : SlotOrari
|
||||||
}
|
}
|
@ -22,4 +22,17 @@ class SlotOrariRepositoryImpl : SlotOrariRepository {
|
|||||||
.map { slotOrariDaoToModel(it) } // Converte il DAO in un oggetto SlotOrari
|
.map { slotOrariDaoToModel(it) } // Converte il DAO in un oggetto SlotOrari
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun idResidenzaByIdSlotOrario(idSlot : Long) : Long? = suspendTransaction {
|
||||||
|
SlotPrenotabiliDao.find{ SlotPrenotabiliTable.id eq idSlot }
|
||||||
|
.single() // Restituisce un singolo risultato o null se non trovato
|
||||||
|
.let { slotOrariDaoToModel(it) } // Converte il DAO in un oggetto SlotOrari
|
||||||
|
.idResidenza
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun slotOrarioById(idSlot : Long) : SlotOrari = suspendTransaction {
|
||||||
|
SlotPrenotabiliDao.find{ SlotPrenotabiliTable.id eq idSlot }
|
||||||
|
.single() // Restituisce un singolo risultato o null se non trovato
|
||||||
|
.let { slotOrariDaoToModel(it) } // Converte il DAO in un oggetto SlotOrari
|
||||||
|
}
|
||||||
}
|
}
|
@ -22,5 +22,6 @@ fun Application.configureRouting() {
|
|||||||
slotOrari(SlotOrariRepositoryImpl())
|
slotOrari(SlotOrariRepositoryImpl())
|
||||||
prodottiPrenotabili(ProdottiPrenotabiliRepositoryImpl())
|
prodottiPrenotabili(ProdottiPrenotabiliRepositoryImpl())
|
||||||
residenze(ResidenzeRepositoryImpl())
|
residenze(ResidenzeRepositoryImpl())
|
||||||
|
prenotazioni(PrenotazioniPastiRepositoryImpl(), SlotOrariRepositoryImpl(), PrenotazioniPastiDettaglioRepositoryImpl())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
78
src/main/kotlin/eu/maiora/routes/Prenotazioni.kt
Normal file
78
src/main/kotlin/eu/maiora/routes/Prenotazioni.kt
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
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)
|
||||||
|
|
||||||
|
val prenotazionePasto = PrenotazioniPasti(
|
||||||
|
-1,
|
||||||
|
prenotazioneRequest.idTessera,
|
||||||
|
prenotazioneRequest.idSlotPuntoCassa,
|
||||||
|
idSlotOrario.idResidenza,
|
||||||
|
prenotazioneRequest.idVassoio,
|
||||||
|
prenotazioneRequest.importoPagato
|
||||||
|
)
|
||||||
|
|
||||||
|
//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.codicePrenotazione,
|
||||||
|
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}"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user