Events
Events sind eine Möglichkeit, in Deepkit ORM einzuhaken und ermöglichen es Ihnen, leistungsfähige Plugins zu schreiben. Es gibt zwei Kategorien von Events: Query-Events und Unit-of-Work-Events. Plugin-Autoren verwenden typischerweise beide, um beide Wege der Datenmanipulation zu unterstützen.
Events werden über Database.listen mit einem Event-Token registriert. Kurzlebige Event-Listener können auch
an Sessions registriert werden.
import { Query, Database } from '@deepkit/orm'; const database = new Database(...); database.listen(Query.onFetch, async (event) => { }); const session = database.createSession(); //wird nur für diese bestimmte Session ausgeführt session.eventDispatcher.listen(Query.onFetch, async (event) => { });
Query-Events
Query-Events werden ausgelöst, wenn eine Query über Database.query() oder Session.query() ausgeführt wird.
Jedes Event hat eigene zusätzliche Properties, wie z. B. den Entity-Typ, die Query selbst und die Datenbank-Session. Sie können die Query überschreiben, indem Sie eine neue Query auf Event.query setzen.
import { Query, Database } from '@deepkit/orm'; const database = new Database(...); const unsubscribe = database.listen(Query.onFetch, async event => { //überschreibt die Query des Benutzers, sodass etwas anderes ausgeführt wird. event.query = event.query.filterField('fieldName', 123); }); //um den Hook zu entfernen, unsubscribe aufrufen unsubscribe();
"Query" hat mehrere Event-Tokens:
| Query.onFetch | Wenn Objekte über find()/findOne()/etc abgerufen wurden |
| Query.onDeletePre | Bevor Objekte über deleteMany/deleteOne() gelöscht werden |
| Query.onDeletePost | Nachdem Objekte über deleteMany/deleteOne() gelöscht wurden |
| Query.onPatchPre | Bevor Objekte über patchMany/patchOne() gepatcht/aktualisiert werden |
| Query.onPatchPost | Nachdem Objekte über patchMany/patchOne() gepatcht/aktualisiert wurden |
Unit-of-Work-Events
Unit-of-Work-Events werden ausgelöst, wenn eine neue Session Änderungen übermittelt.
| DatabaseSession.onUpdatePre | Ausgelöst unmittelbar bevor das Objekt DatabaseSession eine Update-Operation an den Datenbank-Datensätzen startet. |
| DatabaseSession.onUpdatePost | Ausgelöst unmittelbar nachdem das Objekt DatabaseSession die Update-Operation erfolgreich abgeschlossen hat. |
| DatabaseSession.onInsertPre | Ausgelöst unmittelbar bevor das Objekt DatabaseSession das Einfügen neuer Datensätze in die Datenbank startet. |
| DatabaseSession.onInsertPost | Ausgelöst unmittelbar nachdem das Objekt DatabaseSession die neuen Datensätze erfolgreich eingefügt hat. |
| DatabaseSession.onDeletePre | Ausgelöst unmittelbar bevor das Objekt DatabaseSession eine Delete-Operation zum Entfernen von Datensätzen beginnt. |
| DatabaseSession.onDeletePost | Ausgelöst unmittelbar nachdem das Objekt DatabaseSession die Delete-Operation abgeschlossen hat. |
| DatabaseSession.onCommitPre | Ausgelöst unmittelbar bevor das Objekt DatabaseSession während der Session vorgenommene Änderungen in der Datenbank committet. |