Mapped types
CRUD(Create/Read/Update/Delete)와 같은 기능을 구축할 때 기본 엔터티 클래스를 기능에 맞게 변형하는 것이 필요한 경우가 많습니다. Nest는 이 작업을 보다 편리하게 만들기 위해 클래스 변환을 수행하는 여러 유틸리티 기능을 제공합니다.
Partial
input validation types(DTO라고도 함)을 빌드할 때 동일한 클래스에 대한 create 및 update 클래스로 변형하는 것이 필요한 경우가 많습니다. 예를 들어, create 에는 모든 필드가 필요할 수 있지만 update는 모든 필드를 선택 사항으로 만들 수 있습니다. Nest는 이 작업을 더 쉽게 만들고 보일러플레이트(Boilerplate) 코드를 최소화하기 위해 PartialType()
유틸리티 함수를 제공합니다. PartialType()
함수는 입력 클래스의 모든 속성이 선택 사항으로 설정된 클래스를 반환합니다.
설치
Mapped types 설치를 통해 PartialType을 가져올 수 있습니다.
1 | npm i @nestjs/mapped-types |
사용 예시
이전 글 [NestJS] ValidationPipe 사용 방법 에서 생성한 사용자 등록 DTO 클래스를 이용합니다. 사용자 등록 DTO 클래스의 필드들은 모두 필수 항목입니다.
1 | // create-user.dto.ts |
사용자 등록 DTO 클래스와 동일한 필드를 가지지만 각 필드가 선택 사항인 사용자 수정 DTO 클래스를 생성하려면 PartialType()
함수를 상속받고 사용자 등록 DTO 클래스인 CreateUserDto
를 인수로 전달합니다.
1 | // update-user.dto.ts |
사용자 수정 요청을 받기 위해 컨트롤러 클래스를 생성합니다. update
함수의 파라미터에 생성한 DTO 클래스를 타입으로 지정합니다.
1 | import { Body, Controller, Patch } from '@nestjs/common'; |
사용자 수정 요청을 해보겠습니다. Postman 또는 Insomnia 툴을 이용합니다.
http://localhost:3000/student/ 주소를 PATCH 방식으로 요청합니다.
1 | // 클라이언트 측에서 전송한 데이터가 다음과 같을 경우 |
1 | // 서버에서 응답 |
사용자 등록과 달리 모든 필드가 선택 사항으로 설정되어 있어 요청할 때 속성들을 입력하지 않아도 잘 동작하는 것을 확인할 수 있습니다.