Soft-Delete
Das Soft-Delete-Plugin ermöglicht es, Datenbankeinträge verborgen zu halten, ohne sie tatsächlich zu löschen. Wenn ein Eintrag gelöscht wird, wird er nur als gelöscht markiert und nicht wirklich entfernt. Alle Abfragen filtern diese deleted-Property automatisch, sodass es sich für den Benutzer so anfühlt, als wäre er tatsächlich gelöscht.
Um das Plugin zu verwenden, müssen Sie die SoftDelete Class instanziieren und sie für jede Entity aktivieren.
import { entity, PrimaryKey, AutoIncrement } from '@deepkit/type'; import { SoftDelete } from '@deepkit/orm'; @entity.name('user') class User { id: number & PrimaryKey & AutoIncrement = 0; created: Date = new Date; // Dieses Feld dient als Indikator dafür, ob der Datensatz soft gelöscht ist. // Wenn es gesetzt ist, ist der Datensatz soft gelöscht. deletedAt?: Date; // Dieses Feld ist optional und kann verwendet werden, um nachzuverfolgen, wer/was den Datensatz gelöscht hat. deletedBy?: string; constructor( public name: string ) { } } const softDelete = new SoftDelete(database); softDelete.enable(User); // oder wieder deaktivieren softDelete.disable(User);
Löschen
Um Datensätze soft zu löschen, verwenden Sie die üblichen Methoden: deleteOne
oder deleteMany
in einer Abfrage, oder verwenden Sie die Session, um sie zu löschen. Das Soft-Delete-Plugin erledigt den Rest automatisch im Hintergrund.
Wiederherstellen
Gelöschte Datensätze können mit einer "lifted query" über SoftDeleteQuery
wiederhergestellt werden. Sie bietet restoreOne
und restoreMany
.
import { SoftDeleteQuery } from '@deepkit/orm'; await database.query(User).lift(SoftDeleteQuery).filter({ id: 1 }).restoreOne(); await database.query(User).lift(SoftDeleteQuery).filter({ id: 1 }).restoreMany();
Die Session unterstützt ebenfalls das Wiederherstellen von Elementen.
import { SoftDeleteSession } from '@deepkit/orm'; const session = database.createSession(); const user1 = session.query(User).findOne(); session.from(SoftDeleteSession).restore(user1); await session.commit();
Hard Delete
Um Datensätze hart zu löschen, verwenden Sie eine "lifted query" über SoftDeleteQuery. Dies stellt im Wesentlichen das normale Verhalten wieder her, bei dem kein Soft-Delete-Plugin verwendet wird.
import { SoftDeleteQuery } from '@deepkit/orm'; // den Datensatz wirklich aus der Datenbank löschen await database.query(User).lift(SoftDeleteQuery).hardDeleteOne(); await database.query(User).lift(SoftDeleteQuery).hardDeleteMany(); // diese sind äquivalent zu den obigen await database.query(User).lift(SoftDeleteQuery).withSoftDeleted().deleteOne(); await database.query(User).lift(SoftDeleteQuery).withSoftDeleted().deleteMany();
Gelöschte abfragen.
Mit einer "lifted" Query über SoftDeleteQuery
können Sie auch gelöschte Datensätze einbeziehen.
import { SoftDeleteQuery } from '@deepkit/orm'; // alle finden, soft gelöscht und nicht gelöscht await database.query(User).lift(SoftDeleteQuery).withSoftDeleted().find(); // nur soft gelöschte finden await database.query(s).lift(SoftDeleteQuery).isSoftDeleted().count()
Gelöscht von
deletedBy
kann über Abfragen und Sessions gesetzt werden.
import { SoftDeleteSession } from '@deepkit/orm'; const session = database.createSession(); const user1 = session.query(User).findOne(); session.from(SoftDeleteSession).setDeletedBy('Peter'); session.remove(user1); await session.commit(); import { SoftDeleteQuery } from '@deepkit/orm'; database.query(User).lift(SoftDeleteQuery) .deletedBy('Peter') .deleteMany();