TypeIs 복합 타입
DTO, QUERY, ARRAY는 Sequelize 컬럼 매핑이 없는 복합 타입입니다. DTO 클래스와 라우트 IOptions에서 사용됩니다.
import { TypeIs } from '@asapjs/schema';이 페이지에서 찾을 수 있는 것
| 심볼 | Sequelize | Swagger | 엔티티 | DTO | 라우트 |
|---|---|---|---|---|---|
TypeIs.DTO | include 생성 | $ref | X | O | O |
TypeIs.QUERY | Sequelize.literal() | type에 위임 | X | O | X |
TypeIs.ARRAY | — | { type: 'array', items } | X | O | O |
PAGING 관련 안내:
TypeIs.PAGING(Dto)는@asapjs/schema의TypeIs에 Sequelize 확장 타입으로 등록되어 있습니다.extensions에'@asapjs/sequelize'가 포함된 상태에서 Router 플러그인 초기화 시registerSequelizeTypes()가 선등록되므로, 라우트 옵션에서response: TypeIs.PAGING(PostInfoDto)형태로 사용할 수 있습니다.
TypeIs.DTO
TypeIs.DTO(options: {
dto: typeof ExtendableDto;
as: string;
comment?: string;
})| 항목 | 값 |
|---|---|
| Sequelize | middleware() 호출 시 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;
})| 항목 | 값 |
|---|---|
| Sequelize | Sequelize.literal(...) 속성 항목 생성 |
| Swagger | type TypeIs의 toSwagger() 출력에 위임 |
fixValue | type 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)DtoOrTypeIs는 typeof 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())관련 항목
- TypeIs 기본 타입 — 숫자, 문자열, 불리언, 날짜
- TypeIs 관계 타입 — FOREIGNKEY, BELONGSTO
- ExtendableDto —
map()과middleware()가 복합 타입을 처리하는 방법 - Repository — 페이지네이션 응답 엔벨로프
- @Dto 데코레이터 —
DtoOrTypeIs유니온 타입
Last updated on