EventsSubscriber of TypeORM doesn't trigger in my NESTJS project
In my NestJs project I use TypeORM and i have an Entity X with :
@PrimaryGeneratedColumn({ type: "int" })
id: number
@Column({ type: "enum", enum: EnumName, nullable: false })
name: EnumName
@Column({ type: "enum", enum: EnumStatus, nullable: false })
status: EnumStatus
@Column({ type: "timestamp", nullable: true })
lastUpdateDateStatus: Date | null
@Column({ type: "enum", enum: EnumAnotherStatus, nullable: false })
anotherStatus: EnumAnotherStatus
@Column({ type: "timestamp", nullable: true })
lastUpdateDateAnotherStatus: Date | null
And a Subscribe for X :
@EventSubscriber()
export class XSubscriber implements EntitySubscriberInterface<XEntity> {
private readonly logger = new Logger(XSubscriber.name)
listenTo() {
return XEntity
}
beforeCreate(event: InsertEvent<XEntity>): Promise<void> {
const createdEntity = event.entity
this.logger.debug(`Subscribe XEntity create detected : : ${JSON.stringify(createdEntity)}`)
createdEntity.lastUpdateDateStatus = new Date()
createdEntity.lastUpdateDateAnotherStatus = new Date()
return Promise.resolve()
}
beforeUpdate(event: UpdateEvent<XEntity>): Promise<void> {
const updatedEntity = event.entity
const oldEntity = event.databaseEntity
this.logger.debug(`Subscribe XEntity update detected : : ${JSON.stringify(updatedEntity)}`)
if (updatedEntity !== undefined) {
if (updatedEntity.status !== oldEntity.status) {
updatedEntity.lastUpdateDateStatus = new Date()
}
if (updatedEntity.dataAvailable !== oldEntity.dataAvailable) {
updatedEntity.lastUpdateDateAnotherStatus = new Date()
}
}
return Promise.resolve()
}
}
And my app.module.ts has :
TypeOrmModule.forRoot({
...
autoLoadEntities: true,
subscribers: [XSubscriber],
}),
So in my code sometime i insert an entity sometime i update it if it exists. My entities are inserted and/or updated in my database but the eventSubscribe doesn't trigger so my columns date stay null.
For now on, I will handle by adding them in my model and handle them in my code, but if someone know why the eventsSubribers doesn't trigger, i would be happy to understand
All EntitySubscriberInterface methods are passed an event object that has queryRunner: QueryRunner and all database operations in the subscribed event listeners should be performed using the event object's queryRunner instance.
Also, I think you should use beforeInsert instead of beforeCreate