Compare commits

..

7 Commits

14 changed files with 430 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.EntityID
import org.jetbrains.exposed.dao.id.IdTable import org.jetbrains.exposed.dao.id.IdTable
import org.jetbrains.exposed.sql.Transaction 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.javatime.datetime
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
@ -76,6 +77,40 @@ object RicaricheTable : IdTable<Long>("ricariche_app"){
val importo = double("importo") 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").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)
@ -137,6 +172,41 @@ class RicaricheDao(id: EntityID<Long>) :LongEntity(id){
var importo by RicaricheTable.importo 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
}
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,
@ -190,6 +260,65 @@ fun composizioniDaoToModel(dao: ComposizioniDao) = Composizioni(
dao.quantita dao.quantita
) )
fun puntiDistribuzioneDaoToModel(dao: SlotPrenotabiliDao) :PuntiDistribuzione{
return PuntiDistribuzione(
dao.id.value,
dao.idPuntoDistribuzione,
dao.puntoDistribuzione,
dao.idPuntoCassa,
dao.puntoCassa,
dao.idModalita,
dao.modalitaPrenotazione
)
}
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
)
}
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

@ -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

@ -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

@ -18,5 +18,8 @@ fun Application.configureRouting() {
composizioni(ComposizioniRepositoryImpl()) composizioni(ComposizioniRepositoryImpl())
valorePasti(ValorePastiRepositoryImpl()) valorePasti(ValorePastiRepositoryImpl())
ricariche(RicaricheRepositoryImpl()) ricariche(RicaricheRepositoryImpl())
puntiDistribuzione(PuntiDistribuzioneRepositoryImpl())
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)
}
}
}
}
}

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.isNullOrEmpty()) {
call.respondText("ID turno 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 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)
}
}
}
}
}

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)
}
}
}
}
}