forked from maiora/backend-api
Compare commits
No commits in common. "73e46947cd65ad1397f0e1e0102058adc3cf780c" and "fbcef1af3e9ddb081e62d20a8be05cde2e22e94f" have entirely different histories.
73e46947cd
...
fbcef1af3e
@ -2,7 +2,6 @@ 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 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
|
||||||
@ -125,7 +124,7 @@ object PrenotazioniPastiTable : IdTable<Long>("prenotazioni_pasti"){
|
|||||||
val idSlotPuntoCassa = long("id_slot_punto_cassa")
|
val idSlotPuntoCassa = long("id_slot_punto_cassa")
|
||||||
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 = RicaricheTable.double("importo_pagato")
|
||||||
}
|
}
|
||||||
|
|
||||||
object PrenotazioniPastiDettaglioTable : IdTable<Long>("prenotazioni_pasti_dettaglio"){
|
object PrenotazioniPastiDettaglioTable : IdTable<Long>("prenotazioni_pasti_dettaglio"){
|
||||||
@ -136,14 +135,6 @@ object PrenotazioniPastiDettaglioTable : IdTable<Long>("prenotazioni_pasti_detta
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object ViewPrenotazioniPastiTable : IdTable<Long>("view_prenotazioni_pasti"){
|
|
||||||
override val id = long("id").entityId()
|
|
||||||
val idPrenotazione = long("id_prenotazione")
|
|
||||||
val idStato = long("id_stato")
|
|
||||||
val stato = varchar("stato", 255)
|
|
||||||
val dataLimiteCancellazione = datetime("data_limite_cancellazione")
|
|
||||||
}
|
|
||||||
|
|
||||||
class AccountsDAO(id: EntityID<Int>) :IntEntity(id) {
|
class AccountsDAO(id: EntityID<Int>) :IntEntity(id) {
|
||||||
companion object : IntEntityClass<AccountsDAO>(AccountsTable)
|
companion object : IntEntityClass<AccountsDAO>(AccountsTable)
|
||||||
|
|
||||||
@ -249,33 +240,6 @@ class ResidenzeDao(id: EntityID<Long>) :LongEntity(id){
|
|||||||
val nome by ResidenzeTable.nome
|
val nome by ResidenzeTable.nome
|
||||||
}
|
}
|
||||||
|
|
||||||
class PrenotazioniPastiDao(id: EntityID<Long>) :LongEntity(id){
|
|
||||||
companion object : LongEntityClass<PrenotazioniPastiDao>(PrenotazioniPastiTable)
|
|
||||||
|
|
||||||
val idTessera by PrenotazioniPastiTable.idTessera
|
|
||||||
val idSlotPuntoCassa by PrenotazioniPastiTable.idSlotPuntoCassa
|
|
||||||
val idResidenza by PrenotazioniPastiTable.idResidenza
|
|
||||||
val idVassoio by PrenotazioniPastiTable.idVassoio
|
|
||||||
val importoPagato by PrenotazioniPastiTable.importoPagato
|
|
||||||
}
|
|
||||||
|
|
||||||
class PrenotazioniPastiDettaglioDao(id: EntityID<Long>) :LongEntity(id){
|
|
||||||
companion object : LongEntityClass<PrenotazioniPastiDettaglioDao>(PrenotazioniPastiDettaglioTable)
|
|
||||||
|
|
||||||
val idPrenotazione by PrenotazioniPastiDettaglioTable.idPrenotazione
|
|
||||||
val idProdotto by PrenotazioniPastiDettaglioTable.idProdotto
|
|
||||||
val idStato by PrenotazioniPastiDettaglioTable.idStato
|
|
||||||
}
|
|
||||||
|
|
||||||
class ViewPrenotazioniPastiDao(id: EntityID<Long>) :LongEntity(id){
|
|
||||||
companion object : LongEntityClass<ViewPrenotazioniPastiDao>(ViewPrenotazioniPastiTable)
|
|
||||||
|
|
||||||
val idPrenotazione by ViewPrenotazioniPastiTable.idPrenotazione
|
|
||||||
val idStato by ViewPrenotazioniPastiTable.idStato
|
|
||||||
val stato by ViewPrenotazioniPastiTable.stato
|
|
||||||
val dataLimiteCancellazione by ViewPrenotazioniPastiTable.dataLimiteCancellazione
|
|
||||||
}
|
|
||||||
|
|
||||||
fun accountsDaoToModel(dao: AccountsDAO) = Accounts(
|
fun accountsDaoToModel(dao: AccountsDAO) = Accounts(
|
||||||
dao.id.value,
|
dao.id.value,
|
||||||
dao.username,
|
dao.username,
|
||||||
@ -397,36 +361,6 @@ fun residenzeDaoToModel(dao: ResidenzeDao) :Residenze{
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun prenotazioniPastiDaoToModel(dao: PrenotazioniPastiDao) : PrenotazioniPasti{
|
|
||||||
return PrenotazioniPasti(
|
|
||||||
dao.id.value,
|
|
||||||
dao.idTessera,
|
|
||||||
dao.idSlotPuntoCassa,
|
|
||||||
dao.idResidenza,
|
|
||||||
dao.idVassoio,
|
|
||||||
dao.importoPagato
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun prenotazioniPastiDettaglioDaoToModel(dao: PrenotazioniPastiDettaglioDao) : PrenotazioniPastiDettaglio{
|
|
||||||
return PrenotazioniPastiDettaglio(
|
|
||||||
dao.id.value,
|
|
||||||
dao.idPrenotazione,
|
|
||||||
dao.idProdotto,
|
|
||||||
dao.idStato
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun viewPrenotazioniPastiDaoToModel(dao: ViewPrenotazioniPastiDao) : ViewPrenotazioniPasti{
|
|
||||||
return ViewPrenotazioniPasti(
|
|
||||||
dao.id.value,
|
|
||||||
dao.idPrenotazione,
|
|
||||||
dao.idStato,
|
|
||||||
dao.stato,
|
|
||||||
dao.dataLimiteCancellazione.toKotlinLocalDateTime()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
suspend fun <T> suspendTransaction(block: Transaction.() -> T): T =
|
suspend fun <T> suspendTransaction(block: Transaction.() -> T): T =
|
||||||
newSuspendedTransaction(Dispatchers.IO, statement = block)
|
newSuspendedTransaction(Dispatchers.IO, statement = block)
|
@ -2,6 +2,4 @@ package eu.maiora.model
|
|||||||
|
|
||||||
interface PrenotazioniPastiDettaglioRepository {
|
interface PrenotazioniPastiDettaglioRepository {
|
||||||
suspend fun insert(prenotazionePastoDettaglio : PrenotazioniPastiDettaglio): PrenotazioniPastiDettaglio
|
suspend fun insert(prenotazionePastoDettaglio : PrenotazioniPastiDettaglio): PrenotazioniPastiDettaglio
|
||||||
suspend fun update(prenotazionePastoDettaglio: PrenotazioniPastiDettaglio): PrenotazioniPastiDettaglio
|
|
||||||
suspend fun listaDettagliByIdPrenotazione(idPrenotazione : Long): List<PrenotazioniPastiDettaglio>
|
|
||||||
}
|
}
|
@ -2,10 +2,9 @@ package eu.maiora.model
|
|||||||
|
|
||||||
import eu.maiora.db.*
|
import eu.maiora.db.*
|
||||||
import org.jetbrains.exposed.sql.insertAndGetId
|
import org.jetbrains.exposed.sql.insertAndGetId
|
||||||
import org.jetbrains.exposed.sql.update
|
|
||||||
|
|
||||||
class PrenotazioniPastiDettaglioRepositoryImpl : PrenotazioniPastiDettaglioRepository {
|
class PrenotazioniPastiDettaglioRepositoryImpl : PrenotazioniPastiDettaglioRepository {
|
||||||
override suspend fun insert(prenotazionePastoDettaglio : PrenotazioniPastiDettaglio): PrenotazioniPastiDettaglio = suspendTransaction {
|
override suspend fun insert(prenotazionePastoDettaglio : PrenotazioniPastiDettaglio): PrenotazioniPastiDettaglio = suspendTransaction {
|
||||||
// Inserisci un nuovo dettaglio di una prenotazione pasto
|
// Inserisci un nuovo dettaglio di una prenotazione pasto
|
||||||
// ID non definito: viene gestito dalla sequence
|
// ID non definito: viene gestito dalla sequence
|
||||||
val idPrenPastiDettInserted = PrenotazioniPastiDettaglioTable.insertAndGetId {
|
val idPrenPastiDettInserted = PrenotazioniPastiDettaglioTable.insertAndGetId {
|
||||||
@ -21,22 +20,4 @@ class PrenotazioniPastiDettaglioRepositoryImpl : PrenotazioniPastiDettaglioRepos
|
|||||||
prenotazionePastoDettaglio.idStato
|
prenotazionePastoDettaglio.idStato
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun update (prenotazionePastoDettaglio : PrenotazioniPastiDettaglio): PrenotazioniPastiDettaglio = suspendTransaction {
|
|
||||||
PrenotazioniPastiDettaglioTable.update({PrenotazioniPastiDettaglioTable.id eq prenotazionePastoDettaglio.id}){
|
|
||||||
it[idPrenotazione] = prenotazionePastoDettaglio.idPrenotazione
|
|
||||||
it[idProdotto] = prenotazionePastoDettaglio.idProdotto
|
|
||||||
it[idStato] = prenotazionePastoDettaglio.idStato
|
|
||||||
}
|
|
||||||
|
|
||||||
prenotazionePastoDettaglio
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun listaDettagliByIdPrenotazione(idPrenotazione : Long): List<PrenotazioniPastiDettaglio> = suspendTransaction {
|
|
||||||
// Cerca la lista di dettagli della prenotazione (ovvero i prodotti)
|
|
||||||
PrenotazioniPastiDettaglioDao.find { PrenotazioniPastiDettaglioTable.idPrenotazione eq idPrenotazione }
|
|
||||||
.toList() // Restituisce la lista dei prodotti
|
|
||||||
.map { prenotazioniPastiDettaglioDaoToModel(it) } // Converte il DAO in un oggetto PrenotazioniPastiDettaglio
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,13 +0,0 @@
|
|||||||
package eu.maiora.model
|
|
||||||
|
|
||||||
import kotlinx.datetime.LocalDateTime
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
data class ViewPrenotazioniPasti(
|
|
||||||
val id: Long,
|
|
||||||
val idPrenotazione: Long,
|
|
||||||
val idStato: Long,
|
|
||||||
val stato: String,
|
|
||||||
val dataLimiteCancellazione: LocalDateTime
|
|
||||||
)
|
|
@ -1,5 +0,0 @@
|
|||||||
package eu.maiora.model
|
|
||||||
|
|
||||||
interface ViewPrenotazioniPastiRepository {
|
|
||||||
suspend fun prenotazioniPastiById(id : Long): ViewPrenotazioniPasti
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
package eu.maiora.model
|
|
||||||
|
|
||||||
import eu.maiora.db.*
|
|
||||||
import org.jetbrains.exposed.sql.SortOrder
|
|
||||||
import org.jetbrains.exposed.sql.insertAndGetId
|
|
||||||
|
|
||||||
class ViewPrenotazioniPastiRepositoryImpl : ViewPrenotazioniPastiRepository {
|
|
||||||
|
|
||||||
override suspend fun prenotazioniPastiById(id : Long): ViewPrenotazioniPasti = suspendTransaction {
|
|
||||||
// Cerca la prenotazione
|
|
||||||
ViewPrenotazioniPastiDao.find { ViewPrenotazioniPastiTable.idPrenotazione eq id }
|
|
||||||
.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
|
|
||||||
}
|
|
||||||
}
|
|
@ -23,6 +23,5 @@ fun Application.configureRouting() {
|
|||||||
prodottiPrenotabili(ProdottiPrenotabiliRepositoryImpl())
|
prodottiPrenotabili(ProdottiPrenotabiliRepositoryImpl())
|
||||||
residenze(ResidenzeRepositoryImpl())
|
residenze(ResidenzeRepositoryImpl())
|
||||||
prenotazioni(PrenotazioniPastiRepositoryImpl(), SlotOrariRepositoryImpl(), PrenotazioniPastiDettaglioRepositoryImpl())
|
prenotazioni(PrenotazioniPastiRepositoryImpl(), SlotOrariRepositoryImpl(), PrenotazioniPastiDettaglioRepositoryImpl())
|
||||||
annullaPrenotazioni(ViewPrenotazioniPastiRepositoryImpl(), PrenotazioniPastiDettaglioRepositoryImpl())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
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.response.*
|
|
||||||
import io.ktor.server.routing.*
|
|
||||||
import kotlinx.datetime.toJavaLocalDateTime
|
|
||||||
import java.time.LocalDateTime
|
|
||||||
|
|
||||||
|
|
||||||
fun Route.annullaPrenotazioni(
|
|
||||||
viewPrenotazioniPastiRepository: ViewPrenotazioniPastiRepositoryImpl,
|
|
||||||
prenotazioniPastiDettaglioRepository: PrenotazioniPastiDettaglioRepositoryImpl
|
|
||||||
) {
|
|
||||||
route("/api/annullaPrenotazioni") {
|
|
||||||
authenticate("auth-jwt") {
|
|
||||||
patch("{idPrenotazione}") {
|
|
||||||
//ottieni l'id della prenotazione dal percorso
|
|
||||||
val idPrenotazione = call.parameters["idPrenotazione"]
|
|
||||||
|
|
||||||
if (idPrenotazione == null) {
|
|
||||||
call.respondText("ID prenotazione non valido", status = HttpStatusCode.BadRequest)
|
|
||||||
return@patch
|
|
||||||
}
|
|
||||||
|
|
||||||
val prenotazione = viewPrenotazioniPastiRepository.prenotazioniPastiById(idPrenotazione.toLong())
|
|
||||||
val statoPrenotazione = prenotazione.stato
|
|
||||||
|
|
||||||
//prenotazione annullabile se lo stato non è SERVITA 2L
|
|
||||||
if (prenotazione.idStato == 2L) {
|
|
||||||
call.respond(
|
|
||||||
HttpStatusCode.BadRequest,
|
|
||||||
"Prenotazione non annullata. Stato corrente della prenotazione: $statoPrenotazione"
|
|
||||||
)
|
|
||||||
return@patch
|
|
||||||
}
|
|
||||||
|
|
||||||
//prenotazione annullabile se la data limite per la cancellazione non è stato superato
|
|
||||||
if (LocalDateTime.now().isAfter(prenotazione.dataLimiteCancellazione.toJavaLocalDateTime())) {
|
|
||||||
call.respond(
|
|
||||||
HttpStatusCode.BadRequest,
|
|
||||||
"Prenotazione non annullata: data limite cancellazione superata"
|
|
||||||
)
|
|
||||||
return@patch
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
val listaProdottiPrenotati =
|
|
||||||
prenotazioniPastiDettaglioRepository.listaDettagliByIdPrenotazione(idPrenotazione.toLong())
|
|
||||||
|
|
||||||
//aggiorna lo stato di ogni prodotto per annullare la prenotazione
|
|
||||||
listaProdottiPrenotati.forEach { el ->
|
|
||||||
val prodottoDaAggiornare = PrenotazioniPastiDettaglio(
|
|
||||||
el.id,
|
|
||||||
el.idPrenotazione,
|
|
||||||
el.idProdotto,
|
|
||||||
3L //ANNULLATA
|
|
||||||
)
|
|
||||||
prenotazioniPastiDettaglioRepository.update(prodottoDaAggiornare)
|
|
||||||
}
|
|
||||||
|
|
||||||
call.respond(HttpStatusCode.OK, "Prenotazione $idPrenotazione annullata")
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user