DOMANDA Come gestire prenotazioni con fasce orarie nr posti limitati

Guerriero con mazza

Utente Attivo
390
400
CPU
i7-3770K
Dissipatore
Thermalright Macho Rev.B HR-02
Scheda Madre
MSI Z77A-GD65
HDD
SSD: Samsung 870Evo 500GB || HDD: WD Caviar Blue 1TB + WD Caviar Black 2TB
RAM
Kingston HyperX Beast DDR3 2x8GB 1866MHz
GPU
MSI RX 6600 MECH 2X - 8GB DDR6
Audio
Sound Blaster Z
Monitor
AOC 24G2SPAE
PSU
EVGA SuperNOVA 650 GS 80+Gold
Case
Corsair 400R
OS
Windows 10 Pro
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.
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,447
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
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
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,447
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
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.
 

Guerriero con mazza

Utente Attivo
390
400
CPU
i7-3770K
Dissipatore
Thermalright Macho Rev.B HR-02
Scheda Madre
MSI Z77A-GD65
HDD
SSD: Samsung 870Evo 500GB || HDD: WD Caviar Blue 1TB + WD Caviar Black 2TB
RAM
Kingston HyperX Beast DDR3 2x8GB 1866MHz
GPU
MSI RX 6600 MECH 2X - 8GB DDR6
Audio
Sound Blaster Z
Monitor
AOC 24G2SPAE
PSU
EVGA SuperNOVA 650 GS 80+Gold
Case
Corsair 400R
OS
Windows 10 Pro
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:

Skills07

Head of Development
Staff Forum
Utente Èlite
35,447
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
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à
 

Guerriero con mazza

Utente Attivo
390
400
CPU
i7-3770K
Dissipatore
Thermalright Macho Rev.B HR-02
Scheda Madre
MSI Z77A-GD65
HDD
SSD: Samsung 870Evo 500GB || HDD: WD Caviar Blue 1TB + WD Caviar Black 2TB
RAM
Kingston HyperX Beast DDR3 2x8GB 1866MHz
GPU
MSI RX 6600 MECH 2X - 8GB DDR6
Audio
Sound Blaster Z
Monitor
AOC 24G2SPAE
PSU
EVGA SuperNOVA 650 GS 80+Gold
Case
Corsair 400R
OS
Windows 10 Pro
[...] 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?".
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,447
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
assolutamente no, anche perchè con js cosa intendi?
un backend node scritto in javascript invece che typescript?

Se vuoi gestire tutto in front è una mmmmm...
Al massimo puoi farti delle api in express.js da usare con node
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.
 

Guerriero con mazza

Utente Attivo
390
400
CPU
i7-3770K
Dissipatore
Thermalright Macho Rev.B HR-02
Scheda Madre
MSI Z77A-GD65
HDD
SSD: Samsung 870Evo 500GB || HDD: WD Caviar Blue 1TB + WD Caviar Black 2TB
RAM
Kingston HyperX Beast DDR3 2x8GB 1866MHz
GPU
MSI RX 6600 MECH 2X - 8GB DDR6
Audio
Sound Blaster Z
Monitor
AOC 24G2SPAE
PSU
EVGA SuperNOVA 650 GS 80+Gold
Case
Corsair 400R
OS
Windows 10 Pro
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.
Post unito automaticamente:

Al massimo puoi farti delle api in express.js da usare con node
L'idea è quella, ma non ci sono ancora arrivato. :)
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,447
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili