Dočasné blokování položek

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Martin Mates
Člen | 179
+
0
-

Zdravíčko. Stojím před problémem, který jsem nikdy před tím neřešil. Než se pustím do vlastní prasárny, rád bych si vyslechl názor zkušenějších.

Aplikaci si představte, jako rezervaci sedadel v kině. Uživatel klikne na sedačku a přejde k rezervačnímu formuláři. Ve chvíli, kdy na sedadlo klikne, je automaticky zablokované pro ostatní uživatele. Pokud si člověk sedadlo nakonec nerezervuje, toto zablokování po 5 minutách zmizí. Relativně jednoduchá záležitost. Jaké myslíte, že by pro to bylo nejlepší řešení?

Napadlo mě, zapisovat do databáze čas přístupu do políčka a pak testovat, jestli už to není 5 minut, co tam někdo vstoupil a rozhodnout jestli je zablokované či ne. Šlo by to udělat nějak přes session? Úplně do toho nevidím a pokud vím, tak session je vždy unikátní pro jednoho uživatele, nemůžou se jednotlivé session vidět navzájem. Že bych se třeba podíval, jestli neexistuje session, která by blokovala kliknuté políčko. Šlo by to?

Stačí, když me popostrčíte správným směrem. Předem díky!

Honza Marek
Člen | 1664
+
0
-

Obávám se, že přes sessions to nepůjde. To řešení s databází mi nepřijde jako špatný nápad. Do sessions můžeš uložit třeba informaci, že to políčko, které je blokované, je opravdu toho uživatele, takže si to pak bude moct rezervovat.

ic
Člen | 430
+
0
-

Tohle jsem řešil celkem nedávno… a dostal jsem se k té databázi… pokud se přenesu do toho kina tak to funguje tak že při kliknutí na sedačku už se automaticky vytvoří záznam v databázi, ale s prázdným ‚jméném diváka‘ a časem. Pokud dojde skutečně k rezervaci, tak se doplní jméno (update) a tím je zablokováno definitivně. Jinak při nějakém přehledu se vždy napřed provede odblokování promazíním databáze těch obsazených bez jména a s prošlým časem. Pokud ale tady vymyslíte lepšé řešení, tak bych o něj měl také eminentní zájem.