[230818_TIL] nest.js PickType vs OmitType

jangdu·2023년 8월 18일
0

TIL

목록 보기
1/2

nest를 활용한 쇼핑몰 프로젝트를 하는 도중 상품 등록과 상품 수정 기능을 구현하며,
상품 등록의 경우 request의 body의 모든 데이터가 필수로 필요하지만 수정하는 경우에는 body에 모든 데이터를 전달 할 필요없이 수정 할 데이터만 전달하면 된다.

PickType

request body의 DTO를 만들면서 PickType을 활용한 엔티티를 상속하는 방식으로 사용했었는데,
이 경우에는 항상 모든 데이터가 require하게 들어와야해서 하나라도 빈 데이터가 들어오게되면 class-validator를 사용할 때 해당 예외처리에 걸리게되어 응답을 요청오류로 보내주게된다.

export class CreateProductsRequestDto extends PickType(Product, [
  'price',
  'productName',
  'discription',
  'categoryId',
  'imgUrl',
]) {}

OmitType

하지만 수정의 경우, 해당 데이터들이 모두 필수로 들어와야 할 필요가 없으므로 PickType이 아닌 다른 방식으로 사용해야한다.

이럴 때 적용이 가능한게 OmitType이다. OmitType은 PickType과 마찬가지로 엔티티같은 것에서 필요한 부분만 DTO로 활용이 가능한데, PickType과 달리 모든 데이터가 필수로 들어와야하지 않으므로 class-validator에는 데이터의 타입만 걸러지는게 가능하다.

export class UpdateProductsRequestDto extends OmitType(Product, [
  'price',
  'productName',
  'discription',
  'categoryId',
  'imgUrl',
]) {}

그러나 모든 데이터가 비어있으면 해당 예외처리는 따로 해주는것이 좋을 듯 하다.

profile
대충적음 전부 나만 볼래

1개의 댓글

comment-user-thumbnail
2023년 8월 18일

훌륭한 글 감사드립니다.

답글 달기