import { CreateDateColumn, EntitySubscriberInterface, EventSubscriber, InsertEvent, PrimaryGeneratedColumn, UpdateDateColumn, UpdateEvent, } from 'typeorm'; import { IBaseEntity } from './base.entity.interface'; export class BaseEntity implements IBaseEntity { @PrimaryGeneratedColumn() id: number; @CreateDateColumn({ type: 'datetime', }) createdAt: Date; @UpdateDateColumn({ type: 'datetime', }) updatedAt: Date; } @EventSubscriber() export class BaseEntitySubscriber implements EntitySubscriberInterface { /** * Indicates that this subscriber only listens to YourEntity events. */ public listenTo() { return BaseEntity; } /** * Called before entity insertion. */ public beforeInsert(event: InsertEvent) { const now = new Date(); now.setMilliseconds((now.getMilliseconds() + 1) % 1000); event.entity.createdAt = now; event.entity.updatedAt = now; } public beforeUpdate(event: UpdateEvent): void | Promise { const now = new Date(); now.setMilliseconds((now.getMilliseconds() + 1) % 1000); event.entity.updatedAt = now; } }