Dto 만들 때 기존에는 PickType 을 사용하여, 특정 스키마에서 필요한 필드만 골라서 dto 클래스를 만들었었다
import { PickType } from '@nestjs/swagger';
import { Member } from '../member.schema';
export class MemberRequestDto extends PickType(Member, [
'email',
'password',
'name',
]) {}
스키마 구조가
드라이버 리뷰 테이블 / 우드 리뷰 테이블 / 아이언 리뷰 테이블... 이런식으로 테이블을 분리했다
(이게 올바른 판단인지는 아직까지도 확신이 서지 않는다)
이유는 종류별로 별점 키값이 다르고, 제출해야하는 부가 정보가 다르기 때문이다
어쨌든, 근데 리뷰 Post API 는 하나의 API 로 프론트로부터 데이터를 받고, 내부적으로 카테고리에 따라서 다른 리뷰 테이블로 create 하는 로직을 타게 된다
그래서 ReviewCreateDto 클래스는 드라이버리뷰 스키마 / 우드 리뷰 스키마 / 아이언 리뷰 스키마 에서 필요한 것만 PickType 해서 상속 받고 싶었다.
export class ReviewCreateDto extends
PickType(DriverReviews, [
'directional',
'design',
]),
PickType(WoodReviews, [
'number',
'distance',
])
{}
이런식으로
하지만 Class 는 1가지 클래스만 상속받을 수 있다.
multiple 클래스를 상속받기 위해서는 interface 를 사용할 수 있다.
결론적으로는 Picktype 을 사용하지 못하고
일일히 필요한 필드를 클래스 내부에 작성해주지만, interface 를 통해서 타입 safe 처리를 했다
interface ReviewCreateDtoInterface extends DriverReviews, WoodReviews {}
export class ReviewCreateDto
implements Omit<ReviewCreateDtoInterface, 'product_id' | 'author_id'>
{
@ApiProperty({
example: 's, sr,, r, a, l',
description: '샤프트',
})
@Prop()
shaft: string;
@ApiProperty({
example: '9, 10, ...',
description: '로프트 각도',
})
@Prop()
loft: string;
@ApiProperty({
example: '9, 10, ...',
description: '우드 넘버(for Wood Only)',
})
@Prop()
number: number;
@ApiProperty({
example: 5,
description: '방향성(5점만점)',
})
@Prop()
directional: number;
}
'Diary' 카테고리의 다른 글
[1D1C] 0318 기록 (0) | 2024.03.19 |
---|---|
[1D1C] 0220 기록 (0) | 2024.02.20 |
[1D1C] 0215 기록 (0) | 2024.02.16 |
[1D1C] 0214 기록 (0) | 2024.02.15 |
[1D1C] 0213 기록 (0) | 2024.02.14 |