Search

#030 #Repository

 개요

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로 변경해주면 된다.