Files
frontend/apps/cs/src/entities/link/model/link-interface.ts
T

231 lines
9.6 KiB
TypeScript

import { z } from "zod";
import type { PageableParams, PageableList } from "@/shared/model";
export interface Link {
link_sn: string;
link_nm: string;
link_clsf_cd: string;
link_url: string;
link_srvr_ip: string;
link_db_cd: string;
link_key: string;
link_id: string;
link_pswd: string;
link_cycle_stng: string;
srvc_usg: string;
last_link_rslt_cd: string;
last_link_excn_dt: string;
next_link_excn_dt: string;
last_link_err_cd: string;
mdfcn_dt: string;
mdfr_id_id: string;
link_cycle_mi: string;
}
export interface LinkLog {
rownum: number;
link_sn: string;
link_nm: string;
link_rslt_cd: string;
err_cn: string;
link_err_cd: string;
log_crt_dt: string;
}
export interface LinkInfo extends LinkFormData {
link_sn: string;
link_nm: string;
link_clsf_cd: string;
link_url: string;
link_srvr_ip: string;
link_db_cd: string;
link_key: string;
link_id: string;
link_pswd: string;
srvc_usg: string;
last_link_rslt_cd: string;
last_link_excn_dt: string;
next_link_excn_dt: string;
last_link_err_cd: string;
mdfcn_dt: string;
mdfr_id: string;
link_cycle_mi: number;
}
export interface LinkStats {
link_sn: string;
link_nm: string;
count: number;
}
export interface LinkVrbl {
link_vrbl_sn: string;
link_vrbl_nm: string;
link_vrbl_vl: string;
link_vrbl_cd: string;
link_vrbl_expln: string;
mdfcn_dt: string;
mdfr_id: string;
}
export interface LinkTable {
link_nm: string;
link_sn: string;
tbl_sn: string;
sou_tbl_nm: string;
sou_tbl_korn_nm: string;
sou_tbl_expln: string;
trsf_tbl_nm: string;
trsf_tbl_korn_nm: string;
trsf_tbl_expln: string;
}
export interface LinkTableColumns {
tbl_sn: string;
col_sn: string;
sou_col_nm: string;
sou_col_korn_nm: string;
sou_col_data_frm: string;
sou_col_sz: number;
trsf_col_nm: string;
trsf_col_korn_nm: string;
trsf_col_data_frm: string;
trsf_col_sz: number
pk_yn: string;
col_seq: number;
mdfcn_dt: string;
mdfr_id: string;
}
export const linkFormSchema = z.object({
link_clsf_cd: z.string().max(8).nullable().refine((val) => {
// 빈 값이나 "none" 값이면 false 반환
return val && val !== "none";
}, {
message: "연계 분류를 선택해주세요"
}),
link_sn: z.string().max(50).nullable().optional(),
link_nm: z.string().max(40, { message: '연계명은 40자 이하로 입력해 주세요.' }).nonempty({ message: '연계명은 필수입니다.' }),
link_url: z.string().max(1000, { message: '연계 URL은 1000자 이하로 입력해 주세요.' }).nonempty({ message: '연계 URL은 필수입니다.' }),
link_srvr_ip: z.string().max(20).nullable().optional(),
link_db_cd: z.string().max(10).nullable().optional(),
link_key: z.string().max(100, { message: '연계 KEY는 100자 이하로 입력해 주세요.' }).nonempty({ message: '연계 KEY는 필수입니다.' }),
link_id: z.string().max(20).nullable().optional(),
link_pswd: z.string().max(128).nullable().optional(),
srvc_usg: z.string().max(40).nullable().optional(),
last_link_rslt_cd: z.string().max(4).nullable().optional(),
last_link_excn_dt: z.string().max(40).nullable().optional(),
next_link_excn_dt: z.string().max(40).nullable().optional(),
last_link_err_cd: z.string().max(10).nullable().optional(),
mdfcn_dt: z.string().nullable().optional(),
mdfr_id: z.string().nullable().optional(),
link_cycle_mi: z.coerce.number().nullable().optional().refine((val) => {
if (val == null) return true;
return val >= 5;
}, {
message: "연계 주기는 5분 이상이어야 합니다."
}),
});
export const linkVrblFormSchema = z.object({
link_sn: z.string().max(50).nullable().optional(),
link_vrbl_sn: z.string().max(50).nullable().optional(),
link_vrbl_nm: z.string().max(40, { message: '변수명은 40자 이하로 입력해 주세요.' }).nonempty({ message: '변수명은 필수입니다.' }),
link_vrbl_expln: z.string().max(4000, { message: '설명은 400자 이하로 입력해 주세요.' }).nullable().optional(),
link_vrbl_cd: z.string().max(10, { message: '변수코드는 10자 이하로 입력해 주세요.' }).nullable().optional(),
link_vrbl_vl: z.string().max(1000, { message: '변수값은 1000자 이하로 입력해 주세요.' }).nonempty({ message: '변수값은 필수입니다.' }),
mdfcn_dt: z.string().nullable().optional(),
mdfr_id: z.string().nullable().optional(),
});
export const LinkTableColumnsSchema = z.object({
link_sn: z.string().max(50).nullable().optional(),
tbl_sn: z.string().max(50).nullable().optional(),
col_sn: z.string().max(50).nullable().optional(),
sou_col_nm: z.string().max(40, { message: '40자 이하로 입력해 주세요.' }).nullable().optional(),
sou_col_korn_nm: z.string().max(40, { message: '40자 이하로 입력해 주세요.' }).nullable().optional(),
sou_col_data_frm: z.string().max(40, { message: '40자 이하로 입력해 주세요.' }).nullable().optional(),
sou_col_sz: z.coerce.number().nullable().optional().refine((val) => {
if (val == null) return true;
return val.toString().replace('.', '').length <= 14;
}, {
message: '최대 14자리까지 입력 가능합니다.',
}),
pk_yn: z.string().max(1).nonempty(),
trsf_col_nm: z.string().max(40, { message: '40자 이하로 입력해 주세요.' }).nonempty({ message: '변환컬럼명은 필수입니다.' }),
trsf_col_korn_nm: z.string().max(40, { message: '40자 이하로 입력해 주세요.' }).nonempty({ message: '변환컬럼 한글명은 필수입니다.' }),
trsf_col_data_frm: z.string().max(40, { message: '40자 이하로 입력해 주세요.' }).nonempty({ message: '변환컬럼 데이터 형식은 필수입니다.' }),
trsf_col_sz: z.coerce.number().nullable().optional().refine((val) => {
if (val == null) return true;
return val.toString().replace('.', '').length <= 14;
}, {
message: '최대 14자리까지 입력 가능합니다.',
}),
col_seq: z.coerce.number().nullable().optional(),
mdfcn_dt: z.string().nullable().optional(),
mdfr_id: z.string().nullable().optional(),
});
export const LinkTableSchema = z.object({
link_sn: z.string().max(50).nullable().optional(),
tbl_sn: z.string().max(50).nullable().optional(),
link_nm: z.string().max(50).nullable().optional(),
sou_tbl_nm: z.string().max(40, { message: '40자 이하로 입력해 주세요.' }).nullable().optional(),
sou_tbl_korn_nm: z.string().max(40, { message: '40자 이하로 입력해 주세요.' }).nullable().optional(),
sou_tbl_expln: z.string().max(2000, { message: '설명은 2000자 이하로 입력해 주세요.' }).nullable().optional(),
trsf_tbl_nm: z.string().max(40, { message: '40자 이하로 입력해 주세요.' }).nonempty({ message: '변환테이블명은 필수입니다.' }),
trsf_tbl_korn_nm: z.string().max(40, { message: '40자 이하로 입력해 주세요.' }).nonempty({ message: '변환테이블 한글명은 필수입니다.' }),
trsf_tbl_expln: z.string().max(2000, { message: '설명은 2000자 이하로 입력해 주세요.' }).nullable().optional(),
mdfcn_dt: z.string().nullable().optional(),
mdfr_id: z.string().nullable().optional(),
});
interface LinkStatsListObject {
linkSuccStats: LinkStats[] | null;
linkFailStats: LinkStats[] | null;
}
export interface LinkSearchParam extends PageableParams {
linkSn?: string;
linkNm?: string;
startDate?: string;
endDate?: string;
isSucc?: string;
linkClfsCd?: string;
}
export type LinkFormData = z.infer<typeof linkFormSchema>;
export type LinkVrblFormData = z.infer<typeof linkVrblFormSchema>;
export type LinkTableColData = z.infer<typeof LinkTableColumnsSchema>;
export type LinkTableFormData = z.infer<typeof LinkTableSchema>;
export type LinkList = PageableList<Link>;
export type LinkLogList = PageableList<LinkLog>;
export type LinkStatsList = LinkStatsListObject;
export type LinkVrblList = PageableList<LinkVrbl>;
export type LinkTableColumnsList = PageableList<LinkTableColumns>;
export interface LinkService {
getLinkList(params: LinkSearchParam): Promise<LinkList>;
getLinkInfo(params: string): Promise<LinkInfo>;
linkQuickStart(params: string): Promise<string>;
updateLinkInfo(data: LinkFormData): Promise<void>;
deleteLink(params: string): Promise<void>;
getLinkLogList(params: LinkSearchParam): Promise<LinkLogList>;
getLinkStatsList(params: LinkSearchParam): Promise<LinkStatsList>;
getLinkVrblList(params: string): Promise<LinkVrblList>;
insertLinkVrbl(data: LinkVrblFormData): Promise<number>;
deleteLinkVrbl(data: string[]): Promise<void>;
getLinkVrblInfo(params: string): Promise<LinkVrbl>;
updateLinkVrblInfo(data: LinkVrblFormData): Promise<void>;
getLinkTableInfo(params: string): Promise<LinkTable>;
getLinkTableColList(params: string): Promise<LinkTableColumnsList>;
getLinkTableColInfo(params: { colSn: string; tblSn: string; }): Promise<LinkTableColumns>;
insertLinkTableCol(data: LinkTableColData): Promise<void>;
deleteLinkTableCol(data: string[]): Promise<void>;
updateLinkTableCol(data: LinkTableColData): Promise<void>;
insertLinkTableInfo(data: LinkTableFormData): Promise<void>;
updateLinkTableInfo(data: LinkTableFormData): Promise<void>;
insertLinkInfo(data: LinkFormData): Promise<void>;
countLinkTblNm(tblNm: string): Promise<{ count: number, tbl_sn: string }>;
updateLinkResultCode(linkSn: string): Promise<void>;
}