GET recupero slot orari

This commit is contained in:
Francesco Di Sciascio 2025-04-14 11:47:55 +02:00
parent 1adb9c5f0e
commit 10d2fefa24
6 changed files with 138 additions and 4 deletions

View File

@ -89,9 +89,9 @@ object SlotPrenotabiliTable : IdTable<Long>("view_slot_prenotabili"){
val idPuntoCassa = long("id_punto_cassa")
val puntoCassa = varchar("punto_cassa", 255)
val idTurno = long("id_turno")
//val turno = varchar("turno", 255)
val idResidenza = long("id_residenza")
val residenza = varchar("residenza", 255)
val turno = varchar("turno", 255)
val idResidenza = long("id_residenza").nullable()
val residenza = varchar("residenza", 255).nullable()
}
class AccountsDAO(id: EntityID<Int>) :IntEntity(id) {
@ -168,7 +168,7 @@ class SlotPrenotabiliDao(id: EntityID<Long>) :LongEntity(id) {
var idPuntoCassa by SlotPrenotabiliTable.idPuntoCassa
var puntoCassa by SlotPrenotabiliTable.puntoCassa
var idTurno by SlotPrenotabiliTable.idTurno
//var turno by SlotPrenotabiliTable.turno
var turno by SlotPrenotabiliTable.turno
var idResidenza by SlotPrenotabiliTable.idResidenza
var residenza by SlotPrenotabiliTable.residenza
}
@ -237,6 +237,31 @@ fun puntiDistribuzioneDaoToModel(dao: SlotPrenotabiliDao) :PuntiDistribuzione{
)
}
fun slotOrariDaoToModel(dao: SlotPrenotabiliDao) :SlotOrari{
val formatterGiorno = DateTimeFormatter.ofPattern("ddMMyyyy")
val formatterConOra = DateTimeFormatter.ofPattern("ddMMyyyy HH:mm")
val formattedGiorno = dao.giorno.format(formatterGiorno)
val formattedDataInizio = dao.dataInizio.format(formatterConOra)
val formattedDataFine = dao.dataFine.format(formatterConOra)
return SlotOrari(
dao.id.value,
formattedGiorno,
formattedDataInizio,
formattedDataFine,
dao.idPuntoDistribuzione,
dao.puntoDistribuzione,
dao.idPuntoCassa,
dao.puntoCassa,
dao.idModalita,
dao.modalitaPrenotazione,
dao.idTurno,
dao.turno,
dao.idResidenza,
dao.residenza
)
}
suspend fun <T> suspendTransaction(block: Transaction.() -> T): T =
newSuspendedTransaction(Dispatchers.IO, statement = block)

View File

@ -0,0 +1,21 @@
package eu.maiora.model
import kotlinx.serialization.Serializable
@Serializable
data class SlotOrari(
val id: Long,
val giorno : String,
val dataInizio : String,
val dataFine : String,
val idPuntoDistribuzione : Long,
val puntoDistribuzione : String,
val idPuntoCassa : Long,
val puntoCassa : String,
val idModalita : Long,
val modalitaPrenotazione : String,
val idTurno : Long,
val turno : String,
val idResidenza : Long? = null,
val residenza : String? = null
)

View File

@ -0,0 +1,8 @@
package eu.maiora.model
interface SlotOrariRepository {
suspend fun slotOrariByGiornoIdTurnoIdPuntoDistIdMod(giorno : String,
idTurno : Long,
idPuntoDistribuzione : Long,
idModalita : Long): List<SlotOrari>?
}

View File

@ -0,0 +1,25 @@
package eu.maiora.model
import eu.maiora.db.*
import org.jetbrains.exposed.sql.and
import java.time.LocalDate
import java.time.format.DateTimeFormatter
class SlotOrariRepositoryImpl : SlotOrariRepository {
override suspend fun slotOrariByGiornoIdTurnoIdPuntoDistIdMod(giorno : String,
idTurno : Long,
idPuntoDistribuzione : Long,
idModalita : Long): List<SlotOrari> = suspendTransaction {
// Cerca la lista di slot orari
val formatter = DateTimeFormatter.ofPattern("ddMMyyyy")
val formattedDate = LocalDate.parse(giorno, formatter)
SlotPrenotabiliDao.find { (SlotPrenotabiliTable.giorno eq formattedDate) and
(SlotPrenotabiliTable.idTurno eq idTurno) and
(SlotPrenotabiliTable.idPuntoDistribuzione eq idPuntoDistribuzione) and
(SlotPrenotabiliTable.idModalita eq idModalita)}
.toList() // Restituisce la lista degli slot prenotabili da cui ricavare i punti distribuzione
.map { slotOrariDaoToModel(it) } // Converte il DAO in un oggetto SlotOrari
}
}

View File

@ -19,5 +19,6 @@ fun Application.configureRouting() {
valorePasti(ValorePastiRepositoryImpl())
ricariche(RicaricheRepositoryImpl())
puntiDistribuzione(PuntiDistribuzioneRepositoryImpl())
slotOrari(SlotOrariRepositoryImpl())
}
}

View File

@ -0,0 +1,54 @@
package eu.maiora.routes
import eu.maiora.model.SlotOrariRepositoryImpl
import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.auth.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
fun Route.slotOrari(slotOrariRepository: SlotOrariRepositoryImpl){
route("/api/slotOrari"){
authenticate("auth-jwt") {
get(){
// Ottieni l'id del turno, il giorno, l'id della modalita e l'id del punto di distribuzione dal percorso
val idTurno = call.parameters["idTurno"]
val giorno = call.parameters["giorno"]
val idPuntoDistribuzione = call.parameters["idPuntoDistribuzione"]
val idModalita = call.parameters["idModalita"]
if (idTurno.isNullOrEmpty()) {
call.respondText("ID turno non valido o non presente nei parametri", status = HttpStatusCode.BadRequest)
return@get
}
if (idPuntoDistribuzione.isNullOrEmpty()) {
call.respondText("ID punto distribuzione non valido o non presente nei parametri", status = HttpStatusCode.BadRequest)
return@get
}
if (idModalita.isNullOrEmpty()) {
call.respondText("ID modalita non valido o non presente nei parametri", status = HttpStatusCode.BadRequest)
return@get
}
if (giorno.isNullOrEmpty()) {
call.respondText("Giorno non valido o non presente nei parametri", status = HttpStatusCode.BadRequest)
return@get
}
// Cerca gli slot orari per giorno, turno, punto distribuzione e modalita
val listaSlotOrari = slotOrariRepository.slotOrariByGiornoIdTurnoIdPuntoDistIdMod(giorno,
idTurno.toLong(),
idPuntoDistribuzione.toLong(),
idModalita.toLong())
if (listaSlotOrari != null) {
call.respond(listaSlotOrari)
} else {
call.respondText("Slot orari non trovati", status = HttpStatusCode.NotFound)
}
}
}
}
}