본문으로 건너뛰기

TypeIs

TypeIs는 모든 데이터들의 형식을 통합한 asapjs의 새로운 타입입니다.

이름sequelizeswaggerentity 사용 가능 여부DTO 사용 가능 여부라우터 구성시 사용 가능 여부
INTINTEGERint32OOO
LONGINTEGERint64OOO
FLOATFLOATfloatOOO
DECIMALDECIMALfloatOOO
DOUBLEDOUBLEdoubleOOO
STRINGSTRINGstringOOO
TEXTTEXTstringOOO
ENUMENUMstringOOO
JSONJSONobjectOOO
BASE64BLOBbyteOOO
BINARYBLOBbyteOOO
BOOLEANBOOLEANbooleanOOO
DATEONLYDATEONLYdateOOO
DATETIMEDATEdate-timeOOO
FOREIGNKEY*-OXX
BELONGSTO*-OXX
DTO-object(DTO)XOO
QUERYliteraltypeXOX
ARRAY-objectXOO
PAGING-objectXOO

Feature

데코레이터로 사용

데코레이터로 사용하는 케이스는 다음과 같습니다.

  • Entity(Model)
  • Dto
Dto Example
import { TypeIs, ExtendableDto } from "@asapjs/sequelize";

class SampleDto extends ExtendableDto {
@TypeIs.STRING({ comment: "프로퍼티" })
property: string;
}

타입으로 사용

타입으로 사용하는 케이스는 다음과 같습니다.

  • 라우터 구성
  • Type In Type
라우터 구성 Example
// ...

this.router.get({
title: "유저 이메일 중복 확인",
path: "/check-duplicated-email",
query: EmailDuplicatedCheckDto,
response: TypeIs.BOOLEAN(),
excute: this.EmailDuplicatedCheckController,
});

// ...
Type In Type Example
TypeIs.ARRAY(TypeIs.INT()); // [0]
TypeIs.ARRAY(TypeIs.STRING()); // ['string']

Usage

Entity

UsersTable.ts
@Table({
tableName: "users",
})
export default class UsersTable extends Model {
@TypeIs.STRING({ comment: "이메일" })
signname: string;

@TypeIs.STRING({ comment: "비밀번호" })
password: string;

@TypeIs.STRING({ comment: "이름" })
name: string;

@TypeIs.STRING({ comment: "전화번호" })
phone: string;

@TypeIs.ENUM({
values: Object.keys(CompanyTypeEnum),
comment: "회사 구분 (REMICON: 레미콘사, CONSTRUCTION: 건설사)",
})
company_type: CompanyTypeEnum;

@TypeIs.FOREIGNKEY(() => CompaniesTable)
company_id: number;

@TypeIs.BELONGSTO(() => CompaniesTable, "company_id")
company: CompaniesTable;

@TypeIs.STRING({ comment: "직위/직급" })
position: string;

@TypeIs.STRING({ comment: "사내번호" })
tel: string;

@TypeIs.BOOLEAN({ comment: "탈퇴 여부" })
is_withdraw: boolean;

@TypeIs.DATETIME({ comment: "탈퇴 일시" })
withdraw_at: Date;
}

Dto

UserInfoDto.ts
@Dto({ name: "user_info_dto", defineTable: UsersTable })
export default class UserInfoDto extends ExtendableDto {
@TypeIs.INT({ comment: "아이디" })
id: number;

@TypeIs.STRING({ comment: "이메일" })
signname: string;

@TypeIs.STRING({ comment: "이름" })
name: string;

@TypeIs.STRING({ comment: "전화번호" })
phone: string;

@TypeIs.DTO({ dto: CompanyDto, as: "company", comment: "소속 회사" })
company: CompanyDto;

@TypeIs.STRING({ comment: "직위/직급" })
position: string;

@TypeIs.STRING({ comment: "사내번호" })
tel: string;
}

Router 구성

UserController.ts
// ...

this.router.get({
title: "유저 이메일 중복 확인",
path: "/check-duplicated-email",
query: EmailDuplicatedCheckDto,
response: TypeIs.BOOLEAN(),
excute: this.EmailDuplicatedCheckController,
});

// ...