How to create Custom repositories in NestJS

In this link https://orkhan.gitbook.io/typeorm/docs/custom-repository i read that i must use something like this:


      export const UserRepository = dataSource.getRepository(User).extend({
        findByName(firstName: string, lastName: string) {
            return this.createQueryBuilder("user")
                .where("user.firstName = :firstName", { firstName })
                .andWhere("user.lastName = :lastName", { lastName })
                .getMany()
        },
    })

So i need do file user.repositories.ts , but i can`t understand how to get dataSource.getRepository()

import { DataSource} from 'typeorm';
import { User } from '../entities/user.entity';

export const UserRepository = dataSource.getRepository(User).extend({})

Upvotes: 0

Views: 2680

Answers (1)

Ali Shabani
Ali Shabani

Reputation: 478

just create a service and act it like a Repository.

import { Repository } from 'typeorm';

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';

@Injectable()
export class UserRepository extends Repository<User> {
  constructor(@InjectRepository(User) private userRepo: Repository<User>) {
    super(userRepo.target, userRepo.manager, userRepo.queryRunner)
  }

  findByUsername(username: string) {
    return this.userRepo.findOneBy({username})
  }
}

Don't forget to add this repo to your containing module. Also, you need to register the User entity in your containing module

// your module
@Module({
  imports: [TypeOrmModule.forFeature(User)],
  providers: [UserRepository]
})

Upvotes: 2

Related Questions