TypeIs
TypeIs는 모든 데이터들의 형식을 통합한 asapjs의 새로운 타입입니다.
| 이름 | sequelize | swagger | entity 사용 가능 여부 | DTO 사용 가능 여부 | 라우터 구성시 사용 가능 여부 |
|---|---|---|---|---|---|
INT | INTEGER | int32 | O | O | O |
LONG | INTEGER | int64 | O | O | O |
FLOAT | FLOAT | float | O | O | O |
DECIMAL | DECIMAL | float | O | O | O |
DOUBLE | DOUBLE | double | O | O | O |
STRING | STRING | string | O | O | O |
TEXT | TEXT | string | O | O | O |
ENUM | ENUM | string | O | O | O |
JSON | JSON | object | O | O | O |
BASE64 | BLOB | byte | O | O | O |
BINARY | BLOB | byte | O | O | O |
BOOLEAN | BOOLEAN | boolean | O | O | O |
DATEONLY | DATEONLY | date | O | O | O |
DATETIME | DATE | date-time | O | O | O |
FOREIGNKEY | * | - | O | X | X |
BELONGSTO | * | - | O | X | X |
DTO | - | object(DTO) | X | O | O |
QUERY | literal | type | X | O | X |
ARRAY | - | object | X | O | O |
PAGING | - | object | X | O | O |
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,
});
// ...