fontcolor_theme
Deepkit ORM

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();
English中文 (Chinese)한국어 (Korean)日本語 (Japanese)Deutsch (German)