Skip to Content

TypeIs 복합 타입

DTO, QUERY, ARRAY는 Sequelize 컬럼 매핑이 없는 복합 타입입니다. DTO 클래스와 라우트 IOptions에서 사용됩니다.

import { TypeIs } from '@asapjs/schema';

이 페이지에서 찾을 수 있는 것

심볼SequelizeSwagger엔티티DTO라우트
TypeIs.DTOinclude 생성$refXOO
TypeIs.QUERYSequelize.literal()type에 위임XOX
TypeIs.ARRAY{ type: 'array', items }XOO

PAGING 관련 안내: TypeIs.PAGING(Dto)@asapjs/schemaTypeIs에 Sequelize 확장 타입으로 등록되어 있습니다. extensions'@asapjs/sequelize'가 포함된 상태에서 Router 플러그인 초기화 시 registerSequelizeTypes()가 선등록되므로, 라우트 옵션에서 response: TypeIs.PAGING(PostInfoDto) 형태로 사용할 수 있습니다.


TypeIs.DTO

TypeIs.DTO(options: { dto: typeof ExtendableDto; as: string; comment?: string; })
항목
Sequelizemiddleware() 호출 시 include 항목 생성
Swagger중첩된 DTO의 스키마를 가리키는 $ref
fixValue없음 — map()이 중첩 DTO의 자체 map()을 호출하여 DTO 필드를 처리

as는 엔티티의 BELONGSTO 선언에서 사용한 Sequelize 연관 별칭과 일치해야 합니다.

@TypeIs.DTO({ dto: UserInfoDto, as: 'user', comment: 'Post author' }) user: UserInfoDto;

TypeIs.QUERY

TypeIs.QUERY(options: { /** SQL 서브쿼리. props.association은 현재 테이블 별칭, props.user는 JWT 페이로드 */ query: (props: { association?: string; user?: any }) => string; /** 결과 타입. TypeIs.JSON() 등 직접 전달 또는 () => TypeIs.INT() getter */ type?: (() => any) | any; comment?: string; })
항목
SequelizeSequelize.literal(...) 속성 항목 생성
Swaggertype TypeIs의 toSwagger() 출력에 위임
fixValuetype TypeIs의 fixValue에 위임

원시 SQL 표현식이 필요한 계산 컬럼에 QUERY를 사용합니다. query 함수는 객체 인자 { association, user }를 받습니다. association은 현재 테이블 별칭(모델명 또는 연관 경로)이며, SQL 안에서 `${association}.id`처럼 사용할 수 있습니다.

@TypeIs.QUERY({ query: ({ association }) => `(SELECT COUNT(*) FROM posts WHERE posts.user_id = \`${association}\`.\`id\`)`, type: () => TypeIs.INT(), }) post_count: number;

type은 getter 없이 직접 넘길 수 있습니다. comment는 Swagger 등에 노출됩니다.

@TypeIs.QUERY({ query: ({ association }) => `(SELECT COUNT(*) FROM posts WHERE posts.user_id = \`${association}\`.\`id\`)`, type: TypeIs.INT(), comment: '게시글 수', }) post_count: number;

TypeIs.ARRAY

TypeIs.ARRAY(options: DtoOrTypeIs)

DtoOrTypeIstypeof ExtendableDto | (() => TypeIsData)입니다. 자세한 설명은 @Dto 데코레이터 — DtoOrTypeIs를 참조하세요.

항목
Sequelize컬럼 매핑 없음
Swagger{ type: 'array', items: ... }로 네임드 스키마 컴포넌트에 등록
fixValue값이 문자열이면 JSON.parse 시도; 그렇지 않으면 그대로 반환
// DTO 클래스 사용 response: TypeIs.ARRAY(UserInfoDto) // 기본 TypeIs 사용 response: TypeIs.ARRAY(TypeIs.INT()) TypeIs.ARRAY(TypeIs.STRING())

관련 항목

Last updated on