231 lines
9.6 KiB
TypeScript
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>;
|
|
} |