GET recupero punti distribuzione

This commit is contained in:
Francesco Di Sciascio 2025-04-11 16:28:18 +02:00
parent 3e0ae28708
commit 5c169dcfdd
6 changed files with 129 additions and 0 deletions

View File

@ -9,6 +9,7 @@ import org.jetbrains.exposed.dao.LongEntityClass
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.IdTable
import org.jetbrains.exposed.sql.Transaction
import org.jetbrains.exposed.sql.javatime.date
import org.jetbrains.exposed.sql.javatime.datetime
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
import java.time.format.DateTimeFormatter
@ -76,6 +77,23 @@ object RicaricheTable : IdTable<Long>("ricariche_app"){
val importo = double("importo")
}
object SlotPrenotabiliTable : IdTable<Long>("view_slot_prenotabili"){
override val id = long("id").entityId()
val giorno = date("giorno")
val dataInizio = datetime("data_inizio")
val dataFine = datetime("data_fine")
val idModalita = long("id_modalita")
val modalitaPrenotazione = varchar("modalita_prenotazione", 255)
val idPuntoDistribuzione = long("id_punto_distribuzione")
val puntoDistribuzione = varchar("punto_distribuzione", 255)
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)
}
class AccountsDAO(id: EntityID<Int>) :IntEntity(id) {
companion object : IntEntityClass<AccountsDAO>(AccountsTable)
@ -137,6 +155,23 @@ class RicaricheDao(id: EntityID<Long>) :LongEntity(id){
var importo by RicaricheTable.importo
}
class SlotPrenotabiliDao(id: EntityID<Long>) :LongEntity(id) {
companion object : LongEntityClass<SlotPrenotabiliDao>(SlotPrenotabiliTable)
var giorno by SlotPrenotabiliTable.giorno
var dataInizio by SlotPrenotabiliTable.dataInizio
var dataFine by SlotPrenotabiliTable.dataFine
var idModalita by SlotPrenotabiliTable.idModalita
var modalitaPrenotazione by SlotPrenotabiliTable.modalitaPrenotazione
var idPuntoDistribuzione by SlotPrenotabiliTable.idPuntoDistribuzione
var puntoDistribuzione by SlotPrenotabiliTable.puntoDistribuzione
var idPuntoCassa by SlotPrenotabiliTable.idPuntoCassa
var puntoCassa by SlotPrenotabiliTable.puntoCassa
var idTurno by SlotPrenotabiliTable.idTurno
//var turno by SlotPrenotabiliTable.turno
var idResidenza by SlotPrenotabiliTable.idResidenza
var residenza by SlotPrenotabiliTable.residenza
}
fun accountsDaoToModel(dao: AccountsDAO) = Accounts(
dao.id.value,
@ -190,6 +225,18 @@ fun composizioniDaoToModel(dao: ComposizioniDao) = Composizioni(
dao.quantita
)
fun puntiDistribuzioneDaoToModel(dao: SlotPrenotabiliDao) :PuntiDistribuzione{
return PuntiDistribuzione(
dao.id.value,
dao.idPuntoDistribuzione,
dao.puntoDistribuzione,
dao.idPuntoCassa,
dao.puntoCassa,
dao.idModalita,
dao.modalitaPrenotazione
)
}
suspend fun <T> suspendTransaction(block: Transaction.() -> T): T =
newSuspendedTransaction(Dispatchers.IO, statement = block)

View File

@ -0,0 +1,14 @@
package eu.maiora.model
import kotlinx.serialization.Serializable
@Serializable
data class PuntiDistribuzione(
val id: Long,
val idPuntoDistribuzione : Long,
val puntoDistribuzione : String,
val idPuntoCassa : Long,
val puntoCassa : String,
val idModalita : Long,
val modalitaPrenotazione : String
)

View File

@ -0,0 +1,5 @@
package eu.maiora.model
interface PuntiDistribuzioneRepository {
suspend fun puntiDistByGiornoIdTurno(giorno : String, idTurno : Long): List<PuntiDistribuzione>?
}

View File

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

View File

@ -18,5 +18,6 @@ fun Application.configureRouting() {
composizioni(ComposizioniRepositoryImpl())
valorePasti(ValorePastiRepositoryImpl())
ricariche(RicaricheRepositoryImpl())
puntiDistribuzione(PuntiDistribuzioneRepositoryImpl())
}
}

View File

@ -0,0 +1,41 @@
package eu.maiora.routes
import eu.maiora.model.PuntiDistribuzioneRepositoryImpl
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.puntiDistribuzione(puntiDistribuzioneRepository: PuntiDistribuzioneRepositoryImpl){
route("/api/puntiDistribuzione"){
authenticate("auth-jwt") {
get(){
// Ottieni l'id del turno e il giorno dal percorso
val idTurno = call.parameters["idTurno"]
val giorno = call.parameters["giorno"]
if (idTurno == null) {
call.respondText("ID turno non valido", status = HttpStatusCode.BadRequest)
return@get
}
if (giorno == null) {
call.respondText("Giorno non valido", status = HttpStatusCode.BadRequest)
return@get
}
// Cerca i punti distribuzione per giorno e turno
val listaPuntiDistribuzione = puntiDistribuzioneRepository.puntiDistByGiornoIdTurno(giorno, idTurno.toLong())
if (listaPuntiDistribuzione != null) {
call.respond(listaPuntiDistribuzione)
} else {
call.respondText("Punti distribuzione non trovati", status = HttpStatusCode.NotFound)
}
}
}
}
}