DOMANDA Come gestire prenotazioni con fasce orarie nr posti limitati

Pubblicità

Guerriero con mazza

Utente Attivo
Messaggi
591
Reazioni
689
Punteggio
67
Ciao ragazzi, mi spiego un pò meglio.
Premessa: sono ancora nella fase di progettazione del progetto. Il progetto è amatoriale, nulla di professionale quindi, anche se ha dei requisiti specifici.

Quello che interessa allo scopo di questo thread è che si tratta di realizzare un sito web (con login e diversi tipi di utenti) in cui fare delle prenotazioni (esempio sale meeting / parcheggi / altro) scegliendo la fascia oraria desiderata, ovviamente in strutture con posti disponibili limitati e variabili nel tempo.
Proprio su questo ultimo aspetto io ci sto sbattendo la testa e non riesco a venirne con una soluzione: cioè non saprei come far variare la disponibilità dei posti in tempo reale.
Per farmi capire meglio, prendiamo l'esempio di un parcheggio cittadino con 50 posti totali disponibili: arriva Tizio all'ora X e vuole prenotare un posto per tot ore del giorno xx/yy; arriva poi Caio che vuole prenotare un posto con decorrenza tra due giorni, per cinque giorni di fila, nel mentre che altri che avevano già parcheggiato se ne vanno e quindi i posti da loro occupati ritornano liberi. In tutto questo io vorrei essere in grado di poter rendere prenotabili anche i posti non liberi immediatamente ma che tornerebbero liberi in tempo utile per quando Caio vuole un posto. E soprattutto vorrei evitare di mostrare come disponibile un posto che è libero ora (cioè nel momento in cui effettua la sua prenotazione) ma non è libero durante tutto il lasso di tempo da lui richiesto.

Ecco, questa cosa a livello di database io non riesco a concettualizzarla.
Non mi serve aiuto sulla soluzione a livello di codice, ma soltanto a livello di idee / concetti (comunque sul database).
Vi allego foto del mio ER, fin dove sono arrivato ora. Non contiene quanto illustrato sopra.
er-mazza.png
Apprezzo qualunque spunto / suggerimento su come procedere.
 
Sto guardando da cellulare quindi non vedo bene lo schema. Ma mi sembra un po’ incasinato. Domattina lo guardo meno e cerco di darti un parere più che ragionato
 
Comunque mi sento di dirti che le 3 entità principali sono

Parcheggio
Cliente
Prenotazioni

Un cliente può fare n prenotazioni
Il parcheggio può essere soggetto a n prenotazioni
La prenotazione è legata ad un solo cliente e un solo parcheggio.

Ti basterebbe solo visionare che se tizio prenota il parcheggio n1 il giorno x alle ore y, caio possa prenotarlo allo stesso giorno sono nella fascia oraria non occupata.
 
Grazie della risposta!
Quì il parcheggio io l'ho inteso un pò come il cinema (con un nome, un indirizzo, nr totale posti, ecc) e quindi ho previsto anche l'entità "posto" come parte del parcheggio. Ed è proprio il singolo posto che viene prenotato. Ho fatto questa scelta perché l'idea è che ci siano tanti diversi parcheggi sparsi per la città, ognuno con i propri attributi insomma.
Comunque al di là della diversa nomenclatura usata penso che anche tu intendessi la stessa cosa.
Le cardinalità dovrebbero essere tutte corrette invece.

Il focus della mia domanda sono le tre entità in basso a sinistra nell'er: parcheggio-posto-prenotazione

Il mio problema principale rimangono le prenotazioni per lunghi intervalli di tempo, perché vorrebbe dire andare a controllare, a livello di codice (js), per ogni ora inclusa in quell'intervallo (anche lungo giorni) se c'è/ci sarà qualche altra prenotazione attiva.

Questa è l'unica soluzione che mi è venuta in mente, ma a livello di codice appunto (quindi query), mentre nel db non riesco a rappresentarla, e in più penso sia troppo dispendioso (dal punto di vista dell'efficienza complessiva) fare ogni volta una query del genere, mi sbaglio?

Speravo ci fosse un'alternativa meno pesante: cioè se riuscissi a rappresentare a livello di DB in maniera un pò più specifica quanto sopra penso che le query verrebbero molto più semplici.
Il dilemma su cui mi sono sbattuto la testa è proprio questo. Però se pensi che possa andare bene così, io posso anche proseguire.

---

Avrei poi solo il problema, quando andrò a rendere visibile (graficamente, sul sito) il nr di posti disponibili in tempo reale, di scegliere se contrassegnare come "verdi" tutti i posti disponibili nel momento della visita, quindi durante l'ora in corso, oppure solo quelli disponibili per l'intero arco di prenotazione richiesta..... ma penso che opterò per la soluzione più facile (la prima).
Non so neanche se abbia senso la seconda che ho proposto (è solo un' alternativa che mi era venuta in mente e che valutavo).

Ho scritto un pò tanto, se c'è qualcosa in cui mi sono spiegato da cani fammelo pure sapere! xD
 
Ultima modifica:
L errore che fai è controllarlo a livello js. Per una roba del genere dovresti avere un backend che si interfaccia con il db e che per un determinato posto ti restituisca la lista dei giorni e delle ore in cui è occupato. Solo così potrai avere la disponibilità
 
[...] dovresti avere un backend che si interfaccia con il db e che per un determinato posto ti restituisca la lista dei giorni e delle ore in cui è occupato.
Devo "elaborare" questa cosa ma intanto ti ringrazio dello spunto.
Anche solo per il fatto di avermi tolto il dubbio "lo faccio con js o no?".
 
Aggiungo solo una cosa, nello schema ho visto la "carta di credito". Non ho visto se è stato accennato da Skills, ma toglila dal database.

Non si memorizzano le carte, molto meglio non farlo. Il backend è integrabile con servizi esterni che si salvano la carta. Decisamente molto meno rischioso in quanto non sei tu a salvare il dato (che andrebbe anche cifrato per altro, a database).

Per queste cose puoi usare per esempio Stripe e integrarlo. Offre poi uno snippet che va integrato lato frontend con l'SDK fornito da Stripe; lo snippet è un "box" in cui l'utente sceglie la carta e paga. Sembra tutto fatto sul sito stesso, in realtà lo snippet viene popolato dall'sdk stesso.
 
Aggiungo solo una cosa, nello schema ho visto la "carta di credito". Non ho visto se è stato accennato da Skills, ma toglila dal database.

Non si memorizzano le carte, molto meglio non farlo. Il backend è integrabile con servizi esterni che si salvano la carta. Decisamente molto meno rischioso in quanto non sei tu a salvare il dato (che andrebbe anche cifrato per altro, a database).
Grazie del suggerimento. Il sito è amatoriale.
Le carte sono lì solo come placeholder quasi, cioè giusto come funzionalità anche se fittizia.
Infatti i numeri delle carte saranno "123456", senza alcun tipo di controllo di veridicità o di sicurezza.
Per il momento mi interessava solo questo: iniziare ad avere una struttura del sito con alcune funzionalità basilari.
Il tutto lo sto facendo come allenamento. Con .js sono ancora agli inizi, quindi... :)
Piano piano aggiornerò (aggiungendo/rimuovendo) features.

Anche se per il momento la mia richiesta è "risolta", vi chiederei di non chiudere il thread perché a breve potrei volerci ritornare in caso di qualche altro dubbio pertinente.
--- i due messaggi sono stati uniti ---
Al massimo puoi farti delle api in express.js da usare con node
L'idea è quella, ma non ci sono ancora arrivato. :)
 
Pubblicità
Pubblicità
Indietro
Top