Не могу разрешить зависимость в Nest.js

Работаю над бекэнд-приложением на Nest.js. Данные хранятся в БД PostgreeSQL, общаюсь с БД через SRM sequelize. Все работало хорошо, пока не появилась необходимость использовать транзакции при запросах к БД и обрабатывать транзакцию в интерцепторе. Инициализация sequelize происходит в отдельном модуле database.module.ts:

import { Module } from '@nestjs/common'
import { Sequelize } from 'sequelize-typescript'

export const databaseProviders = [
  {
    provide: 'SEQUELIZE',
    useFactory: async () => {
      const sequelize = new Sequelize({
        dialect: 'postgres',
        host: process.env.POSTGRES_HOST,
        port: Number(process.env.POSTGRES_PORT),
        username: process.env.POSTGRES_USER,
        password: process.env.POSTGRES_PASSWORD,
        database: process.env.POSTGRES_DB
      })
      sequelize.addModels([
        //...различные модели      
      ])
      return sequelize
    }
  }
]

@Module({
  providers: [...databaseProviders],
  exports: [...databaseProviders, 'SEQUELIZE']
})
export class DatabaseModule {}

Вот модуль, в котором происходят транзакции:

import { Module } from '@nestjs/common'
import { EventsService } from './events.service'
import { EventsController } from './events.controller'
import { eventsProviders } from './providers/events.providers'
import { Sequelize } from 'sequelize-typescript'

@Module({
  controllers: [EventsController],
  providers: [
    EventsService,
    ...eventsProviders,
    {
      provide: 'SEQUELIZE',
      useValue: Sequelize
    }
  ],
  imports: [DatabaseModule]
})
export class EventsModule {}

И вот сам интерцептор:

import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'
import { catchError, tap, throwError } from 'rxjs'
import { Transaction, Sequelize } from 'sequelize'
import { InjectConnection } from '@nestjs/sequelize'
import { providers } from 'src/constants'

@Injectable()
export class TransactionInterceptor implements NestInterceptor {
  constructor(@InjectConnection() private sequelize: Sequelize) {}
  async intercept(context: ExecutionContext, next: CallHandler) {
    const req = context.switchToHttp().getRequest()
    const transaction: Transaction = await this.sequelize.transaction()
    req.t = transaction

    return next.handle().pipe(
      tap(() => {
        transaction.commit()
      }),
      catchError(err => {
        transaction.rollback()
        return throwError(() => new Error(err))
      })
    )
  }
}

При компиляции кода возникает ошибка:

Nest can't resolve dependencies of the TransactionInterceptor (?). Please make sure that the argument Sequelize at index [0] is available in the EventsModule context.

Potential solutions:
- Is EventsModule a valid NestJS module?
- If Sequelize is a provider, is it part of the current EventsModule?
- If Sequelize is exported from a separate @Module, is that module imported within EventsModule?
  @Module({
    imports: [ /* the Module containing Sequelize */ ]
  })

Попробовал сделать внедрение sequelize в интерцептор другим способом:

constructor(@Inject('SEQUELIZE') private sequelize: Sequelize) {}

В этом случае ошибок компиляции нет, но при запросе, ведущем к работе интерсептора, возникает ошибка:

this.sequelize.transaction is not a function

Прошу помощи у братьев и сестер - программистов, а то у меня уже идеи по внедрению инстанса sequelize в интерцептор закончились.


Ответы (0 шт):