我正在开发 NestJS 应用程序并使用 TypeORM 进行数据库交互。我的应用程序中的每个实体都已经具有createdAt和updatedAt属性,它们由装饰器自动管理。我想向每个实体添加一个createdBy属性来跟踪谁创建或最后编辑了该实体。
我有一个警卫将用户的电子邮件附加到请求中,可以通过 request.user 访问。对于每个 CRUD 操作,我需要使用此用户电子邮件更新createdBy属性。
在 NestJS 中使用 TypeORM 是否有最佳实践或推荐方法来实现这一目标?如何确保所有实体的createdBy属性正确设置和更新?
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';
@Entity()
export class ExampleEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
@Column({ nullable: true })
createdBy: string;
}
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
const request = context.switchToHttp().getRequest();
request.user = { email: '[email protected]' };
return true;
}
}
为了实现您所描述的目的,首先,让我们定义一个基本实体:
@Entity()
export class BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
@Column({ nullable: true })
createdBy?: string;
}
然后,您可以从基础实体扩展所有相关的数据实体。 接下来,选择一个映射器将数据从 DTO 映射到您的实体。根据所选的映射器,定义 DTO 中的
user
属性到实体中的 createdBy
之间的映射。