GET prodotti prenotabili

This commit is contained in:
Francesco Di Sciascio 2025-04-14 17:03:57 +02:00
parent 3995d993e5
commit 213d7fdd74
6 changed files with 167 additions and 0 deletions

View File

@ -94,6 +94,23 @@ object SlotPrenotabiliTable : IdTable<Long>("view_slot_prenotabili"){
val residenza = varchar("residenza", 255).nullable() val residenza = varchar("residenza", 255).nullable()
} }
object ProdottiPrenotabiliTable : IdTable<Long>("view_prodotti_prenotabili"){
override val id = long("id").entityId()
val giorno = date("giorno")
val idPuntoDistribuzione = long("id_punto_distribuzione")
val puntoDistribuzione = varchar("punto_distribuzione", 255)
val idTurno = long("id_turno")
val turno = varchar("turno", 255)
val idProdotto = long("id_prodotto")
val prodotto = varchar("prodotto", 255)
val codiceProdotto = varchar("codice_prodotto", 255)
val descrizioneProdotto = varchar("descrizione_prodotto", 255)
val idCategoria = long("id_categoria")
val categoria = varchar("categoria", 255)
val idModalita = long("id_modalita")
val modalitaPrenotazione = varchar("modalita_prenotazione", 255)
}
class AccountsDAO(id: EntityID<Int>) :IntEntity(id) { class AccountsDAO(id: EntityID<Int>) :IntEntity(id) {
companion object : IntEntityClass<AccountsDAO>(AccountsTable) companion object : IntEntityClass<AccountsDAO>(AccountsTable)
@ -173,6 +190,24 @@ class SlotPrenotabiliDao(id: EntityID<Long>) :LongEntity(id) {
var residenza by SlotPrenotabiliTable.residenza var residenza by SlotPrenotabiliTable.residenza
} }
class ProdottiPrenotabiliDao(id: EntityID<Long>) :LongEntity(id) {
companion object : LongEntityClass<ProdottiPrenotabiliDao>(ProdottiPrenotabiliTable)
var giorno by ProdottiPrenotabiliTable.giorno
var idPuntoDistribuzione by ProdottiPrenotabiliTable.idPuntoDistribuzione
var puntoDistribuzione by ProdottiPrenotabiliTable.puntoDistribuzione
var idTurno by ProdottiPrenotabiliTable.idTurno
var turno by ProdottiPrenotabiliTable.turno
var idProdotto by ProdottiPrenotabiliTable.idProdotto
var prodotto by ProdottiPrenotabiliTable.prodotto
var codiceProdotto by ProdottiPrenotabiliTable.codiceProdotto
var descrizioneProdotto by ProdottiPrenotabiliTable.descrizioneProdotto
var idCategoria by ProdottiPrenotabiliTable.idCategoria
var categoria by ProdottiPrenotabiliTable.categoria
var idModalita by ProdottiPrenotabiliTable.idModalita
var modalitaPrenotazione by ProdottiPrenotabiliTable.modalitaPrenotazione
}
fun accountsDaoToModel(dao: AccountsDAO) = Accounts( fun accountsDaoToModel(dao: AccountsDAO) = Accounts(
dao.id.value, dao.id.value,
dao.username, dao.username,
@ -262,6 +297,28 @@ fun slotOrariDaoToModel(dao: SlotPrenotabiliDao) :SlotOrari{
) )
} }
fun prodottiPrenotabiliDaoToModel(dao: ProdottiPrenotabiliDao) :ProdottiPrenotabili{
val formatterGiorno = DateTimeFormatter.ofPattern("ddMMyyyy")
val formattedGiorno = dao.giorno.format(formatterGiorno)
return ProdottiPrenotabili(
dao.id.value,
formattedGiorno,
dao.idPuntoDistribuzione,
dao.puntoDistribuzione,
dao.idTurno,
dao.turno,
dao.idProdotto,
dao.prodotto,
dao.codiceProdotto,
dao.descrizioneProdotto,
dao.idCategoria,
dao.categoria,
dao.idModalita,
dao.modalitaPrenotazione
)
}
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)

View File

@ -0,0 +1,21 @@
package eu.maiora.model
import kotlinx.serialization.Serializable
@Serializable
data class ProdottiPrenotabili(
val id: Long,
val giorno : String,
val idPuntoDistribuzione : Long,
val puntoDistribuzione : String,
val idTurno : Long,
val turno : String,
val idProdotto : Long,
val prodotto : String,
val codiceProdotto : String,
val descrizioneProdotto : String,
val idCategoria : Long,
val categoria : String,
val idModalita : Long,
val modalitaPrenotazione : String
)

View File

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

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 ProdottiPrenotabiliRepositoryImpl : ProdottiPrenotabiliRepository {
override suspend fun prodottiPrenotabiliByGiornoIdTurnoIdPuntoDistIdMod(giorno : String,
idTurno : Long,
idPuntoDistribuzione : Long,
idModalita : Long): List<ProdottiPrenotabili> = suspendTransaction {
// Cerca la lista di prodotti prenotabili
val formatter = DateTimeFormatter.ofPattern("ddMMyyyy")
val formattedDate = LocalDate.parse(giorno, formatter)
ProdottiPrenotabiliDao.find { (ProdottiPrenotabiliTable.giorno eq formattedDate) and
(ProdottiPrenotabiliTable.idTurno eq idTurno) and
(ProdottiPrenotabiliTable.idPuntoDistribuzione eq idPuntoDistribuzione) and
(ProdottiPrenotabiliTable.idModalita eq idModalita)}
.toList() // Restituisce la lista dei prodotti prenotabili
.map { prodottiPrenotabiliDaoToModel(it) } // Converte il DAO in un oggetto ProdottiPrenotabili
}
}

View File

@ -20,5 +20,6 @@ fun Application.configureRouting() {
ricariche(RicaricheRepositoryImpl()) ricariche(RicaricheRepositoryImpl())
puntiDistribuzione(PuntiDistribuzioneRepositoryImpl()) puntiDistribuzione(PuntiDistribuzioneRepositoryImpl())
slotOrari(SlotOrariRepositoryImpl()) slotOrari(SlotOrariRepositoryImpl())
prodottiPrenotabili(ProdottiPrenotabiliRepositoryImpl())
} }
} }

View File

@ -0,0 +1,55 @@
package eu.maiora.routes
import eu.maiora.model.ProdottiPrenotabiliRepositoryImpl
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.prodottiPrenotabili(prodottiPrenotabiliRepository: ProdottiPrenotabiliRepositoryImpl){
route("/api/prodottiPrenotabili"){
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 i prodotti prenotabili per giorno, turno, punto distribuzione e modalita
val listaProdottiPrenotabili = prodottiPrenotabiliRepository.prodottiPrenotabiliByGiornoIdTurnoIdPuntoDistIdMod(giorno,
idTurno.toLong(),
idPuntoDistribuzione.toLong(),
idModalita.toLong())
if (listaProdottiPrenotabili != null) {
call.respond(listaProdottiPrenotabili)
} else {
call.respondText("Prodotti prenotabili non trovati", status = HttpStatusCode.NotFound)
}
}
}
}
}