Mapped types
CRUD(Create/Read/Update/Delete)와 같은 기능을 구축할 때 기본 엔터티 클래스를 기능에 맞게 변형하는 것이 필요한 경우가 많습니다. Nest는 이 작업을 보다 편리하게 만들기 위해 클래스 변환을 수행하는 여러 유틸리티 기능을 제공합니다.
Partial
input validation types(DTO라고도 함)을 빌드할 때 동일한 클래스에 대한 create 및 update 클래스로 변형하는 것이 필요한 경우가 많습니다. 예를 들어, create에는 모든 필드가 필요할 수 있지만 update는 모든 필드를 선택 사항으로 만들 수 있습니다. Nest는 이 작업을 더 쉽게 만들고 보일러플레이트(Boilerplate) 코드를 최소화하기 위해 PartialType()
유틸리티 함수를 제공합니다. PartialType()
함수는 입력 클래스의 모든 속성이 선택 사항으로 설정된 클래스를 반환합니다.
설치
Mapped types 설치를 통해 PartialType을 가져올 수 있습니다.
npm i @nestjs/mapped-types
사용 예시
이전 글 [NestJS] ValidationPipe 사용 방법 에서 생성한 사용자 등록 DTO 클래스를 이용합니다. 사용자 등록 DTO 클래스의 필드들은 모두 필수 항목입니다.
// create-user.dto.ts
import { IsString, IsNumber } from 'class-validator';
export class CreateUserDto {
@IsString()
readonly name: string;
@IsNumber()
readonly age: number;
@IsString({ each: true })
readonly hobbies: string[];
}
사용자 등록 DTO 클래스와 동일한 필드를 가지지만 각 필드가 선택 사항인 사용자 수정 DTO 클래스를 생성하려면 PartialType()
함수를 상속받고 사용자 등록 DTO 클래스인 CreateUserDto
를 인수로 전달합니다.
// update-user.dto.ts
import { PartialType } from '@nestjs/mapped-types';
import { CreateUserDto } from './create-user.dto';
export class UpdateUserDto extends PartialType(CreateUserDto) {}
사용자 수정 요청을 받기 위해 컨트롤러 클래스를 생성합니다. update
함수의 파라미터에 생성한 DTO 클래스를 타입으로 지정합니다.
import { Body, Controller, Patch } from '@nestjs/common';
import { UpdateUserDto } from './dto/update-user.dto';
@Controller('users')
export class UserController {
constructor() {}
/**
* 사용자 수정
* @param userData
* @returns
*/
@Patch()
update(@Body() userData: UpdateUserDto) {
return '사용자 수정 성공';
}
}
사용자 수정 요청을 해보겠습니다. Postman 또는 Insomnia 툴을 이용합니다.
http://localhost:3000/student/ 주소를 PATCH 방식으로 요청합니다.
// 클라이언트 측에서 전송한 데이터가 다음과 같을 경우
{
"height": 180
}
// 서버에서 응답
사용자 수정 성공
사용자 등록과 달리 모든 필드가 선택 사항으로 설정되어 있어 요청할 때 속성들을 입력하지 않아도 잘 동작하는 것을 확인할 수 있습니다.
참고
'Backend > NestJS' 카테고리의 다른 글
[NestJS] End-to-end 테스트 (0) | 2023.07.11 |
---|---|
[NestJS] Jest 사용 방법 (0) | 2023.07.04 |
[NestJS] ValidationPipe 사용 방법 (0) | 2023.06.23 |
[NestJS] Param decorators (0) | 2023.06.19 |
[NestJS] Controller, Provider, Module 이란? (0) | 2023.06.14 |
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!