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

 

 

RESTful API 설계에 대한 고민

카테고리 별로 리스트를 가져오는 API 에서 category 정보를 어떻게 받을 것인가?

- url 파라미터로 받을 것인가? /products/{category}

- query 로 받을 것인가? /product?category=driver

 

ChatGPT 답변

If the category is a fundamental part of the resource, using a URL parameter may be more appropriate.

If the category is just one of many filtering options, using a query parameter may be more flexible.

 

-> 카테고리 분류는 서비스 내용상 핵심적이고 고정적인 부분임

-> 디테일 페이지의 id params 로 인해 /category/ 프리픽스를 붙여서 분리하였다

-> /:category 와 /:id 를 함께 쓰면 express 는 무조건 앞서있는 라우트로 이동 시킨다

 @Get('/')
  getProducts(@Query() query) {
    return this.productsService.getProducts({
      size: query.size,
      page: query.page,
    });
  }
  
 @Get('/category/:category')
  getProductsByCategory(@Query() query, @Param() params) {
    return this.productsService.getProductsByCategory({
      category: params.category,
      size: query.size,
      page: query.page,
    });
  }

  @Get('/:id')
  getProductById(@Param() params) {
    // TODO : 리뷰 테이블 조회하여 가져오기
    return this.productsService.getProductById(params.id);
  }

'Diary' 카테고리의 다른 글

[1D1C] 0319 기록  (3) 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

* 몇일 빼먹어버렸다. 하지만 다시 시작하는 것이 중요

 

'Diary' 카테고리의 다른 글

[1D1C] 0319 기록  (3) 2024.03.19
[1D1C] 0318 기록  (0) 2024.03.19
[1D1C] 0215 기록  (0) 2024.02.16
[1D1C] 0214 기록  (0) 2024.02.15
[1D1C] 0213 기록  (0) 2024.02.14

* 12시 넘어서...again

'Diary' 카테고리의 다른 글

[1D1C] 0318 기록  (0) 2024.03.19
[1D1C] 0220 기록  (0) 2024.02.20
[1D1C] 0214 기록  (0) 2024.02.15
[1D1C] 0213 기록  (0) 2024.02.14
[1D1C] 0212 기록  (1) 2024.02.12

* 12시 넘어가서 15일로 기록됨

 

'Diary' 카테고리의 다른 글

[1D1C] 0220 기록  (0) 2024.02.20
[1D1C] 0215 기록  (0) 2024.02.16
[1D1C] 0213 기록  (0) 2024.02.14
[1D1C] 0212 기록  (1) 2024.02.12
[1D1C] 0207 기록  (0) 2024.02.07

*12시 넘어가서 14일로 기록됨..

 

'Diary' 카테고리의 다른 글

[1D1C] 0215 기록  (0) 2024.02.16
[1D1C] 0214 기록  (0) 2024.02.15
[1D1C] 0212 기록  (1) 2024.02.12
[1D1C] 0207 기록  (0) 2024.02.07
[1D1C] 0206 기록  (0) 2024.02.06

'Diary' 카테고리의 다른 글

[1D1C] 0214 기록  (0) 2024.02.15
[1D1C] 0213 기록  (0) 2024.02.14
[1D1C] 0207 기록  (0) 2024.02.07
[1D1C] 0206 기록  (0) 2024.02.06
[1D1C] 0205 기록  (0) 2024.02.05

 

 

'Diary' 카테고리의 다른 글

[1D1C] 0213 기록  (0) 2024.02.14
[1D1C] 0212 기록  (1) 2024.02.12
[1D1C] 0206 기록  (0) 2024.02.06
[1D1C] 0205 기록  (0) 2024.02.05
[1D1C] 0202 기록  (0) 2024.02.02

 

'Diary' 카테고리의 다른 글

[1D1C] 0212 기록  (1) 2024.02.12
[1D1C] 0207 기록  (0) 2024.02.07
[1D1C] 0205 기록  (0) 2024.02.05
[1D1C] 0202 기록  (0) 2024.02.02
[1D1C] 0201 기록  (0) 2024.02.01

카카오 소셜 로그인을 프론트부터 백 전체 플로우 테스트 중

 

'Diary' 카테고리의 다른 글

[1D1C] 0207 기록  (0) 2024.02.07
[1D1C] 0206 기록  (0) 2024.02.06
[1D1C] 0202 기록  (0) 2024.02.02
[1D1C] 0201 기록  (0) 2024.02.01
[1D1C] 0131 기록  (0) 2024.02.01

+ Recent posts