Wecode -기업협업 인턴 (부트캠프)/기업협업 독학, 공부

기업협업 첫 번째 프로젝트: typeorm에 있는 Soft -delete, restore

JBS 12 2023. 11. 1. 22:00

Query Builder 에서 soft delete, restore (삭제 해제) 를 지원한다 

 

Delete using Query Builder - typeorm

Alternatively, You can recover the soft deleted rows by using the restore() method:

orkhan.gitbook.io

// delete 쿼리 

await myDataSource
    .createQueryBuilder('users')
    .delete()
    .from(User)
    .where("id = :id", { id: 1 })
    .execute()
//soft delte

await dataSource.getRepository(Entity).createQueryBuilder().softDelete()

await myDataSource
  .createQueryBuilder('users')
  .softDelete()
  .where("id = :id", { id: 1 })
  .execute();
//restore() method

await dataSource.getRepository(Entity).createQueryBuilder().restore()

await myDataSource
  .createQueryBuilder('users')
  .restore()
  .where("id = :id", { id: 1 })
  .execute();

 

 

TypeORM에서는 소프트 삭제(soft delete)를 지원

레코드를 완전히 삭제하는 대신 레코드를 표시로 표시하여 삭제된 것처럼 표시하는 메커니즘을 의미합니다. 이를 통해

데이터 보존 및 복구가 가능하며, 데이터의 손실을 방지할 수

 

 

 

TypeORM에서 소프트 삭제를 구현하는 방법



1. 엔터티 설정:

먼저, 소프트 삭제를 구현하려는 TypeORM 엔터티(Entity) 클래스에서 @Entity 데코레이터 옵션 중 하나인 softDelete 를 true로 설정합니다.
 
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity({ softDelete: true }) // 소프트 삭제 활성화
export class Item {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;
}

 

 

 

Delete using Query Builder - typeorm

Alternatively, You can recover the soft deleted rows by using the restore() method:

orkhan.gitbook.io

 

2. 엔터티 메서드 설정:

TypeORM의 엔터티 클래스에는 소프트 삭제와 관련된 메서드를 사용할 수 있습니다. 주요 메서드로는 softRemove()와 restore()가 있습니다.

*softRemove(): 레코드를 소프트 삭제 상태로 표시합니다.

const itemToRemove = await itemRepository.findOne(id);
await itemRepository.softRemove(itemToRemove);

 

 

*restore(): 소프트 삭제된 레코드를 복원합니다.

const itemToRestore = await itemRepository.findOne(id, { withDeleted: true });
await itemRepository.restore(itemToRestore);

 

softRemove() 및 restore() 메서드를 사용하여 레코드를 소프트 삭제하고 복원할 수 있습니다.

 

3. 삭제된 항목 검색:

삭제된 항목을 검색하려면 withDeleted 옵션을 사용합니다.

const deletedItems = await itemRepository.find({ withDeleted: true });
이렇게 하면 소프트 삭제된 항목을 검색할 수 있습니다.

4. 설정 옵션 사용:

TypeORM의 Entity 데코레이터에서 softDelete 옵션을 구성하려면 다양한 소프트 삭제 설정을 적용할 수 있습니다. 예를 들어, column 옵션을 사용하여 소프트 삭제 상태를 나타내는 컬럼의 이름을 지정할 수 있습니다.

 
@Entity({ softDelete: true, softDeleteColumn: 'deletedAt' }) // deletedAt 컬럼을 사용
export class Item {
  // ...
}
소프트 삭제를 구현하면 레코드를 완전히 삭제하지 않고 데이터 보존과 복구를 가능하게 할 수 있습니다. 이것은 데이터베이스에서 소프트 삭제가 필요한 상황에 유용합니다.