本规范定义了如何在通用CRUD模块中自动处理操作人ID字段,确保创建和更新操作时自动记录操作用户信息。
通用CRUD模块已支持自动注入操作人ID字段,包含以下功能:
import { createCrudRoutes } from '@/server/utils/generic-crud.routes';
import { YourEntity } from '@/server/modules/your-module/your-entity.entity';
import { YourEntitySchema, CreateYourEntityDto, UpdateYourEntityDto } from '@/server/modules/your-module/your-entity.entity';
import { authMiddleware } from '@/server/middleware/auth.middleware';
const yourEntityRoutes = createCrudRoutes({
entity: YourEntity,
createSchema: CreateYourEntityDto,
updateSchema: UpdateYourEntityDto,
getSchema: YourEntitySchema,
listSchema: YourEntitySchema,
middleware: [authMiddleware],
// 用户跟踪配置
userTracking: {
createdByField: 'createdBy', // 创建人ID字段名,默认 'createdBy'
updatedByField: 'updatedBy' // 更新人ID字段名,默认 'updatedBy'
}
});
实体必须包含与配置对应的字段:
@Entity('your_entities')
export class YourEntity {
@PrimaryGeneratedColumn({ unsigned: true })
id!: number;
// 业务字段...
@Column({ name: 'created_by', type: 'int', nullable: true, comment: '创建用户ID' })
createdBy?: number;
@Column({ name: 'updated_by', type: 'int', nullable: true, comment: '更新用户ID' })
updatedBy?: number;
@CreateDateColumn({ name: 'created_at' })
createdAt!: Date;
@UpdateDateColumn({ name: 'updated_at' })
updatedAt!: Date;
}
| 配置字段名 | 推荐数据库字段名 | 类型 | 说明 |
|---|---|---|---|
| createdByField | created_by | int/string | 创建人用户ID |
| updatedByField | updated_by | int/string | 更新人用户ID |
const routes = createCrudRoutes({
entity: MyEntity,
createSchema: CreateMyEntityDto,
updateSchema: UpdateMyEntityDto,
getSchema: MyEntitySchema,
listSchema: MyEntitySchema,
userTracking: {} // 使用默认字段名 createdBy 和 updatedBy
});
const routes = createCrudRoutes({
entity: MyEntity,
createSchema: CreateMyEntityDto,
updateSchema: UpdateMyEntityDto,
getSchema: MyEntitySchema,
listSchema: MyEntitySchema,
userTracking: {
createdByField: 'created_user_id',
updatedByField: 'modified_user_id'
}
});
const routes = createCrudRoutes({
entity: MyEntity,
createSchema: CreateMyEntityDto,
updateSchema: UpdateMyEntityDto,
getSchema: MyEntitySchema,
listSchema: MyEntitySchema,
userTracking: {
createdByField: 'created_by',
updatedByField: undefined // 不记录更新人
}
});
const routes = createCrudRoutes({
entity: Linkman,
createSchema: CreateLinkmanDto,
updateSchema: UpdateLinkmanDto,
getSchema: LinkmanSchema,
listSchema: LinkmanSchema,
userTracking: {
createdByField: 'createdUserId', // 匹配现有字段
updatedByField: 'updatedUserId' // 匹配现有字段
}
});
创建操作:
更新操作:
向后兼容:
authMiddleware才能获取用户信息A: 实体类字段类型设置为varchar即可,系统会自动处理字符串类型
A: 可以,通过createdByField和updatedByField分别配置
A: 不会,只有配置了userTracking的实体才会启用此功能
A: 在relations中配置用户关联关系即可: ```typescript const routes = createCrudRoutes({ entity: YourEntity, relations: ['createdByUser', 'updatedByUser'], // ...其他配置 });