반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스프링공부
- nestjs
- 기술공부
- Flutter
- JPA
- 스프링부트
- JPA공부
- 스프링
- 코테준비
- 프로그래머스
- 플러터 개발
- JPA스터디
- Kafka
- JPA예제
- DDD
- nestjs공부
- JPA 공부
- 알고리즘공부
- 자료구조공부
- 코테공부
- 카프카
- querydsl
- 자바공부
- K8S
- 기술면접공부
- Axon framework
- 플러터 공부
- 스프링 공부
- 스프링부트공부
- nestjs스터디
Archives
- Today
- Total
DevBoi
[NestJs] Api 좀 더 Restful 하게 변경 본문
반응형
거지같던 레거시..가 아니고 내 코드를 좀더 바꿨다.
(controller)
import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards, Put, NotFoundException } 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 { CorpReqDto } from './corp.req.dto';
@ApiTags('corp') // (옵션) 태그 추가
@Controller('corp')
export class CorpController {
constructor(private readonly corpService: CorpService) {}
@ApiOperation({ summary: '업체 조회' }) // (옵션) API 동작 설명
@ApiParam({
description: 'corp find by id',
name: 'id'
})
@Get(':id')
async findOne(@Param('id') id: number) : Promise<Corp>{
const corp = await this.corpService.findbyCorpId(id);
console.log(corp);
if(!corp){
throw new NotFoundException();
}
return corp;
}
@ApiOperation({ summary: '업체 정보 생성' })
@ApiParam({
description: 'corp find by id',
type: CorpReqDto,
name: 'post'
})
@Post('')
postCorp(@Body('corp') corpReqDto :CorpReqDto) : Promise<Corp>{
return this.corpService.saveCorp(corpReqDto);
}
@ApiOperation({ summary: '업체 정보 수정' }) @ApiParam({
description: 'update corp',
type: CorpReqDto,
name: 'put'
})
@Put(':id')
putCorp(@Body('corp') corpReqDto :CorpReqDto,@Param('id') id: number){
return this.corpService.putCorp(id,corpReqDto);
}
@ApiOperation({ summary: '업체 정보 삭제' }) @ApiParam({
description: 'delete corp',
name: 'delete'
})
@Delete(':id')
deleteCorp(@Param('id')id: number){
return this.corpService.deleteCorp(id);
}
}
(service)
import { Inject, Injectable } from '@nestjs/common';
import { CorpRepostiory } from './corp.repository';
import { Corp } from './entities/corp.entity';
import { InjectRepository } from '@nestjs/typeorm';
import { CorpReqDto } from './corp.req.dto';
import { Repository } from 'typeorm';
@Injectable()
export class CorpService {
constructor(
@InjectRepository(Corp)
private corpRepository : CorpRepostiory
){}
async findbyCorpId(id:number) :Promise<Corp> {
return await this.corpRepository.findOne(id);
}
async saveCorp(corpReqDto: CorpReqDto) : Promise<Corp>{
const corp = new Corp(corpReqDto)
return await this.corpRepository.save(corp);
}
async putCorp(id: number,corpReqDto: CorpReqDto) :Promise<void>{
const corp = new Corp(corpReqDto);
this.corpRepository.update(id,corp);
}
async deleteCorp(id: number){
await this.corpRepository.delete(id);
}
//업데이트시 반영해야하는 목록을 공통 정의한 함수
updateReqtoEntity(corpReqDto :CorpReqDto,corp :Corp) :Corp{
corp.name = corpReqDto.name;
return corp
}
}
(repository)
import { AbstractRepository, EntityRepository, Repository } from "typeorm";
import { Corp } from "./entities/corp.entity";
import {getRepository} from "typeorm";
import { CorpReqDto } from "./corp.req.dto";
@EntityRepository(Corp)
export class CorpRepostiory extends Repository<Corp>{
async findbyCorpId(id: number): Promise<Corp>{
const corp =
await getRepository(Corp)
.createQueryBuilder("corp")
.where("corp.id = :id",{id})
.getOne();
return corp;
}
}
위의 코드대로 구현된 동작 방식은 아래와 같다.
* (get)(delete)
url : corp/{id}
* (put)
url : corp/{id}
body : {"corp":{"name":"hi_smith3"}}
* (delete)
url : corp/{id}
좀 더 Restful하게 변경했고, 그냥 군더더기 없이 깔끔하게 nestjs를 적용했다.
뭔가 귀찮아서 미루던 작업을 한김에 정리를 했다고 볼 수 있다.
반응형
'Develop > [NestJs]' 카테고리의 다른 글
[NestJs] S3업로드 모듈 생성 (0) | 2023.06.26 |
---|---|
[NestJs] 다대일 매핑 (0) | 2023.06.19 |
[NestJs] 수정, 삭제 (0) | 2023.06.18 |
[NestJs] Post , 생성 (0) | 2023.06.18 |
[NestJS] Repository Pattern (0) | 2023.06.16 |