✔️ soft delete
전에는 soft delete를 위해서 is_active라는 컬럼을 추가해서 삭제 요청이 오면 실제 삭제 대신 is_active=false로 바꿔주는 작업을 했었다.
TypeORM에서는 soft delete를 지원한다.
레코드를 삭제하는 대신 @DeleteDateColumn()이 붙어있는 컬럼(날짜)을 업데이트한다.
이 컬럼이 포함되면 데이터를 읽을 때 이 컬럼이 null인지 체크하는 where절이 추가된다.
soft delete의 cascade도 가능하다.
✔️ 이력관리
데이터의 생성, 수정 이력을 관리하기 위한 컬럼으로 created, updated가 필요하다.
각각 데이터가 생성됐을때, 업데이트됐을 때의 시간을 timestamp로 기록해야 하는데 이것도 typeorm의 데코레이터를 사용하면 된다.
@CreateDateColumn()
@UpdateDateColumn()
✔️ 추상클래스
모든 테이블에 soft delete를 포함한 이력관리를 하려고 한다.
그리고 모든 테이블에 pk로 auto increse되는 id값을 주려고 한다.
그러면 엔티티를 정의할때마다 id, created, updated, deleted컬럼를 반복해서 넣어줘야 하는데 이럴때 추상클래스를 활용하면 된다.
import { CreateDateColumn, DeleteDateColumn, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
// @Entity 데코레이터가 없으면 테이블이 생성되지 않는다
export abstract class Common {
@PrimaryGeneratedColumn()
id: number;
@CreateDateColumn()
created: Date; // 생성날짜
@UpdateDateColumn()
updated: Date; // 마지막 업데이트 날짜
@DeleteDateColumn()
deleted: Date; // soft-delete된 날짜
}
import { Column, Entity } from "typeorm";
import { Common } from "./common.entity";
@Entity()
export class User extends Common { // Common 클래스를 상속해서 User에 필요한 다른 컬럼들을 추가한다.
@Column({ unique: true })
email: string;
@Column()
password: string;
@Column()
firstName: string;
@Column()
lastName: string;
@Column({ nullable: true }) // nullable의 기본값은 false이다.
profileImageUrl: string;
}
npm run start:dev 로 개발환경에서 서버를 켜고 show tables를 해보면(TypeOrmModuleOptions의 synchronize: true로 설정)
user테이블이 생성된 것을 볼 수 있다.
의도대로 잘 생성되었다!
*몇몇 컬럼들이 쓸데없이 255자까지 공간을 차지하고있으니까 @Column에 옵션을 준다.
ex) @Column({ type: "varchar", length: 50 })
참고
https://orkhan.gitbook.io/typeorm/docs/entities
https://typeorm.io/many-to-many-relations#soft-deleting-a-relationship-with-cascade
https://doug-martin.github.io/nestjs-query/docs/persistence/typeorm/soft-delete/
'TIL' 카테고리의 다른 글
[프로그래머스] 큰 수 만들기: 문자열보다 리스트 사용하기 (0) | 2024.10.03 |
---|---|
[프로그래머스/SQL] 가격이 제일 비싼 식품의 정보 출력하기: 정렬 vs 서브쿼리 (0) | 2024.07.26 |
NestJS | @nestjs/config 패키지를 활용한 환경변수 관리 -> db연결 (0) | 2022.11.21 |
NestJS | production/development환경 각각 다른 DB 사용하기(dotenv) (2) | 2022.11.19 |
NestJS | 패키지 버전 지정해서 세팅하기 (0) | 2022.11.19 |