Operace zpět k provedené AKCI

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

Zdravíčko,

na úvod se chci omluvit za duplicitní post, ale zdá se že na AJ forum moc lidí nechodí…
Každopádně, zajímá mě, jak a jestli vůbec řešíte Undo operaci?
Když se nad tím zamyslím, tak informace, které bych měl ukládat jsou datetime, akce (modul:presenter:akce), hodnota před změnou (ideálně binární tvar (base64)), hodnota po změně (taky binární tvar(base64)).
Následně tyto údaje potřebuji někde uložit po určitou dobu (relační db, memcache, sessions?), další otázka je jak bych mohl zajistit automatické provádění uložení historie po odeslání formuláře, či obsluze signálu (callback/event?).
Nebo tyhle změny řešit na úrovni db – logovací tabulka(y) a trigerry nad tabulkami?
Máte nějaké zkušenosti s undo o které se můžete podělit?
Díky!

PS: omlouvám se za caps-lock na slovo „akci“ – ujelo mi to a nevšiml jsem si toho.

Editoval Mesiah (23. 1. 2014 16:12)

honos
Člen | 109
+
0
-

Podle me je up jedno jestli to provedes pomoci trigeru nepo nejakyho eventu/udalosti ale.
Pri pouziti triggeru mas pouze omezene mnozstvi dat, vlastne jen ty co predas v SQL dotazu kdyz to pri pouziti udalosti mas vetsi moznosti. asi jako nejvhodnejsi moznost se ale podle me jevi SESSIONS. Navic pokud jsou data ukladana jenom docasne, napriklad nez uzivatel provede refresh nebo prejde na jinou stranku tak ta data asi odstranis, ale jak potom bys resil otazku kdy uzivatel ma otevrenych vice panelu na stejnou domenu a na jedne strance provede nejakou akci a v druhym panelu provede refresh nebo prejde na jiny odkaz v ramci domeny. Hrozi riziko ze provedene upravy v prvnim panelu uz nepujde vratit zpet. Dalsi otazkou je proc si chces ukladat data zmenena data spolecne s puvodnimi daty kdyz zmenena data jiz budes mit v databazi? Ukladat stara data spolecne s #ID a vygenerovanym #HASH do SESSIONS a pomoci tohoto #HASHe s nimi nasledne manipulovat. Nebo jeste lepe misto #HASHe pouzivat primo #ID.

Jan Endel
Člen | 1016
+
0
-

To co hledáš jsou pravděpodobně tzv. Auditorské tabulky

honos
Člen | 109
+
0
-

Jan Endel napsal(a):

To co hledáš jsou pravděpodobně tzv. Auditorské tabulky

V tomto pripade se jedna o trvale nebo o dlouhodobejsi uchovani zmen, jaka si historie.. Vtomto pripade ano, pouzit databazi nebo souborovy system.

@mesiah tak me napada ze pro pripad ze uzivatel otevira domenu z vice panelu je lepsi pouzit ten #HASH vygenerovany v php za pouziti treba url + timestamp a nebo podobne kombinace a nasledneho zacleneni tohoto #HASHe do dotazu na server pri uprave. nevim jestli mas na mysli upravu nejakyho artiklu nebo treba odstraneni prispevku pomoci AJAXu ala facebook..

Mesiah
Člen | 240
+
0
-

Takový klasický případ je v administraci eshou – uživatel správce změní obrázek produktu a vypíšu mu hlášku ve stylu „Úpravy byly úspěšně provedeny, pokud Vám změny nevyhovují, můžete je vrátit zpět .“, ten stejný princip bych použíl na editaci popisku, ceny, atd.
Osobně jsem nabyl dojmu, že pro tyto účely budou nejlepší auditorské tabulky (btw, na tohle téma se hezky rozpovídal Bohužel-zapomněl-jsem-jak-se-jmenuje na PixDevDay 2013 z csfd) s tím, že u každé entity budu uchovávat ID auditorského záznamu – blbý na tom je to, že budu muset hodnoty zapisovat v before triggeru a pokud nastane problém, tak se mi v podstatě zbytečně zapíší hodnoty.
Tím se mi vyřeší problém s taby a pokud uživatel bude chtít vrátit změny, budu vědět jakou akci provést a jaké hodnoty vrátit.
Pokud Vás ale napadnou případné slabiny tohoto řešení, tak budu rád, když mě upozorníte…

Editoval Mesiah (23. 1. 2014 21:22)

honos
Člen | 109
+
0
-

No, mě ještě napadá že by jsi mohl použit auditorské tabulky ale nějakým způsobem, třeba sloupec returned, také použit indikátor že změna byla provedená (vracená) aby se po reloadu nebo vraceni změn se již nezobrazovala možnost vrátit zpět.
Jednak budeš mít co chceš a jednak můžeš historii změn ukládat po delší dobu.. :-| ?

Editoval honos (27. 1. 2014 10:38)

Mesiah
Člen | 240
+
0
-

S tím cyklickým vracením změn máš pravdu – je to unfriendly.
Hmm, trochu se to začíná komplikovat, u každé entity budu muset ukládat ID-Auditu, Přiznak-vrácení-změny – to se mi moc nelíbí; naštěstí by to šlo řešit pomocí Polymorphic assocations

honos
Člen | 109
+
0
-

Tak ted si pripadam jako xxblbxx o polymorfismu neco vim, vim take ze php polymorfni neni ale co nevim: co je polymorphic associations .. anglicky moc neovladam tak jsem se na netu nic moc nedozvedel :( :)