Come rendere un oggetto non disponibile per altri utenti mentre un utente lo sta visualizzando su un sito Web php?

3

Sto sviluppando un sito web per una scuola guida che fungerà anche da app di gestione.

Un requisito è che a un certo punto lo studente possa scegliere un giorno in cui la lezione di guida possa svolgersi da un elenco di possibili pianificazioni.

Dato che ci sono molti utenti che potrebbero guardare lo stesso programma, voglio essere in grado di rendere quel giorno e quell'ora non disponibili agli altri utenti non appena qualcuno sta guardando per quel particolare momento

Dovrebbe funzionare proprio come i siti web di viaggio. Quando selezioni un volo, quel volo diventa bloccato ad altri utenti in modo che non possano acquistarlo su di te e sarà disponibile dopo 5 minuti se non lo acquisti.

Capisco il concetto ma non capisco come viene elaborata questa informazione e quali azioni dovrei fare per realizzarla.

Devo capire se funziona con qualche trigger nel database, che quando attivato imposterà l'elemento in uno stato "non disponibile" e quando il timer si ferma lo reimposta allo stato precedente, o se è qualcosa che dovrebbe essere fatto nella stessa applicazione.

    
posta Mr.Toxy 14.11.2016 - 13:53
fonte

1 risposta

4

Non è necessario utilizzare alcun timer (che richiederebbe un processo in background, che aumenterebbe la complessità del sistema).

Non appena l'utente esegue un'azione che deve mettere da parte l'elemento (un ticket, una prenotazione, una fascia oraria, qualunque cosa), si assegna a questo elemento una coppia contenente l'utente e l'ora corrente.

Quando altri utenti accedono allo stesso elemento, l'applicazione calcolerà la differenza tra il tempo di "ritiro" memorizzato per questo elemento e lo confronterà con l'ora effettiva. Se la differenza è, ad esempio, superiore a 5 minuti, è possibile visualizzare l'elemento. In caso contrario, l'elemento è nascosto / bloccato.

UX-saggio, sta a te decidere se è necessario mostrare tutte le fasce orarie e visualizzare quelle già prenotate in modo diverso, per mostrare che non sono disponibili, o se mostrerai solo gli slot disponibili.

Nota che come evidenziato da amon , dovrai anche ricordare, per ogni utente, l'elemento che ha messo da parte, in ordine per evitare situazioni in cui l'utente blocca involontariamente più slot per un periodo di tempo.

Se si utilizza un database relazionale, significa:

  • Aggiunta di una chiave esterna TimeSlot.BookedBy che fa riferimento alla tabella User .
  • Impostazione di un indice univoco su TimeSlot.BookedBy : non vogliamo che un utente sia in grado di prenotare più fasce orarie.
  • Aggiunta della colonna TimeSlot.BookTime: datetime che memorizzerà l'ora in cui è avvenuta la prenotazione.
risposta data 14.11.2016 - 14:10
fonte

Leggi altre domande sui tag