Illusion
Illusion

Reputation: 71

Trying to use in Nestjs Custom Repository typeorm

by example:

[https://stackoverflow.com/questions/72549668/how-to-do-custom-repository-using-typeorm-mongodb-in-nestjs][1]

Created custom repository в yandex-ndd-api-client.module:

import { DataSource, Repository } from 'typeorm';
import { Injectable } from '@nestjs/common';
// import {Team} from '@Domain/Team/Models/team.entity';
import { TestRepositoryTypeorm } from '../entity/testRepositoryTypeorm.entity';
 
@Injectable()
export class TestRepository extends Repository<TestRepositoryTypeorm> {
  constructor(private dataSource: DataSource) {
    super(TestRepositoryTypeorm, dataSource.createEntityManager());
  }
  async findTest(): Promise<any> { //TestRepositoryTypeorm | undefined
    const findTests = await this.dataSource
      .getRepository(TestRepositoryTypeorm)
      .createQueryBuilder('test')
      .getMany();
    return await findTests;
  }
}

Connected in the module::

 providers: [YandexDeliveryService, YandexNddApiClientService, ConfigService, SyncService, TestRepository],

Connected it to the service yandex-ndd-api-client.service:

import { TestRepository } from './repository/testRepositoryTypeorm.retository';
 
@Injectable()
export class YandexNddApiClientService {
  constructor(
    // private yandexDeliveryApiService: YandexDeliveryApiService,
    private httpService: HttpService,
    private dataSource: DataSource,
    private configService: ConfigService,
    @Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger,
    // @InjectRepository(TestRepository)
    private testRepository: TestRepository,
  ) {}

Called in service:

//testRepositoryTypeorm
  async testRepositoryTypeorm(): Promise<any> {
    try {
      console.log('testRepositoryTypeorm');
      // return 'testRepositoryTypeorm';
      return await this.testRepository.findTest();
    } catch (e) {
      console.log('ERROR testRepositoryTypeorm:', e);
    }
 
  }

As a result:

ERROR [ExceptionHandler] Nest can't resolve dependencies of the YandexNddApiClientService (HttpService, DataSource, ConfigService, winston, ?, SchedulerRegistry). Please make sure that the argument TestRepository at index [4] is available in the DetmirApiClientModule context.
 
Potential solutions:
- If TestRepository is a provider, is it part of the current DetmirApiClientModule?
- If TestRepository is exported from a separate @Module, is that module imported within DetmirApiClientModule?
  @Module({
    imports: [ /* the Module containing TestRepository */ ]
  })


  [1]: https://stackoverflow.com/questions/72549668/how-to-do-custom-repository-using-typeorm-mongodb-in-nestjs

DetmirApiClientModule.ts:

import { Module } from '@nestjs/common';
import { DetmirApiClientService } from './detmir-api-client.service';
import { DetmirApiClientController } from './detmir-api-client.controller';
import { SyncService } from 'src/sync.service';
import { YandexNddApiClientService } from 'src/yandex-ndd-api-client/yandex-ndd-api-client.service';
import { HttpModule, HttpService } from '@nestjs/axios';
import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
import { YandexNddApiClientModule } from 'src/yandex-ndd-api-client/yandex-ndd-api-client.module';

@Module({
  providers: [DetmirApiClientService, SyncService, YandexNddApiClientService],
  controllers: [DetmirApiClientController],
  imports: [HttpModule, YandexNddApiClientModule], //TestRepository
})
export class DetmirApiClientModule {}

Upvotes: 0

Views: 152

Answers (1)

Jay McDoniel
Jay McDoniel

Reputation: 70151

Most likely your YandexNddApiClientModule does not add the YandexNddApiClientService to the exports array. Add YandexNddApiClientService to the exports if it is not already there and remove YandexNddApiClientService from the providers array of DetmirApiClientModule. The error is being raised because you have YandexNddApiClientService declared in the providers of DetmirApiClientModule so Nest is trying to create the provider in the new module rather than re-use the module from its original context

Upvotes: 1

Related Questions