TypeORM Subscriber doesn't trigger - Nestjs - Mariadb

143 Views Asked by At

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

1

There are 1 best solutions below

0
Majva On

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