DevBoi

[NestJS] Repository Pattern 본문

Develop/[NestJs]

[NestJS] Repository Pattern

HiSmith 2023. 6. 16. 23:57
반응형

단순히 nestJS 관련 API를 개발했다.

스웨거를 붙였고, 해당 관련되서, 단순히 조회해서, 리턴하는 (DTO) 로직을 구현했다.

typeorm 0.3버전 부터 좀 많이 바뀌어서, 버전은 0.2.45로 변경해서 작업을 했다.

 

 

 

1) 컨트롤러

import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards } from '@nestjs/common';
import { CorpService } from './corp.service';
import { JwtAuthGuard } from 'src/auth/auth-guard';
import { Corp } from './entities/corp.entity';
import { ApiTags, ApiOperation, ApiResponse, ApiQuery, ApiParam, ApiBody } from '@nestjs/swagger';
import { CorpDto } from './corp.dto';

@ApiTags('corp') // (옵션) 태그 추가
@Controller('corp')
export class CorpController {
  constructor(private readonly corpService: CorpService) {}
  
  @ApiOperation({ summary: '업체 조회 (id)' }) // (옵션) API 동작 설명
  @ApiParam({
    description: 'corp find by id',
    type: CorpDto,
    name: 'id'
  })
  @Get(':id')
  findOne(@Param('id') id: string) : Promise<Corp>{
    return this.corpService.findbyCorpId(id);
  }
}

 

2) 서비스

import { Inject, Injectable } from '@nestjs/common';
import { CorpRepostiory } from './corp.repository';
import { Corp } from './entities/corp.entity';
import { InjectRepository } from '@nestjs/typeorm';

@Injectable()
export class CorpService {
  constructor(
    private  corpRepository : CorpRepostiory
  ){
    
  }
  // create(createFoodDto: CreateFoodDto) {
  //   return 'This action adds a new';
  // }

  async findbyCorpId(id:string) : Promise<Corp> {
    return this.corpRepository.findbyCorpId(id);
  }

  // findOne(id: number) {
  //   return `This action returns a #${id} food`;
  // }

  // update(id: number, updateFoodDto: UpdateFoodDto) {
  //   return `This action updates a #${id} food`;
  // }

  // remove(id: number) {
  //   return `This action removes a #${id} food`;
  // }
}

3) 레파지토리

import { AbstractRepository, EntityRepository, Repository } from "typeorm";
import { Corp } from "./entities/corp.entity";
import {getRepository} from "typeorm"; 

@EntityRepository(Corp)
export class CorpRepostiory extends Repository<Corp>{

    async findbyCorpId(id: string): Promise<Corp>{
    const corp = 
    await getRepository(Corp)
                .createQueryBuilder("corp")
                .where("corp.id = :id",{id}) 
                .getOne();
    return corp;
    }
}

4) 디티오

import { IsNotEmpty } from "class-validator";

export class CorpDto {
  @IsNotEmpty()
  readonly id: string;

  @IsNotEmpty()
  readonly name: string;

  
}

5) 엔티티

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Corp{

  @PrimaryGeneratedColumn() //업체 아이디
  id: number;
  @Column({ length: 500 }) //업체 이름
  name: string;
  
  



}

6) 모듈

import { Module } from '@nestjs/common';
import { CorpController } from './corp.controller';
import { CorpService } from './corp.service';
import { CorpRepostiory } from './corp.repository';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Corp } from './entities/corp.entity';

@Module({
    imports: [TypeOrmModule.forFeature([Corp])],
    controllers: [CorpController],
    providers: [CorpService,CorpRepostiory],
})
export class CorpModule {}

 

 

참, 모듈에 대한 건 작업을 까먹으면 에러가 모듈에 대한 내용으로 나오지 않아서, 한참 걸린다.

참고하자.

반응형

'Develop > [NestJs]' 카테고리의 다른 글

[NestJs] 수정, 삭제  (0) 2023.06.18
[NestJs] Post , 생성  (0) 2023.06.18
[NestJS] Guard로, 인증 로직 구현  (0) 2023.06.04
[NestJs] TypeOrm 변경 및 Repository  (0) 2023.05.30
[NestJS] MariaDB , TypeOrm 세팅  (0) 2023.05.29