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 {}
참, 모듈에 대한 건 작업을 까먹으면 에러가 모듈에 대한 내용으로 나오지 않아서, 한참 걸린다.
참고하자.
반응형