TypeIs 관계 타입
FOREIGNKEY와 BELONGSTO는 엔티티 간 관계를 정의하는 @asapjs/sequelize 전용 타입입니다. registerSequelizeTypes()를 통해 @asapjs/schema의 TypeIs에 동적 등록되며, sequelize-typescript의 연관 관계 API와 통합됩니다. 엔티티 클래스에서만 사용되며 DTO와 라우트 옵션에서는 사용할 수 없습니다.
import { TypeIs } from '@asapjs/sequelize';이 페이지에서 찾을 수 있는 것
| 심볼 | Sequelize 동작 | 엔티티 | DTO | 라우트 |
|---|---|---|---|---|
TypeIs.FOREIGNKEY | addForeignKey + 정수 컬럼 | O | X | X |
TypeIs.BELONGSTO | addAssociation (BelongsTo) | O | X | X |
TypeIs.FOREIGNKEY
TypeIs.FOREIGNKEY(options: { table: () => typeof Model; comment?: string; [key: string]: any })| 항목 | 값 |
|---|---|
| Sequelize | sequelize-typescript의 addForeignKey 호출; extraData에 타입이 없으면 기본값으로 TypeIs.INT() 사용 |
| Swagger | Swagger 스키마에 포함되지 않음 |
fixValue | 없음 |
ForeignKeyOptions
interface ForeignKeyOptions extends SchemaOptions {
references: {
model: string;
key: string;
};
onDelete?: 'CASCADE' | 'SET NULL' | 'NO ACTION' | 'RESTRICT';
onUpdate?: 'CASCADE' | 'SET NULL' | 'NO ACTION' | 'RESTRICT';
}객체 인자로 table과 추가 컬럼 옵션을 전달합니다. 모듈 평가 시 순환 임포트 문제를 피하기 위해 table은 반드시 썽크(() => Model) 형태여야 합니다:
@TypeIs.FOREIGNKEY({ table: () => UsersTable, comment: '작성자 ID' })
user_id: number;TypeIs.BELONGSTO
TypeIs.BELONGSTO(associatedClassGetter: () => typeof Model, optionsOrForeignKey?: string | AssociationOptions)| 항목 | 값 |
|---|---|
| Sequelize | BelongsToAssociation으로 addAssociation 호출; as는 기본적으로 프로퍼티 이름 사용 |
| Swagger | Swagger 스키마에 포함되지 않음 |
fixValue | 없음 |
BelongsToOptions
interface BelongsToOptions extends SchemaOptions {
target: any;
foreignKey?: string;
as?: string;
}두 번째 인수는 외래 키 문자열이거나 전체 AssociationOptions 객체입니다. 옵션에 as가 없으면 프로퍼티 이름이 사용됩니다.
함께 사용하기
FOREIGNKEY는 정수 컬럼 + FK 제약을 생성하고, BELONGSTO는 Sequelize 연관 관계를 등록합니다. 일반적으로 엔티티에서 함께 선언합니다:
import { Model } from 'sequelize-typescript';
import { Table, TypeIs } from '@asapjs/sequelize';
import UsersTable from '../../../user/domain/entity/UsersTable';
@Table({
tableName: 'posts',
timestamps: true,
})
export default class PostsTable extends Model {
@TypeIs.INT({ primaryKey: true, autoIncrement: true, comment: 'Post ID' })
id: number;
@TypeIs.STRING({ comment: 'Post title' })
title: string;
@TypeIs.TEXT({ comment: 'Post content' })
content: string;
// 외래 키 컬럼 — 정수 컬럼 생성 및 FK 제약 등록
@TypeIs.FOREIGNKEY({ table: () => UsersTable, comment: 'Author user ID' })
user_id: number;
// 연관 — 컬럼 없음, BelongsTo 관계 등록
@TypeIs.BELONGSTO(() => UsersTable, 'user_id')
user: UsersTable;
@TypeIs.DATETIME({ comment: 'Created at' })
created_at: Date;
@TypeIs.DATETIME({ comment: 'Updated at' })
updated_at: Date;
}DTO에서 이 관계 데이터를 포함하려면 TypeIs.DTO를 사용합니다. as 값은 BELONGSTO 프로퍼티 이름과 일치해야 합니다:
@TypeIs.DTO({ dto: UserInfoDto, as: 'user', comment: 'Author' })
user: UserInfoDto;관련 항목
- TypeIs 복합 타입 — DTO, QUERY를 통한 관계 데이터 활용
- @Table 데코레이터 — 엔티티 정의
- ExtendableDto —
middleware()가 include를 생성하는 방법
Last updated on