Trung BìnhNestJS iconNestJS

Soft delete và audit timestamps với TypeORM — createdAt, updatedAt, deletedAt?

TypeORM cung cấp decorators tiện lợi cho timestamps và soft delete:

typescript
import {
  CreateDateColumn, UpdateDateColumn, DeleteDateColumn,
  PrimaryGeneratedColumn, Column, Entity,
} from 'typeorm';

@Entity()
export class BaseEntity {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @CreateDateColumn()  // Tự set khi INSERT
  createdAt: Date;

  @UpdateDateColumn()  // Tự update khi UPDATE
  updatedAt: Date;

  @DeleteDateColumn()  // Tự set khi softDelete(), NULL khi active
  deletedAt: Date | null;
}

Soft delete với TypeORM:

typescript
// Soft delete — set deletedAt
await this.repo.softDelete(id);

// Restore
await this.repo.restore(id);

// find() tự động filter deletedAt IS NULL
// Để include deleted:
await this.repo.find({ withDeleted: true });

Pitfall: @DeleteDateColumn chỉ hoạt động khi dùng softDelete()softRemove() — không phải delete() hay remove().

Xem toàn bộ NestJS cùng filter theo level & chủ đề con.

Mở danh sách NestJS