server/src/database/suscribers/entify.subscriber.ts

41 lines
1.0 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { Request } from 'express';
import { EntitySubscriberInterface, InsertEvent, DataSource, UpdateEvent, SoftRemoveEvent } from 'typeorm';
/**
* 实体订阅器
* @description 自动插入创建/更新用户的ID
*/
@Injectable()
export class EntitySubscripber implements EntitySubscriberInterface {
static request: Request;
constructor(private datasource: DataSource) {
this.datasource.subscribers.push(this);
}
static setRequest(req: Request) {
this.request = req;
}
beforeInsert(event: InsertEvent<any>): void | Promise<any> {
event.entity.createdBy = this.getUser();
}
beforeUpdate(event: UpdateEvent<any>): void | Promise<any> {
event.entity.updatedBy = this.getUser();
}
beforeSoftRemove(event: SoftRemoveEvent<any>): void | Promise<any> {
event.entity.deletedBy = this.getUser();
}
getUser() {
const user = EntitySubscripber.request?.user;
if (!user) {
return;
}
return `${user.nickname}(${user.id})`;
}
}