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. |