forked from maiora/backend-api
Compare commits
No commits in common. "49799b6734097fb6ea3a7c1bd61476f4b74cdc59" and "635b19e17a2758b76da915d1cc179677321f5d6e" have entirely different histories.
49799b6734
...
635b19e17a
@ -1,10 +1,8 @@
|
|||||||
package eu.maiora.db
|
package eu.maiora.db
|
||||||
|
|
||||||
|
|
||||||
import eu.maiora.model.*
|
import eu.maiora.model.*
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.datetime.toKotlinLocalDateTime
|
import kotlinx.datetime.toKotlinLocalDateTime
|
||||||
import kotlinx.datetime.toKotlinLocalDate
|
|
||||||
import org.jetbrains.exposed.dao.IntEntity
|
import org.jetbrains.exposed.dao.IntEntity
|
||||||
import org.jetbrains.exposed.dao.IntEntityClass
|
import org.jetbrains.exposed.dao.IntEntityClass
|
||||||
import org.jetbrains.exposed.dao.LongEntity
|
import org.jetbrains.exposed.dao.LongEntity
|
||||||
@ -128,7 +126,6 @@ object PrenotazioniPastiTable : IdTable<Long>("prenotazioni_pasti"){
|
|||||||
val idResidenza = long("id_residenza").nullable()
|
val idResidenza = long("id_residenza").nullable()
|
||||||
val idVassoio = long("id_vassoio")
|
val idVassoio = long("id_vassoio")
|
||||||
val importoPagato = double("importo_pagato")
|
val importoPagato = double("importo_pagato")
|
||||||
val codiceRistocloud = varchar("codice_ristocloud", 255).nullable()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object PrenotazioniPastiDettaglioTable : IdTable<Long>("prenotazioni_pasti_dettaglio"){
|
object PrenotazioniPastiDettaglioTable : IdTable<Long>("prenotazioni_pasti_dettaglio"){
|
||||||
@ -144,15 +141,7 @@ object ViewPrenotazioniPastiTable : IdTable<Long>("view_prenotazioni_pasti"){
|
|||||||
val idPrenotazione = long("id_prenotazione")
|
val idPrenotazione = long("id_prenotazione")
|
||||||
val idStato = long("id_stato")
|
val idStato = long("id_stato")
|
||||||
val stato = varchar("stato", 255)
|
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 dataLimiteCancellazione = datetime("data_limite_cancellazione")
|
||||||
val idVassoio = long("id_vassoio").nullable()
|
|
||||||
val codiceRistocloud = varchar("codice_ristocloud", 255).nullable()
|
|
||||||
val importoPagato = double("importo_pagato")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class AccountsDAO(id: EntityID<Int>) :IntEntity(id) {
|
class AccountsDAO(id: EntityID<Int>) :IntEntity(id) {
|
||||||
@ -268,7 +257,6 @@ class PrenotazioniPastiDao(id: EntityID<Long>) :LongEntity(id){
|
|||||||
val idResidenza by PrenotazioniPastiTable.idResidenza
|
val idResidenza by PrenotazioniPastiTable.idResidenza
|
||||||
val idVassoio by PrenotazioniPastiTable.idVassoio
|
val idVassoio by PrenotazioniPastiTable.idVassoio
|
||||||
val importoPagato by PrenotazioniPastiTable.importoPagato
|
val importoPagato by PrenotazioniPastiTable.importoPagato
|
||||||
val codiceRistocloud by PrenotazioniPastiTable.codiceRistocloud
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class PrenotazioniPastiDettaglioDao(id: EntityID<Long>) :LongEntity(id){
|
class PrenotazioniPastiDettaglioDao(id: EntityID<Long>) :LongEntity(id){
|
||||||
@ -284,16 +272,8 @@ class ViewPrenotazioniPastiDao(id: EntityID<Long>) :LongEntity(id){
|
|||||||
|
|
||||||
val idPrenotazione by ViewPrenotazioniPastiTable.idPrenotazione
|
val idPrenotazione by ViewPrenotazioniPastiTable.idPrenotazione
|
||||||
val idStato by ViewPrenotazioniPastiTable.idStato
|
val idStato by ViewPrenotazioniPastiTable.idStato
|
||||||
val idTessera by ViewPrenotazioniPastiTable.idTessera
|
|
||||||
val idSlotPuntoCassa by ViewPrenotazioniPastiTable.idSlotPuntoCassa
|
|
||||||
val stato by ViewPrenotazioniPastiTable.stato
|
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 dataLimiteCancellazione by ViewPrenotazioniPastiTable.dataLimiteCancellazione
|
||||||
val idVassoio by ViewPrenotazioniPastiTable.idVassoio
|
|
||||||
val codiceRistocloud by ViewPrenotazioniPastiTable.codiceRistocloud
|
|
||||||
val importoPagato by ViewPrenotazioniPastiTable.importoPagato
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun accountsDaoToModel(dao: AccountsDAO) = Accounts(
|
fun accountsDaoToModel(dao: AccountsDAO) = Accounts(
|
||||||
@ -424,8 +404,7 @@ fun prenotazioniPastiDaoToModel(dao: PrenotazioniPastiDao) : PrenotazioniPasti{
|
|||||||
dao.idSlotPuntoCassa,
|
dao.idSlotPuntoCassa,
|
||||||
dao.idResidenza,
|
dao.idResidenza,
|
||||||
dao.idVassoio,
|
dao.idVassoio,
|
||||||
dao.importoPagato,
|
dao.importoPagato
|
||||||
dao.codiceRistocloud
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -439,28 +418,12 @@ fun prenotazioniPastiDettaglioDaoToModel(dao: PrenotazioniPastiDettaglioDao) : P
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun viewPrenotazioniPastiDaoToModel(dao: ViewPrenotazioniPastiDao) : ViewPrenotazioniPasti{
|
fun viewPrenotazioniPastiDaoToModel(dao: ViewPrenotazioniPastiDao) : ViewPrenotazioniPasti{
|
||||||
val formatterGiorno = DateTimeFormatter.ofPattern("ddMMyyyy")
|
|
||||||
val formatterDataInizio = DateTimeFormatter.ofPattern("ddMMyyyy HH:mm")
|
|
||||||
val formatterDataLimiteCancellazione = DateTimeFormatter.ofPattern("ddMMyyyy HH:mm")
|
|
||||||
val formattedGiorno = dao.giorno.format(formatterGiorno)
|
|
||||||
val formattedDataInizio = dao.dataInizio.format(formatterDataInizio)
|
|
||||||
val formattedDataLimiteCanc = dao.dataLimiteCancellazione.format(formatterDataLimiteCancellazione)
|
|
||||||
|
|
||||||
|
|
||||||
return ViewPrenotazioniPasti(
|
return ViewPrenotazioniPasti(
|
||||||
|
dao.id.value,
|
||||||
dao.idPrenotazione,
|
dao.idPrenotazione,
|
||||||
dao.idStato,
|
dao.idStato,
|
||||||
dao.stato,
|
dao.stato,
|
||||||
dao.idTessera,
|
dao.dataLimiteCancellazione.toKotlinLocalDateTime()
|
||||||
dao.idSlotPuntoCassa,
|
|
||||||
formattedGiorno,
|
|
||||||
dao.turno,
|
|
||||||
formattedDataInizio,
|
|
||||||
formattedDataLimiteCanc,
|
|
||||||
dao.idVassoio,
|
|
||||||
dao.codiceRistocloud,
|
|
||||||
dao.importoPagato,
|
|
||||||
null
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class Prenotazioni(
|
data class Prenotazioni(
|
||||||
val id: Long? = null,
|
val id: Long? = null,
|
||||||
val codiceRistocloud: String? = null,
|
val codicePrenotazione: String? = null,
|
||||||
val idTessera : Long,
|
val idTessera : Long,
|
||||||
val idSlotPuntoCassa : Long,
|
val idSlotPuntoCassa : Long,
|
||||||
val giorno : String? = null,
|
val giorno : String? = null,
|
||||||
|
@ -9,6 +9,5 @@ data class PrenotazioniPasti(
|
|||||||
val idSlotPuntoCassa : Long,
|
val idSlotPuntoCassa : Long,
|
||||||
val idResidenza : Long? = null,
|
val idResidenza : Long? = null,
|
||||||
val idVassoio : Long,
|
val idVassoio : Long,
|
||||||
val importoPagato : Double,
|
val importoPagato : Double
|
||||||
val codiceRistocloud : String? = null
|
|
||||||
)
|
)
|
@ -13,7 +13,6 @@ class PrenotazioniPastiRepositoryImpl : PrenotazioniPastiRepository {
|
|||||||
it[idResidenza] = prenotazionePasto.idResidenza
|
it[idResidenza] = prenotazionePasto.idResidenza
|
||||||
it[idVassoio] = prenotazionePasto.idVassoio
|
it[idVassoio] = prenotazionePasto.idVassoio
|
||||||
it[importoPagato] = prenotazionePasto.importoPagato
|
it[importoPagato] = prenotazionePasto.importoPagato
|
||||||
it[codiceRistocloud] = prenotazionePasto.codiceRistocloud
|
|
||||||
}.value
|
}.value
|
||||||
|
|
||||||
PrenotazioniPasti(
|
PrenotazioniPasti(
|
||||||
@ -22,8 +21,7 @@ class PrenotazioniPastiRepositoryImpl : PrenotazioniPastiRepository {
|
|||||||
prenotazionePasto.idSlotPuntoCassa,
|
prenotazionePasto.idSlotPuntoCassa,
|
||||||
prenotazionePasto.idResidenza,
|
prenotazionePasto.idResidenza,
|
||||||
prenotazionePasto.idVassoio,
|
prenotazionePasto.idVassoio,
|
||||||
prenotazionePasto.importoPagato,
|
prenotazionePasto.importoPagato
|
||||||
prenotazionePasto.codiceRistocloud
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,5 +8,5 @@ interface SlotOrariRepository {
|
|||||||
|
|
||||||
suspend fun idResidenzaByIdSlotOrario(idSlot : Long) : Long?
|
suspend fun idResidenzaByIdSlotOrario(idSlot : Long) : Long?
|
||||||
|
|
||||||
suspend fun slotOrarioById(idSlot : Long) : SlotOrari?
|
suspend fun slotOrarioById(idSlot : Long) : SlotOrari
|
||||||
}
|
}
|
@ -30,9 +30,9 @@ class SlotOrariRepositoryImpl : SlotOrariRepository {
|
|||||||
.idResidenza
|
.idResidenza
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun slotOrarioById(idSlot : Long) : SlotOrari? = suspendTransaction {
|
override suspend fun slotOrarioById(idSlot : Long) : SlotOrari = suspendTransaction {
|
||||||
SlotPrenotabiliDao.find{ SlotPrenotabiliTable.id eq idSlot }
|
SlotPrenotabiliDao.find{ SlotPrenotabiliTable.id eq idSlot }
|
||||||
.singleOrNull() // Restituisce un singolo risultato o null se non trovato
|
.single() // Restituisce un singolo risultato o null se non trovato
|
||||||
?.let { slotOrariDaoToModel(it) } // Converte il DAO in un oggetto SlotOrari
|
.let { slotOrariDaoToModel(it) } // Converte il DAO in un oggetto SlotOrari
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,23 +1,13 @@
|
|||||||
package eu.maiora.model
|
package eu.maiora.model
|
||||||
|
|
||||||
import kotlinx.datetime.LocalDate
|
|
||||||
import kotlinx.datetime.LocalDateTime
|
import kotlinx.datetime.LocalDateTime
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class ViewPrenotazioniPasti(
|
data class ViewPrenotazioniPasti(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
|
val idPrenotazione: Long,
|
||||||
val idStato: Long,
|
val idStato: Long,
|
||||||
val stato: String,
|
val stato: String,
|
||||||
val idTessera: Long,
|
val dataLimiteCancellazione: LocalDateTime
|
||||||
val idSlotPuntoCassa: Long,
|
|
||||||
val giorno: String,
|
|
||||||
val turno: String,
|
|
||||||
val dataInizio: String,
|
|
||||||
val dataLimiteCancellazione: String,
|
|
||||||
val idVassoio: Long? = null,
|
|
||||||
val codiceRistocloud: String? = null,
|
|
||||||
val importoPagato: Double,
|
|
||||||
var listaProdotti: List<PrenotazioniPastiDettaglio>? = null
|
|
||||||
|
|
||||||
)
|
)
|
@ -2,5 +2,4 @@ package eu.maiora.model
|
|||||||
|
|
||||||
interface ViewPrenotazioniPastiRepository {
|
interface ViewPrenotazioniPastiRepository {
|
||||||
suspend fun prenotazioniPastiById(id : Long): ViewPrenotazioniPasti
|
suspend fun prenotazioniPastiById(id : Long): ViewPrenotazioniPasti
|
||||||
suspend fun prenotazioniPastiByIdTessera(idTessera : Long): List<ViewPrenotazioniPasti>
|
|
||||||
}
|
}
|
@ -12,13 +12,4 @@ class ViewPrenotazioniPastiRepositoryImpl : ViewPrenotazioniPastiRepository {
|
|||||||
.first() //prendo solo il primo record, dato che ci sono tanti record quanti prodotti prenotati
|
.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
|
.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
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -22,10 +22,7 @@ fun Application.configureRouting() {
|
|||||||
slotOrari(SlotOrariRepositoryImpl())
|
slotOrari(SlotOrariRepositoryImpl())
|
||||||
prodottiPrenotabili(ProdottiPrenotabiliRepositoryImpl())
|
prodottiPrenotabili(ProdottiPrenotabiliRepositoryImpl())
|
||||||
residenze(ResidenzeRepositoryImpl())
|
residenze(ResidenzeRepositoryImpl())
|
||||||
prenotazioni(PrenotazioniPastiRepositoryImpl(),
|
prenotazioni(PrenotazioniPastiRepositoryImpl(), SlotOrariRepositoryImpl(), PrenotazioniPastiDettaglioRepositoryImpl())
|
||||||
SlotOrariRepositoryImpl(),
|
|
||||||
PrenotazioniPastiDettaglioRepositoryImpl(),
|
|
||||||
ViewPrenotazioniPastiRepositoryImpl())
|
|
||||||
annullaPrenotazioni(ViewPrenotazioniPastiRepositoryImpl(), PrenotazioniPastiDettaglioRepositoryImpl())
|
annullaPrenotazioni(ViewPrenotazioniPastiRepositoryImpl(), PrenotazioniPastiDettaglioRepositoryImpl())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,8 +37,8 @@ fun Route.annullaPrenotazioni(
|
|||||||
return@patch
|
return@patch
|
||||||
}
|
}
|
||||||
|
|
||||||
//prenotazione annullabile se la data limite per la cancellazione non è stata superata
|
//prenotazione annullabile se la data limite per la cancellazione non è stato superato
|
||||||
if (LocalDateTime.now().isAfter(LocalDateTime.parse(prenotazione.dataLimiteCancellazione))) {
|
if (LocalDateTime.now().isAfter(prenotazione.dataLimiteCancellazione.toJavaLocalDateTime())) {
|
||||||
call.respond(
|
call.respond(
|
||||||
HttpStatusCode.BadRequest,
|
HttpStatusCode.BadRequest,
|
||||||
"Prenotazione non annullata: data limite cancellazione superata"
|
"Prenotazione non annullata: data limite cancellazione superata"
|
||||||
|
@ -11,41 +11,15 @@ import io.ktor.server.routing.*
|
|||||||
|
|
||||||
fun Route.prenotazioni(prenotazioniPastiRepository: PrenotazioniPastiRepository,
|
fun Route.prenotazioni(prenotazioniPastiRepository: PrenotazioniPastiRepository,
|
||||||
slotOrariRepository: SlotOrariRepository,
|
slotOrariRepository: SlotOrariRepository,
|
||||||
prenotazioniPastiDettaglioRepository : PrenotazioniPastiDettaglioRepository,
|
prenotazioniPastiDettaglioRepository : PrenotazioniPastiDettaglioRepository){
|
||||||
viewPrenotazioniPastiRepositoryImpl: ViewPrenotazioniPastiRepositoryImpl){
|
|
||||||
route("/api/prenotazioni"){
|
route("/api/prenotazioni"){
|
||||||
authenticate("auth-jwt") {
|
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.listaProdotti =
|
|
||||||
prenotazioniPastiDettaglioRepository.listaDettagliByIdPrenotazione(el.id)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
call.respond(listaPrenotazioniPasti)
|
|
||||||
}
|
|
||||||
post(){
|
post(){
|
||||||
try{
|
try{
|
||||||
val listaDettagliInseriti = mutableListOf<PrenotazioniPastiDettaglio>()
|
val listaDettagliInseriti = mutableListOf<PrenotazioniPastiDettaglio>()
|
||||||
val prenotazioneRequest = call.receive<Prenotazioni>()
|
val prenotazioneRequest = call.receive<Prenotazioni>()
|
||||||
//recupera lo slot orario selezionato
|
//recupera lo slot orario selezionato
|
||||||
val idSlotOrario = slotOrariRepository.slotOrarioById(prenotazioneRequest.idSlotPuntoCassa)
|
val idSlotOrario = slotOrariRepository.slotOrarioById(prenotazioneRequest.idSlotPuntoCassa)
|
||||||
if(idSlotOrario == null){
|
|
||||||
call.respond(HttpStatusCode.BadRequest,"Slot orario non esistente")
|
|
||||||
return@post
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
val prenotazionePasto = PrenotazioniPasti(
|
val prenotazionePasto = PrenotazioniPasti(
|
||||||
-1,
|
-1,
|
||||||
@ -53,8 +27,7 @@ fun Route.prenotazioni(prenotazioniPastiRepository: PrenotazioniPastiRepository,
|
|||||||
prenotazioneRequest.idSlotPuntoCassa,
|
prenotazioneRequest.idSlotPuntoCassa,
|
||||||
idSlotOrario.idResidenza,
|
idSlotOrario.idResidenza,
|
||||||
prenotazioneRequest.idVassoio,
|
prenotazioneRequest.idVassoio,
|
||||||
prenotazioneRequest.importoPagato,
|
prenotazioneRequest.importoPagato
|
||||||
prenotazioneRequest.codiceRistocloud
|
|
||||||
)
|
)
|
||||||
|
|
||||||
//Inserisci la prenotazione nel database
|
//Inserisci la prenotazione nel database
|
||||||
@ -76,7 +49,7 @@ fun Route.prenotazioni(prenotazioniPastiRepository: PrenotazioniPastiRepository,
|
|||||||
//restituisci la prenotazione
|
//restituisci la prenotazione
|
||||||
val prenotazione = Prenotazioni(
|
val prenotazione = Prenotazioni(
|
||||||
prenotazioneInserita.id,
|
prenotazioneInserita.id,
|
||||||
prenotazioneRequest.codiceRistocloud,
|
prenotazioneRequest.codicePrenotazione,
|
||||||
prenotazioneInserita.idTessera,
|
prenotazioneInserita.idTessera,
|
||||||
prenotazioneInserita.idSlotPuntoCassa,
|
prenotazioneInserita.idSlotPuntoCassa,
|
||||||
idSlotOrario.giorno,
|
idSlotOrario.giorno,
|
||||||
|
Loading…
Reference in New Issue
Block a user