개요
Repository는 데이터베이스와의 상호작용을 추상화하여, 데이터베이스 쿼리를 수행하고 엔티티를 관리하는 역할을 하는 클래스이다. 데이터 베이스의 중앙 통제실이라고 생각하면 된다.
cats.repository.ts
파일 생성
cats 폴더를 만들어서 cats.repository.ts 생성한다.
repository 정의
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Cat } from './cats.schema';
import { Model } from 'mongoose';
@Injectable()
export class CatsRepository {
constructor(@InjectModel(Cat.name) private readonly catModel: Model<Cat>) {}
}
JavaScript
복사
repository에서 mongoose Model을 의존성 주입을 한다.
existsByEmail 로직 정의
여기서 try-catch로 HttpException 처리를 해줘야 하지만, 이미 메인 전역적으로 예외를 처리하고 있기 때문에, 생략이 가능하다.
cat.module에 repository 등록
CatsRepository 를 CatsModule에 providers로 등록한다.
cats.service에 repository 의존성 주입
→ repository에 catsModel 을 이미 주입을 받고 있기 때문에, service에서는 catsModel을 주입받은 repository를 주입해주면 된다.
→ this.catsModel.exist 메소드를 레파지토리에 정의된 메소드로 바꿔주면 되는데 그것이 아래 빨간 박스 this.catsRepository.existsByEmail(email); 이다.
cats.repository > create 메소드 정의
async create(cat: CatRequestDto): Promise<Cat> {
return await this.catModel.create(cat);
}
JavaScript
복사
create 메소드를 위와 같이 정의하면 된다.
서비스 단에서도 이렇게 catsModel을 catsRepository로 변경해주면 된다.