如何使用NestJS和TypeORM在每个实体中自动添加和更新createBy属性

问题描述 投票:0回答:1

我正在开发 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;
  }
}
node.js nestjs entity decorator typeorm
1个回答
0
投票

为了实现您所描述的目的,首先,让我们定义一个基本实体:

@Entity()
export class BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;

  @Column({ nullable: true })
  createdBy?: string;
}

然后,您可以从基础实体扩展所有相关的数据实体。 接下来,选择一个映射器将数据从 DTO 映射到您的实体。根据所选的映射器,定义 DTO 中的

user
属性到实体中的
createdBy
之间的映射。

© www.soinside.com 2019 - 2024. All rights reserved.