fontcolor_theme
Deepkit ORM

Soft-Delete

Soft-Delete plugin은 데이터베이스 레코드를 실제로 삭제하지 않고 숨긴 상태로 유지할 수 있게 합니다. 레코드가 삭제되면 실제로 삭제되는 것이 아니라 삭제된 것으로만 표시됩니다. 모든 query는 이 deleted 속성을 자동으로 필터링하므로, 사용자에게는 실제로 삭제된 것처럼 보입니다.

plugin을 사용하려면 SoftDelete class를 인스턴스화하고 각 entity에 대해 활성화해야 합니다.

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;

    // 이 필드는 레코드가 soft deleted 상태인지의 표시자로 사용됩니다.
    // 값이 설정되면 해당 레코드는 soft deleted 상태입니다.
    deletedAt?: Date;

    // 이 필드는 선택 사항이며, 누가/무엇이 레코드를 삭제했는지 추적하는 데 사용할 수 있습니다.
    deletedBy?: string;

    constructor(
        public name: string
    ) {
    }
}

const softDelete = new SoftDelete(database);
softDelete.enable(User);

// 또는 다시 비활성화
softDelete.disable(User);

삭제

레코드를 soft-delete하려면 일반적인 방법을 사용하세요: query에서 deleteOne 또는 deleteMany를 사용하거나 session을 사용해 삭제하세요. soft-delete plugin이 나머지는 백그라운드에서 자동으로 처리합니다.

복원

삭제된 레코드는 SoftDeleteQuery를 통해 'lifted' query로 복원할 수 있습니다. restoreOnerestoreMany가 있습니다.

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();

session 또한 요소 복원을 지원합니다.

import { SoftDeleteSession } from '@deepkit/orm';

const session = database.createSession();
const user1 = session.query(User).findOne();

session.from(SoftDeleteSession).restore(user1);
await session.commit();

하드 삭제

레코드를 하드 삭제하려면 SoftDeleteQuery를 통해 lifted query를 사용하세요. 이는 본질적으로 soft-delete plugin이 사용되지 않는 일반 동작을 복원합니다.

import { SoftDeleteQuery } from '@deepkit/orm';

// 데이터베이스에서 레코드를 실제로 삭제
await database.query(User).lift(SoftDeleteQuery).hardDeleteOne();
await database.query(User).lift(SoftDeleteQuery).hardDeleteMany();

// 위와 동일합니다
await database.query(User).lift(SoftDeleteQuery).withSoftDeleted().deleteOne();
await database.query(User).lift(SoftDeleteQuery).withSoftDeleted().deleteMany();

삭제된 항목 조회.

SoftDeleteQuery를 통해 "lifted" query를 사용하면 삭제된 레코드도 포함할 수 있습니다.

import { SoftDeleteQuery } from '@deepkit/orm';

// soft deleted와 삭제되지 않은 항목을 포함하여 모두 조회
await database.query(User).lift(SoftDeleteQuery).withSoftDeleted().find();

// soft deleted만 조회
await database.query(s).lift(SoftDeleteQuery).isSoftDeleted().count()

Deleted by

deletedBy는 query와 session을 통해 설정할 수 있습니다.

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)