diff --git a/apps/as/src/entities/dcrag-to/model/dcrag-to-payload-schema.ts b/apps/as/src/entities/dcrag-to/model/dcrag-to-payload-schema.ts index 7ad5827c2..954b1f0af 100644 --- a/apps/as/src/entities/dcrag-to/model/dcrag-to-payload-schema.ts +++ b/apps/as/src/entities/dcrag-to/model/dcrag-to-payload-schema.ts @@ -2,35 +2,35 @@ import { z } from "zod"; /** 백엔드 DcRagFileInfoDto */ export const dcRagFileInfoSchema = z.object({ - fileId: z.string().optional(), - fileGroupId: z.string().optional(), - fileName: z.string().optional(), - physicalPath: z.string().optional(), - downloadUrl: z.string().optional(), - fileSize: z.number().optional(), - esntlAtchFileId: z.string().optional(), - esntlAtchFileNm: z.string().optional(), + fileId: z.string().nullish(), + fileGroupId: z.string().nullish(), + fileName: z.string().nullish(), + physicalPath: z.string().nullish(), + downloadUrl: z.string().nullish(), + fileSize: z.number().nullish(), + esntlAtchFileId: z.string().nullish(), + esntlAtchFileNm: z.string().nullish(), }); /** 백엔드 DcRagDocumentTransferRequestDto */ export const dcRagDocumentTransferRequestSchema = z.object({ fnrsCnsltnDocNo: z.string(), - taskSeComCd: z.string().optional(), - taskSeCdNm: z.string().optional(), - essentialFiles: z.array(dcRagFileInfoSchema).optional(), - etcFiles: z.array(dcRagFileInfoSchema).optional(), - callbackUrl: z.string().optional(), + taskSeComCd: z.string().nullish(), + taskSeCdNm: z.string().nullish(), + essentialFiles: z.array(dcRagFileInfoSchema).nullish(), + etcFiles: z.array(dcRagFileInfoSchema).nullish(), + callbackUrl: z.string().nullish(), }); /** 백엔드 DcRagDraftGenerateRequestDto */ export const dcRagDraftGenerateRequestSchema = z.object({ fnrsCnsltnDocNo: z.string(), pwrkCnsltnDocNo: z.string(), - crtDmndUuid: z.string().optional(), - essentialFiles: z.array(dcRagFileInfoSchema).optional(), - etcFiles: z.array(dcRagFileInfoSchema).optional(), - rqstrUuid: z.string().optional(), - callbackUrl: z.string().optional(), + crtDmndUuid: z.string().nullish(), + essentialFiles: z.array(dcRagFileInfoSchema).nullish(), + etcFiles: z.array(dcRagFileInfoSchema).nullish(), + rqstrUuid: z.string().nullish(), + callbackUrl: z.string().nullish(), }); /** 백엔드 DcRagCostVerifyRequestDto */ diff --git a/apps/as/src/entities/design-cnstn/model/design-cnstn-apply-payload-schema.ts b/apps/as/src/entities/design-cnstn/model/design-cnstn-apply-payload-schema.ts index 5b6c76b10..b4df4790b 100644 --- a/apps/as/src/entities/design-cnstn/model/design-cnstn-apply-payload-schema.ts +++ b/apps/as/src/entities/design-cnstn/model/design-cnstn-apply-payload-schema.ts @@ -2,68 +2,68 @@ import { z } from "zod"; /** 백엔드 DesignCnstnMngSaveRequestDto */ export const designCnstnMngSaveSchema = z.object({ - designCnstnDocNo: z.string().optional(), - admdstCd: z.string().optional(), - envoSeComCd: z.string().optional(), - taskSeComCd: z.string().optional(), - bizNm: z.string().optional(), - bizBgngYr: z.string().optional(), - bizEndYr: z.string().optional(), - bizCn: z.string().optional(), - aplcntNm: z.string().optional(), - aplcntMblTelno: z.string().optional(), - aplcntOgdpNm: z.string().optional(), - aplcntEmlAddr: z.string().optional(), - dsgnrNm: z.string().optional(), - dsgnrTelno: z.string().optional(), - dsgnrOgdpNm: z.string().optional(), - dsgnrEmlAddr: z.string().optional(), - atchFileGroupId: z.string().optional(), - prgrsSttsComCd: z.string().optional(), + designCnstnDocNo: z.string().nullish(), + admdstCd: z.string().nullish(), + envoSeComCd: z.string().nullish(), + taskSeComCd: z.string().nullish(), + bizNm: z.string().nullish(), + bizBgngYr: z.string().nullish(), + bizEndYr: z.string().nullish(), + bizCn: z.string().nullish(), + aplcntNm: z.string().nullish(), + aplcntMblTelno: z.string().nullish(), + aplcntOgdpNm: z.string().nullish(), + aplcntEmlAddr: z.string().nullish(), + dsgnrNm: z.string().nullish(), + dsgnrTelno: z.string().nullish(), + dsgnrOgdpNm: z.string().nullish(), + dsgnrEmlAddr: z.string().nullish(), + atchFileGroupId: z.string().nullish(), + prgrsSttsComCd: z.string().nullish(), }); /** 백엔드 DesignCnstnApplySaveRequestDto.BzScaleItem */ export const designCnstnBzScaleItemSchema = z.object({ - cnstpSeCd: z.string().optional(), - bscPl: z.number().optional(), - budgetReflct: z.number().optional(), - thtiDsgn: z.number().optional(), + cnstpSeCd: z.string().nullish(), + bscPl: z.number().nullish(), + budgetReflct: z.number().nullish(), + thtiDsgn: z.number().nullish(), }); /** 백엔드 DesignCnstnApplySaveRequestDto.BizCstItem */ export const designCnstnBizCstItemSchema = z.object({ - acntgSeCd: z.string().optional(), - bscPlanAmt: z.number().optional(), - bgtRfltAmt: z.number().optional(), - tstmDesignAmt: z.number().optional(), + acntgSeCd: z.string().nullish(), + bscPlanAmt: z.number().nullish(), + bgtRfltAmt: z.number().nullish(), + tstmDesignAmt: z.number().nullish(), }); /** 백엔드 DesignCnstnApplySaveRequestDto.EsntlAtchFileItem */ export const designCnstnEsntlAtchFileItemSchema = z.object({ - esntlAtchFileId: z.string().optional(), - atchFileGroupId: z.string().optional(), + esntlAtchFileId: z.string().nullish(), + atchFileGroupId: z.string().nullish(), }); /** 백엔드 DesignCnstnRvwOpnnSaveRequestDto */ export const designCnstnRvwOpnnSaveSchema = z.object({ designCnstnDocNo: z.string(), - rvwOpnnSn: z.number().optional(), - opnrSeComCd: z.string().optional(), - opnrNm: z.string().optional(), - rvwRsltCn: z.string().optional(), - rvwRsltAnmlyYn: z.string().optional(), - atchFileGroupId: z.string().optional(), + rvwOpnnSn: z.number().nullish(), + opnrSeComCd: z.string().nullish(), + opnrNm: z.string().nullish(), + rvwRsltCn: z.string().nullish(), + rvwRsltAnmlyYn: z.string().nullish(), + atchFileGroupId: z.string().nullish(), }); /** 백엔드 DesignCnstnApplySaveRequestDto */ export const designCnstnApplySaveSchema = z.object({ - techReViewSaveCd: z.string().optional(), - rvwStpCd: z.string().optional(), + techReViewSaveCd: z.string().nullish(), + rvwStpCd: z.string().nullish(), designCnstnMng: designCnstnMngSaveSchema, - bzScaleList: z.array(designCnstnBzScaleItemSchema).optional(), - bizCstList: z.array(designCnstnBizCstItemSchema).optional(), - esntlAtchFileList: z.array(designCnstnEsntlAtchFileItemSchema).optional(), - rvwOpnnList: z.array(designCnstnRvwOpnnSaveSchema).optional(), + bzScaleList: z.array(designCnstnBzScaleItemSchema).nullish(), + bizCstList: z.array(designCnstnBizCstItemSchema).nullish(), + esntlAtchFileList: z.array(designCnstnEsntlAtchFileItemSchema).nullish(), + rvwOpnnList: z.array(designCnstnRvwOpnnSaveSchema).nullish(), }); export type DesignCnstnMngSaveRequestDto = z.infer; diff --git a/apps/as/src/entities/elapr/index.ts b/apps/as/src/entities/elapr/index.ts index 777245649..2210dfc17 100644 --- a/apps/as/src/entities/elapr/index.ts +++ b/apps/as/src/entities/elapr/index.ts @@ -41,6 +41,7 @@ export { validateAllRowsForSave, validateAplnRow, validateAtrzOrder, + validateUniqueAtrzAprvr, validateUniqueSeqNo, } from "./lib/apln-validators"; export { diff --git a/apps/as/src/entities/elapr/lib/apln-validators.ts b/apps/as/src/entities/elapr/lib/apln-validators.ts index 8b75b4279..8ff1d997e 100644 --- a/apps/as/src/entities/elapr/lib/apln-validators.ts +++ b/apps/as/src/entities/elapr/lib/apln-validators.ts @@ -76,3 +76,16 @@ export function validateUniqueSeqNo(rows: ElaprAplnRow[]): string | null { } return null; } + +export function validateUniqueAtrzAprvr(rows: ElaprAplnRow[]): string | null { + const pairSet = new Set(); + for (const row of getVisibleRows(rows)) { + const atrz = row.atrzSeComCd?.trim(); + const aprvr = row.aprvrUuid?.trim(); + if (!atrz || !aprvr) continue; + const key = `${atrz}::${aprvr}`; + if (pairSet.has(key)) return "동일한 결재구분과 결재자가 중복됩니다."; + pairSet.add(key); + } + return null; +} diff --git a/apps/as/src/entities/elapr/model/elapr-dmnd-interface.ts b/apps/as/src/entities/elapr/model/elapr-dmnd-interface.ts index 5d05fd04b..3b0b0d7e5 100644 --- a/apps/as/src/entities/elapr/model/elapr-dmnd-interface.ts +++ b/apps/as/src/entities/elapr/model/elapr-dmnd-interface.ts @@ -7,8 +7,8 @@ export interface ElaprDmndSaveRequestDto { elaprDocNo: string; dmndTtl: string; dmndCn: string; - elaprCycl?: number; - docPrgrsSttsComCd?: string; + elaprCycl?: number | null; + docPrgrsSttsComCd?: string | null; elaprPrgrsSttsList?: ElaprPrgrsSttsSaveRequestDto[]; } diff --git a/apps/as/src/entities/elapr/ui/elapr-apln-picker-grid.tsx b/apps/as/src/entities/elapr/ui/elapr-apln-picker-grid.tsx index c8c84e1c6..f5a065ff6 100644 --- a/apps/as/src/entities/elapr/ui/elapr-apln-picker-grid.tsx +++ b/apps/as/src/entities/elapr/ui/elapr-apln-picker-grid.tsx @@ -17,7 +17,7 @@ import { } from "@common/components"; import { useElaprAplnPage } from "../api/queries"; -import { validateAplnRow } from "../lib/apln-validators"; +import { validateAplnRow, validateUniqueAtrzAprvr } from "../lib/apln-validators"; import { useAplnRows } from "../lib/use-apln-rows"; import { useDndSensors } from "../lib/use-dnd-sensors"; import type { ElaprApln } from "../model/elapr-apln-interface"; @@ -110,6 +110,12 @@ function ElaprAplnPickerGrid({ return; } + const duplicateError = validateUniqueAtrzAprvr(rows); + if (duplicateError) { + alert(duplicateError); + return; + } + commitEdit(row.rowKey); } diff --git a/apps/as/src/entities/elapr/ui/elapr-doc-prgrs-picker-dialog.tsx b/apps/as/src/entities/elapr/ui/elapr-doc-prgrs-picker-dialog.tsx index 0d9b5161e..ec235ec5e 100644 --- a/apps/as/src/entities/elapr/ui/elapr-doc-prgrs-picker-dialog.tsx +++ b/apps/as/src/entities/elapr/ui/elapr-doc-prgrs-picker-dialog.tsx @@ -17,6 +17,7 @@ import { getVisibleRows, validateAllRowsForSave, validateAtrzOrder, + validateUniqueAtrzAprvr, validateUniqueSeqNo, } from "../lib/apln-validators"; import { mapDocPrgrsToAplnRows } from "../lib/doc-prgrs-to-apln-rows"; @@ -90,6 +91,12 @@ function ElaprDocPrgrsPickerDialog({ return; } + const atrzAprvrError = validateUniqueAtrzAprvr(aplnRows); + if (atrzAprvrError) { + alert(atrzAprvrError); + return; + } + const visibleRows = getVisibleRows(aplnRows); onConfirm?.({ aplnRows: visibleRows }); diff --git a/apps/as/src/entities/elapr/ui/elapr-tmplt-picker-dialog.tsx b/apps/as/src/entities/elapr/ui/elapr-tmplt-picker-dialog.tsx index aa70932e9..b61672ef8 100644 --- a/apps/as/src/entities/elapr/ui/elapr-tmplt-picker-dialog.tsx +++ b/apps/as/src/entities/elapr/ui/elapr-tmplt-picker-dialog.tsx @@ -17,6 +17,7 @@ import { getVisibleRows, validateAllRowsForSave, validateAtrzOrder, + validateUniqueAtrzAprvr, validateUniqueSeqNo, } from "../lib/apln-validators"; import type { ElaprAplnRow } from "../model/elapr-apln-row-types"; @@ -106,6 +107,12 @@ function ElaprTmpltPickerDialog({ return; } + const atrzAprvrError = validateUniqueAtrzAprvr(aplnRows); + if (atrzAprvrError) { + alert(atrzAprvrError); + return; + } + const visibleRows = getVisibleRows(aplnRows); const payload: ElaprTmpltPickerConfirmPayload = { diff --git a/apps/as/src/entities/fnrs-cnsltn/model/fnrs-cnsltn-apply-payload-schema.ts b/apps/as/src/entities/fnrs-cnsltn/model/fnrs-cnsltn-apply-payload-schema.ts index 709ae9012..ee1041e17 100644 --- a/apps/as/src/entities/fnrs-cnsltn/model/fnrs-cnsltn-apply-payload-schema.ts +++ b/apps/as/src/entities/fnrs-cnsltn/model/fnrs-cnsltn-apply-payload-schema.ts @@ -2,52 +2,52 @@ import { z } from "zod"; /** 백엔드 FnrsCnsltnMngSaveRequestDto */ export const fnrsCnsltnMngSaveSchema = z.object({ - fnrsCnsltnDocNo: z.string().optional(), - admdstCd: z.string().optional(), - envoSeComCd: z.string().optional(), - taskSeComCd: z.string().optional(), - cfmtnBgtBizNo: z.string().optional(), - bgtAplyYr: z.string().optional(), - bizNm: z.string().optional(), - bizBgngYr: z.string().optional(), - bizEndYr: z.string().optional(), - bizCn: z.string().optional(), - aplcntNm: z.string().optional(), - aplcntMblTelno: z.string().optional(), - aplcntOgdpNm: z.string().optional(), - aplcntEmlAddr: z.string().optional(), - dsgnrNm: z.string().optional(), - dsgnrTelno: z.string().optional(), - dsgnrOgdpNm: z.string().optional(), - dsgnrEmlAddr: z.string().optional(), - atchFileGroupId: z.string().optional(), - sharAtchFileGroupId: z.string().optional(), - prgrsSttsComCd: z.string().optional(), - rtlztnFcltSeComCd: z.string().optional(), - rtlztnUsgSeComCd: z.string().optional(), + fnrsCnsltnDocNo: z.string().nullish(), + admdstCd: z.string().nullish(), + envoSeComCd: z.string().nullish(), + taskSeComCd: z.string().nullish(), + cfmtnBgtBizNo: z.string().nullish(), + bgtAplyYr: z.string().nullish(), + bizNm: z.string().nullish(), + bizBgngYr: z.string().nullish(), + bizEndYr: z.string().nullish(), + bizCn: z.string().nullish(), + aplcntNm: z.string().nullish(), + aplcntMblTelno: z.string().nullish(), + aplcntOgdpNm: z.string().nullish(), + aplcntEmlAddr: z.string().nullish(), + dsgnrNm: z.string().nullish(), + dsgnrTelno: z.string().nullish(), + dsgnrOgdpNm: z.string().nullish(), + dsgnrEmlAddr: z.string().nullish(), + atchFileGroupId: z.string().nullish(), + sharAtchFileGroupId: z.string().nullish(), + prgrsSttsComCd: z.string().nullish(), + rtlztnFcltSeComCd: z.string().nullish(), + rtlztnUsgSeComCd: z.string().nullish(), }); /** 백엔드 FnrsCnsltnApplySaveRequestDto.BzScaleItem */ export const fnrsCnsltnBzScaleItemSchema = z.object({ - cnstpSeCd: z.string().optional(), - bscPl: z.number().optional(), - budgetReflct: z.number().optional(), - thtiDsgn: z.number().optional(), + cnstpSeCd: z.string().nullish(), + bscPl: z.number().nullish(), + budgetReflct: z.number().nullish(), + thtiDsgn: z.number().nullish(), }); /** 백엔드 FnrsCnsltnApplySaveRequestDto.BizCstItem */ export const fnrsCnsltnBizCstItemSchema = z.object({ - acntgSeCd: z.string().optional(), - bscPlanAmt: z.number().optional(), - bgtRfltAmt: z.number().optional(), - tstmDesignAmt: z.number().optional(), + acntgSeCd: z.string().nullish(), + bscPlanAmt: z.number().nullish(), + bgtRfltAmt: z.number().nullish(), + tstmDesignAmt: z.number().nullish(), }); /** 백엔드 FnrsCnsltnApplySaveRequestDto.CklstResultItem */ export const fnrsCnsltnCklstResultItemSchema = z.object({ - cklstRvwSn: z.number().optional(), - cklstArtclSn: z.number().optional(), - cklstSn: z.number().optional(), + cklstRvwSn: z.number().nullish(), + cklstArtclSn: z.number().nullish(), + cklstSn: z.number().nullish(), rvwStpComCd: z.string().nullish(), selected: z.enum(["Y", "N"]).nullish(), picRvwCn: z.string().nullish(), @@ -55,58 +55,58 @@ export const fnrsCnsltnCklstResultItemSchema = z.object({ /** 백엔드 FnrsCnsltnApplySaveRequestDto.EsntlAtchFileItem */ export const fnrsCnsltnEsntlAtchFileItemSchema = z.object({ - esntlAtchFileId: z.string().optional(), - atchFileGroupId: z.string().optional(), + esntlAtchFileId: z.string().nullish(), + atchFileGroupId: z.string().nullish(), }); /** 백엔드 FnrsCnsltnApplySaveRequestDto.FnrsCnsltnSplmntDmndItem */ export const fnrsCnsltnSplmntDmndItemSchema = z.object({ splmntDmndSn: z.number().nullish(), splmntArtclComCd: z.string().nullish(), - splmntDmndCn: z.string().optional(), - splmntDmndDt: z.string().optional(), - splmntDmndAtchFileGroupId: z.string().optional(), - splmntCn: z.string().optional(), - splmntPicNm: z.string().optional(), - splmntCmptnDt: z.string().optional(), - splmntAtchFileGroupId: z.string().optional(), - cmptnYn: z.string().optional(), + splmntDmndCn: z.string().nullish(), + splmntDmndDt: z.string().nullish(), + splmntDmndAtchFileGroupId: z.string().nullish(), + splmntCn: z.string().nullish(), + splmntPicNm: z.string().nullish(), + splmntCmptnDt: z.string().nullish(), + splmntAtchFileGroupId: z.string().nullish(), + cmptnYn: z.string().nullish(), }); /** 백엔드 FnrsCnsltnRvwOpnnSaveRequestDto */ export const fnrsCnsltnRvwOpnnSaveSchema = z.object({ fnrsCnsltnDocNo: z.string(), - rvwOpnnSn: z.number().optional(), - opnrSeComCd: z.string().optional(), - opnrNm: z.string().optional(), - rvwRsltCn: z.string().optional(), - rvwRsltAnmlyYn: z.string().optional(), - atchFileGroupId: z.string().optional(), + rvwOpnnSn: z.number().nullish(), + opnrSeComCd: z.string().nullish(), + opnrNm: z.string().nullish(), + rvwRsltCn: z.string().nullish(), + rvwRsltAnmlyYn: z.string().nullish(), + atchFileGroupId: z.string().nullish(), }); /** 백엔드 FnrsCnsltnApplySaveRequestDto.FnrsSharItem */ export const fnrsSharItemSchema = z.object({ - fnrsSharSeCd: z.string().optional(), - exstnAmt: z.number().optional(), - chgRqtAmt: z.number().optional(), - ajmtAmt: z.number().optional(), - rmrkCn: z.string().optional(), - envoRmrkCn: z.string().optional(), + fnrsSharSeCd: z.string().nullish(), + exstnAmt: z.number().nullish(), + chgRqtAmt: z.number().nullish(), + ajmtAmt: z.number().nullish(), + rmrkCn: z.string().nullish(), + envoRmrkCn: z.string().nullish(), }); /** 백엔드 FnrsCnsltnApplySaveRequestDto */ export const fnrsCnsltnApplySaveSchema = z.object({ - techReViewSaveCd: z.string().optional(), - rvwStpCd: z.string().optional(), + techReViewSaveCd: z.string().nullish(), + rvwStpCd: z.string().nullish(), fnrsCnsltnMng: fnrsCnsltnMngSaveSchema, - bzScaleList: z.array(fnrsCnsltnBzScaleItemSchema).optional(), - bizCstList: z.array(fnrsCnsltnBizCstItemSchema).optional(), - cklstResultList: z.array(fnrsCnsltnCklstResultItemSchema).optional(), - cklstResultMap: z.record(z.array(fnrsCnsltnCklstResultItemSchema)).optional(), - esntlAtchFileList: z.array(fnrsCnsltnEsntlAtchFileItemSchema).optional(), - rvwOpnnList: z.array(fnrsCnsltnRvwOpnnSaveSchema).optional(), - splmntDmndList: z.array(fnrsCnsltnSplmntDmndItemSchema).optional(), - fnrsSharList: z.array(fnrsSharItemSchema).optional(), + bzScaleList: z.array(fnrsCnsltnBzScaleItemSchema).nullish(), + bizCstList: z.array(fnrsCnsltnBizCstItemSchema).nullish(), + cklstResultList: z.array(fnrsCnsltnCklstResultItemSchema).nullish(), + cklstResultMap: z.record(z.array(fnrsCnsltnCklstResultItemSchema)).nullish(), + esntlAtchFileList: z.array(fnrsCnsltnEsntlAtchFileItemSchema).nullish(), + rvwOpnnList: z.array(fnrsCnsltnRvwOpnnSaveSchema).nullish(), + splmntDmndList: z.array(fnrsCnsltnSplmntDmndItemSchema).nullish(), + fnrsSharList: z.array(fnrsSharItemSchema).nullish(), }); export type FnrsCnsltnMngSaveRequestDto = z.infer; diff --git a/apps/as/src/entities/fnrs-cnsltn/model/fnrs-cnsltn-payload-schema.ts b/apps/as/src/entities/fnrs-cnsltn/model/fnrs-cnsltn-payload-schema.ts index 82764bd3b..46d7ef6b8 100644 --- a/apps/as/src/entities/fnrs-cnsltn/model/fnrs-cnsltn-payload-schema.ts +++ b/apps/as/src/entities/fnrs-cnsltn/model/fnrs-cnsltn-payload-schema.ts @@ -2,12 +2,12 @@ import { z } from "zod"; /** 백엔드 FnrsExamineRequestDto */ export const fnrsExamineRequestSchema = z.object({ - prgrsSttsComCd: z.string().optional(), + prgrsSttsComCd: z.string().nullish(), }); /** 백엔드 EnvoActnReviewReqDto */ export const envoActnReviewReqSchema = z.object({ - specialRqstCn: z.string().optional(), + specialRqstCn: z.string().nullish(), }); export type FnrsExamineRequestDto = z.infer; diff --git a/apps/as/src/entities/instl-sncn/model/instl-sncn-apply-payload-schema.ts b/apps/as/src/entities/instl-sncn/model/instl-sncn-apply-payload-schema.ts index 8e6e17616..26913bffd 100644 --- a/apps/as/src/entities/instl-sncn/model/instl-sncn-apply-payload-schema.ts +++ b/apps/as/src/entities/instl-sncn/model/instl-sncn-apply-payload-schema.ts @@ -2,52 +2,52 @@ import { z } from "zod"; /** 백엔드 InstlSncnMngSaveRequestDto */ export const instlSncnMngSaveSchema = z.object({ - instlSncnDocNo: z.string().optional(), - admdstCd: z.string().optional(), - envoSeComCd: z.string().optional(), - sncnSeComCd: z.string().optional(), - taskSeComCd: z.string().optional(), - bgtBizCd: z.string().optional(), - bgtAplyYr: z.string().optional(), - bizNm: z.string().optional(), - bizBgngYr: z.string().optional(), - bizEndYr: z.string().optional(), - bizCn: z.string().optional(), - aplcntNm: z.string().optional(), - aplcntMblTelno: z.string().optional(), - aplcntOgdpNm: z.string().optional(), - aplcntEmlAddr: z.string().optional(), - dsgnrNm: z.string().optional(), - dsgnrTelno: z.string().optional(), - dsgnrOgdpNm: z.string().optional(), - dsgnrEmlAddr: z.string().optional(), - atchFileGroupId: z.string().optional(), - prgrsSttsComCd: z.string().optional(), - rtlztnFcltSeComCd: z.string().optional(), - rtlztnUsgSeComCd: z.string().optional(), + instlSncnDocNo: z.string().nullish(), + admdstCd: z.string().nullish(), + envoSeComCd: z.string().nullish(), + sncnSeComCd: z.string().nullish(), + taskSeComCd: z.string().nullish(), + bgtBizCd: z.string().nullish(), + bgtAplyYr: z.string().nullish(), + bizNm: z.string().nullish(), + bizBgngYr: z.string().nullish(), + bizEndYr: z.string().nullish(), + bizCn: z.string().nullish(), + aplcntNm: z.string().nullish(), + aplcntMblTelno: z.string().nullish(), + aplcntOgdpNm: z.string().nullish(), + aplcntEmlAddr: z.string().nullish(), + dsgnrNm: z.string().nullish(), + dsgnrTelno: z.string().nullish(), + dsgnrOgdpNm: z.string().nullish(), + dsgnrEmlAddr: z.string().nullish(), + atchFileGroupId: z.string().nullish(), + prgrsSttsComCd: z.string().nullish(), + rtlztnFcltSeComCd: z.string().nullish(), + rtlztnUsgSeComCd: z.string().nullish(), }); /** 백엔드 InstlSncnApplySaveRequestDto.BzScaleItem (diff는 API 미전송) */ export const instlSncnBzScaleItemSchema = z.object({ - cnstpSeCd: z.string().optional(), - bscPl: z.number().optional(), - budgetReflct: z.number().optional(), - thtiDsgn: z.number().optional(), + cnstpSeCd: z.string().nullish(), + bscPl: z.number().nullish(), + budgetReflct: z.number().nullish(), + thtiDsgn: z.number().nullish(), }); /** 백엔드 InstlSncnApplySaveRequestDto.BizCstItem */ export const instlSncnBizCstItemSchema = z.object({ - acntgSeCd: z.string().optional(), - bscPlanAmt: z.number().optional(), - bgtRfltAmt: z.number().optional(), - tstmDesignAmt: z.number().optional(), + acntgSeCd: z.string().nullish(), + bscPlanAmt: z.number().nullish(), + bgtRfltAmt: z.number().nullish(), + tstmDesignAmt: z.number().nullish(), }); /** 백엔드 InstlSncnApplySaveRequestDto.CklstResultItem */ export const instlSncnCklstResultItemSchema = z.object({ - cklstRvwSn: z.number().optional(), - cklstArtclSn: z.number().optional(), - cklstSn: z.number().optional(), + cklstRvwSn: z.number().nullish(), + cklstArtclSn: z.number().nullish(), + cklstSn: z.number().nullish(), rvwStpComCd: z.string().nullish(), selected: z.enum(["Y", "N"]).nullish(), picRvwCn: z.string().nullish(), @@ -55,47 +55,47 @@ export const instlSncnCklstResultItemSchema = z.object({ /** 백엔드 InstlSncnApplySaveRequestDto.EsntlAtchFileItem */ export const instlSncnEsntlAtchFileItemSchema = z.object({ - esntlAtchFileId: z.string().optional(), - atchFileGroupId: z.string().optional(), + esntlAtchFileId: z.string().nullish(), + atchFileGroupId: z.string().nullish(), }); /** 백엔드 InstlSncnRvwOpnnSaveRequestDto */ export const instlSncnRvwOpnnSaveSchema = z.object({ instlSncnDocNo: z.string(), - rvwOpnnSn: z.number().optional(), - opnrSeComCd: z.string().optional(), - opnrNm: z.string().optional(), - rvwRsltCn: z.string().optional(), - rvwRsltAnmlyYn: z.string().optional(), - atchFileGroupId: z.string().optional(), + rvwOpnnSn: z.number().nullish(), + opnrSeComCd: z.string().nullish(), + opnrNm: z.string().nullish(), + rvwRsltCn: z.string().nullish(), + rvwRsltAnmlyYn: z.string().nullish(), + atchFileGroupId: z.string().nullish(), }); /** 백엔드 InstlSncnApplySaveRequestDto.InstlSncnSplmntDmndItem */ export const instlSncnSplmntDmndItemSchema = z.object({ splmntDmndSn: z.number().nullish(), splmntArtclComCd: z.string().nullish(), - splmntDmndCn: z.string().optional(), - splmntDmndDt: z.string().optional(), - splmntDmndAtchFileGroupId: z.string().optional(), - splmntCn: z.string().optional(), - splmntPicNm: z.string().optional(), - splmntCmptnDt: z.string().optional(), - splmntAtchFileGroupId: z.string().optional(), - cmptnYn: z.string().optional(), + splmntDmndCn: z.string().nullish(), + splmntDmndDt: z.string().nullish(), + splmntDmndAtchFileGroupId: z.string().nullish(), + splmntCn: z.string().nullish(), + splmntPicNm: z.string().nullish(), + splmntCmptnDt: z.string().nullish(), + splmntAtchFileGroupId: z.string().nullish(), + cmptnYn: z.string().nullish(), }); /** 백엔드 InstlSncnApplySaveRequestDto */ export const instlSncnApplySaveSchema = z.object({ - techReViewSaveCd: z.string().optional(), - rvwStpCd: z.string().optional(), + techReViewSaveCd: z.string().nullish(), + rvwStpCd: z.string().nullish(), instlSncnMng: instlSncnMngSaveSchema, - bzScaleList: z.array(instlSncnBzScaleItemSchema).optional(), - bizCstList: z.array(instlSncnBizCstItemSchema).optional(), - cklstResultList: z.array(instlSncnCklstResultItemSchema).optional(), - cklstResultMap: z.record(z.array(instlSncnCklstResultItemSchema)).optional(), - esntlAtchFileList: z.array(instlSncnEsntlAtchFileItemSchema).optional(), - rvwOpnnList: z.array(instlSncnRvwOpnnSaveSchema).optional(), - splmntDmndList: z.array(instlSncnSplmntDmndItemSchema).optional(), + bzScaleList: z.array(instlSncnBzScaleItemSchema).nullish(), + bizCstList: z.array(instlSncnBizCstItemSchema).nullish(), + cklstResultList: z.array(instlSncnCklstResultItemSchema).nullish(), + cklstResultMap: z.record(z.array(instlSncnCklstResultItemSchema)).nullish(), + esntlAtchFileList: z.array(instlSncnEsntlAtchFileItemSchema).nullish(), + rvwOpnnList: z.array(instlSncnRvwOpnnSaveSchema).nullish(), + splmntDmndList: z.array(instlSncnSplmntDmndItemSchema).nullish(), }); export type InstlSncnMngSaveRequestDto = z.infer; diff --git a/apps/as/src/entities/pwrk-cnsltn-doc-crt-rslt/model/pwrk-cnsltn-doc-crt-rslt-payload-schema.ts b/apps/as/src/entities/pwrk-cnsltn-doc-crt-rslt/model/pwrk-cnsltn-doc-crt-rslt-payload-schema.ts index c9ed3b7e1..f2bf6ac24 100644 --- a/apps/as/src/entities/pwrk-cnsltn-doc-crt-rslt/model/pwrk-cnsltn-doc-crt-rslt-payload-schema.ts +++ b/apps/as/src/entities/pwrk-cnsltn-doc-crt-rslt/model/pwrk-cnsltn-doc-crt-rslt-payload-schema.ts @@ -4,7 +4,7 @@ import { z } from "zod"; export const pwrkCnsltnDocCrtRsltSaveRequestSchema = z.object({ crtDmndUuid: z.string().uuid(), pwrkCnsltnDocNo: z.string().min(1).max(100), - atchFileGroupId: z.string().max(30).optional(), + atchFileGroupId: z.string().max(30).nullish(), }); export type PwrkCnsltnDocCrtRsltSaveRequestDto = z.infer< diff --git a/apps/as/src/entities/pwrk-cnsltn-doc-evl/model/pwrk-cnsltn-doc-evl-payload-schema.ts b/apps/as/src/entities/pwrk-cnsltn-doc-evl/model/pwrk-cnsltn-doc-evl-payload-schema.ts index 5418c7c63..828d2ff6b 100644 --- a/apps/as/src/entities/pwrk-cnsltn-doc-evl/model/pwrk-cnsltn-doc-evl-payload-schema.ts +++ b/apps/as/src/entities/pwrk-cnsltn-doc-evl/model/pwrk-cnsltn-doc-evl-payload-schema.ts @@ -3,10 +3,10 @@ import { z } from "zod"; /** 백엔드 PwrkCnsltnDocEvlSaveRequestDto */ export const pwrkCnsltnDocEvlSaveRequestSchema = z.object({ pwrkCnsltnDocNo: z.string().min(1), - pwrkCnsltnDocEvlUuid: z.string().uuid().optional(), - pwrkCnsltnDocEvlCn: z.string().max(2000).optional(), - pwrkCnsltnDocEvlScr: z.number().optional(), - pwrkCnsltnDocEvlDt: z.string().optional(), + pwrkCnsltnDocEvlUuid: z.string().uuid().nullish(), + pwrkCnsltnDocEvlCn: z.string().max(2000).nullish(), + pwrkCnsltnDocEvlScr: z.number().nullish(), + pwrkCnsltnDocEvlDt: z.string().nullish(), }); export type PwrkCnsltnDocEvlSaveRequestDto = z.infer; diff --git a/apps/as/src/entities/pwrk-cnsltn-mng/model/pwrk-cnsltn-mng-payload-schema.ts b/apps/as/src/entities/pwrk-cnsltn-mng/model/pwrk-cnsltn-mng-payload-schema.ts index d12926429..228752faa 100644 --- a/apps/as/src/entities/pwrk-cnsltn-mng/model/pwrk-cnsltn-mng-payload-schema.ts +++ b/apps/as/src/entities/pwrk-cnsltn-mng/model/pwrk-cnsltn-mng-payload-schema.ts @@ -3,18 +3,18 @@ import { z } from "zod"; /** 백엔드 PwrkActnResultSubmitDto.ActnItemDto */ export const pwrkActnResultActnItemSchema = z.object({ rvwOpnnSn: z.number(), - actnRsltCn: z.string().optional(), - rfltYn: z.string().optional(), - atchFileGroupId: z.string().optional(), + actnRsltCn: z.string().nullish(), + rfltYn: z.string().nullish(), + atchFileGroupId: z.string().nullish(), }); /** 백엔드 PwrkActnResultSubmitDto */ export const pwrkActnResultSubmitSchema = z.object({ isSubmit: z.boolean(), - actnList: z.array(pwrkActnResultActnItemSchema).optional(), - totActnSummary: z.string().optional(), - muniDocNo: z.string().optional(), - pwrkAtchFileGroupId: z.string().optional(), + actnList: z.array(pwrkActnResultActnItemSchema).nullish(), + totActnSummary: z.string().nullish(), + muniDocNo: z.string().nullish(), + pwrkAtchFileGroupId: z.string().nullish(), }); export type PwrkActnResultSubmitDto = z.infer; diff --git a/apps/as/src/entities/sewer-bsc-plan/model/sewer-bsc-plan-apply-payload-schema.ts b/apps/as/src/entities/sewer-bsc-plan/model/sewer-bsc-plan-apply-payload-schema.ts index 6ad7af1ba..b0fafabc9 100644 --- a/apps/as/src/entities/sewer-bsc-plan/model/sewer-bsc-plan-apply-payload-schema.ts +++ b/apps/as/src/entities/sewer-bsc-plan/model/sewer-bsc-plan-apply-payload-schema.ts @@ -2,50 +2,50 @@ import { z } from "zod"; /** 백엔드 SewerBscPlanSaveRequestDto */ export const sewerBscPlanSaveSchema = z.object({ - sewerBscPlanDocNo: z.string().optional(), - admdstCd: z.string().optional(), - envoSeComCd: z.string().optional(), - sewerBscPlanSeComCd: z.string().optional(), - sewerBscPlanNm: z.string().optional(), - taskSeComCd: z.string().optional(), - prgrsSttsComCd: z.string().optional(), + sewerBscPlanDocNo: z.string().nullish(), + admdstCd: z.string().nullish(), + envoSeComCd: z.string().nullish(), + sewerBscPlanSeComCd: z.string().nullish(), + sewerBscPlanNm: z.string().nullish(), + taskSeComCd: z.string().nullish(), + prgrsSttsComCd: z.string().nullish(), }); /** 백엔드 SewerBscPlanDtlSaveRequestDto */ export const sewerBscPlanDtlSaveSchema = z.object({ - sewerBscPlanDocNo: z.string().optional(), - chgCycl: z.number().optional(), - aplcntNm: z.string().optional(), - aplcntMblTelno: z.string().optional(), - aplcntOgdpNm: z.string().optional(), - aplcntEmlAddr: z.string().optional(), - dsgnrNm: z.string().optional(), - dsgnrTelno: z.string().optional(), - dsgnrOgdpNm: z.string().optional(), - dsgnrEmlAddr: z.string().optional(), - planYr: z.string().optional(), - crtrYr: z.string().optional(), - bizOtlnCn: z.string().optional(), - frlvlGoalYr: z.string().optional(), - sclvlGoalYr: z.string().optional(), - thlvlGoalYr: z.string().optional(), - folvlGoalYr: z.string().optional(), - atchFileGroupId: z.string().optional(), + sewerBscPlanDocNo: z.string().nullish(), + chgCycl: z.number().nullish(), + aplcntNm: z.string().nullish(), + aplcntMblTelno: z.string().nullish(), + aplcntOgdpNm: z.string().nullish(), + aplcntEmlAddr: z.string().nullish(), + dsgnrNm: z.string().nullish(), + dsgnrTelno: z.string().nullish(), + dsgnrOgdpNm: z.string().nullish(), + dsgnrEmlAddr: z.string().nullish(), + planYr: z.string().nullish(), + crtrYr: z.string().nullish(), + bizOtlnCn: z.string().nullish(), + frlvlGoalYr: z.string().nullish(), + sclvlGoalYr: z.string().nullish(), + thlvlGoalYr: z.string().nullish(), + folvlGoalYr: z.string().nullish(), + atchFileGroupId: z.string().nullish(), }); /** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanOtlnItem */ export const sewerBscPlanOtlnItemSchema = z.object({ - planStpNo: z.number().optional(), - sewerPlanPpltnCnt: z.number().optional(), - sewerPrcsPpltnCnt: z.number().optional(), - sewerPsplyRt: z.number().optional(), + planStpNo: z.number().nullish(), + sewerPlanPpltnCnt: z.number().nullish(), + sewerPrcsPpltnCnt: z.number().nullish(), + sewerPsplyRt: z.number().nullish(), }); /** 백엔드 SewerBscPlanApplySaveRequestDto.CklstResultItem */ export const sewerBscPlanCklstResultItemSchema = z.object({ - cklstRvwSn: z.number().optional(), - cklstArtclSn: z.number().optional(), - cklstSn: z.number().optional(), + cklstRvwSn: z.number().nullish(), + cklstArtclSn: z.number().nullish(), + cklstSn: z.number().nullish(), rvwStpComCd: z.string(), selected: z.enum(["Y", "N"]).nullish(), picRvwCn: z.string().nullish(), @@ -53,109 +53,109 @@ export const sewerBscPlanCklstResultItemSchema = z.object({ /** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanFnrsCstItem */ export const sewerBscPlanFnrsCstItemSchema = z.object({ - planStpNo: z.number().optional(), - gvexpAmt: z.number().optional(), - lcexpAmt: z.number().optional(), - orgprBdchgAmt: z.number().optional(), - etcAmt: z.number().optional(), - sumAmt: z.number().optional(), + planStpNo: z.number().nullish(), + gvexpAmt: z.number().nullish(), + lcexpAmt: z.number().nullish(), + orgprBdchgAmt: z.number().nullish(), + etcAmt: z.number().nullish(), + sumAmt: z.number().nullish(), }); /** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanSplmntDmndItem */ export const sewerBscPlanSplmntDmndItemSchema = z.object({ splmntDmndSn: z.number().nullish(), splmntArtclComCd: z.string().nullish(), - splmntDmndCn: z.string().optional(), - splmntDmndDt: z.string().optional(), - splmntDmndAtchFileGroupId: z.string().optional(), - splmntCn: z.string().optional(), - splmntPicNm: z.string().optional(), - splmntCmptnDt: z.string().optional(), - splmntAtchFileGroupId: z.string().optional(), - cmptnYn: z.string().optional(), + splmntDmndCn: z.string().nullish(), + splmntDmndDt: z.string().nullish(), + splmntDmndAtchFileGroupId: z.string().nullish(), + splmntCn: z.string().nullish(), + splmntPicNm: z.string().nullish(), + splmntCmptnDt: z.string().nullish(), + splmntAtchFileGroupId: z.string().nullish(), + cmptnYn: z.string().nullish(), }); /** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanRvwOpnnItem */ export const sewerBscPlanRvwOpnnItemSchema = z.object({ - rvwOpnnSn: z.number().optional(), - opnrSeComCd: z.string().optional(), - opnrNm: z.string().optional(), - rvwRsltCn: z.string().optional(), - rvwRsltAnmlyYn: z.string().optional(), - atchFileGroupId: z.string().optional(), + rvwOpnnSn: z.number().nullish(), + opnrSeComCd: z.string().nullish(), + opnrNm: z.string().nullish(), + rvwRsltCn: z.string().nullish(), + rvwRsltAnmlyYn: z.string().nullish(), + atchFileGroupId: z.string().nullish(), }); /** 백엔드 SewerBscPlanApplySaveRequestDto.EsntlAtchFileItem */ export const sewerBscPlanEsntlAtchFileItemSchema = z.object({ - esntlAtchFileId: z.string().optional(), - atchFileGroupId: z.string().optional(), + esntlAtchFileId: z.string().nullish(), + atchFileGroupId: z.string().nullish(), }); /** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanBizCstItem */ export const sewerBscPlanBizCstItemSchema = z.object({ - planStpNo: z.number().optional(), - acntgSeCd: z.string().optional(), - cstrnAmt: z.number().optional(), + planStpNo: z.number().nullish(), + acntgSeCd: z.string().nullish(), + cstrnAmt: z.number().nullish(), }); /** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanTmplntDtlItem */ export const sewerBscPlanTmplntDtlItemSchema = z.object({ - planStpNo: z.number().optional(), - swtrmtFcltCd: z.string().optional(), - prcsZoneArea: z.number().optional(), - swtrmtPpltnCnt: z.number().optional(), - planSwqty: z.number().optional(), - fcltCpct: z.number().optional(), - sprsysDrtwPplLen: z.number().optional(), - sprsysExlnPplLen: z.number().optional(), - cbsysPplLen: z.number().optional(), - icptgPplLen: z.number().optional(), - drgCnt: z.number().optional(), - drtwRlyPumpCnt: z.number().optional(), - drtwPumpCnt: z.number().optional(), - exlnPumpCnt: z.number().optional(), + planStpNo: z.number().nullish(), + swtrmtFcltCd: z.string().nullish(), + prcsZoneArea: z.number().nullish(), + swtrmtPpltnCnt: z.number().nullish(), + planSwqty: z.number().nullish(), + fcltCpct: z.number().nullish(), + sprsysDrtwPplLen: z.number().nullish(), + sprsysExlnPplLen: z.number().nullish(), + cbsysPplLen: z.number().nullish(), + icptgPplLen: z.number().nullish(), + drgCnt: z.number().nullish(), + drtwRlyPumpCnt: z.number().nullish(), + drtwPumpCnt: z.number().nullish(), + exlnPumpCnt: z.number().nullish(), }); /** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanTmplntItem */ export const sewerBscPlanTmplntItemSchema = z.object({ - swtrmtFcltCd: z.string().optional(), - atchFileGroupId: z.string().optional(), - sewerBscPlanTmplntDtlList: z.array(sewerBscPlanTmplntDtlItemSchema).optional(), + swtrmtFcltCd: z.string().nullish(), + atchFileGroupId: z.string().nullish(), + sewerBscPlanTmplntDtlList: z.array(sewerBscPlanTmplntDtlItemSchema).nullish(), }); /** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanTmplntTmprStrgItem */ export const sewerBscPlanTmplntTmprStrgItemSchema = z.object({ - dtStrgDt: z.string().optional(), - swtrmtFcltCd: z.string().optional(), - prcsZoneArea: z.number().optional(), - swtrmtPpltnCnt: z.number().optional(), - planSwqty: z.number().optional(), - fcltCpct: z.number().optional(), - sprsysDrtwPplLen: z.number().optional(), - sprsysExlnPplLen: z.number().optional(), - cbsysPplLen: z.number().optional(), - icptgPplLen: z.number().optional(), - drgCnt: z.number().optional(), - drtwRlyPumpCnt: z.number().optional(), - drtwPumpCnt: z.number().optional(), - exlnPumpCnt: z.number().optional(), + dtStrgDt: z.string().nullish(), + swtrmtFcltCd: z.string().nullish(), + prcsZoneArea: z.number().nullish(), + swtrmtPpltnCnt: z.number().nullish(), + planSwqty: z.number().nullish(), + fcltCpct: z.number().nullish(), + sprsysDrtwPplLen: z.number().nullish(), + sprsysExlnPplLen: z.number().nullish(), + cbsysPplLen: z.number().nullish(), + icptgPplLen: z.number().nullish(), + drgCnt: z.number().nullish(), + drtwRlyPumpCnt: z.number().nullish(), + drtwPumpCnt: z.number().nullish(), + exlnPumpCnt: z.number().nullish(), }); /** 백엔드 SewerBscPlanApplySaveRequestDto */ export const sewerBscPlanApplySaveSchema = z.object({ - techReViewSaveCd: z.string().optional(), - rvwStpCd: z.string().optional(), + techReViewSaveCd: z.string().nullish(), + rvwStpCd: z.string().nullish(), sewerBscPlan: sewerBscPlanSaveSchema, sewerBscPlanDtl: sewerBscPlanDtlSaveSchema, - sewerBscPlanOtlnList: z.array(sewerBscPlanOtlnItemSchema).optional(), - cklstResultList: z.array(sewerBscPlanCklstResultItemSchema).optional(), - fnrsCstList: z.array(sewerBscPlanFnrsCstItemSchema).optional(), - splmntDmndList: z.array(sewerBscPlanSplmntDmndItemSchema).optional(), - rvwOpnnList: z.array(sewerBscPlanRvwOpnnItemSchema).optional(), - esntlAtchFileList: z.array(sewerBscPlanEsntlAtchFileItemSchema).optional(), - bizCstList: z.array(sewerBscPlanBizCstItemSchema).optional(), - sewerBscPlanTmplntList: z.array(sewerBscPlanTmplntItemSchema).optional(), - tmplntTmprStrgList: z.array(sewerBscPlanTmplntTmprStrgItemSchema).optional(), + sewerBscPlanOtlnList: z.array(sewerBscPlanOtlnItemSchema).nullish(), + cklstResultList: z.array(sewerBscPlanCklstResultItemSchema).nullish(), + fnrsCstList: z.array(sewerBscPlanFnrsCstItemSchema).nullish(), + splmntDmndList: z.array(sewerBscPlanSplmntDmndItemSchema).nullish(), + rvwOpnnList: z.array(sewerBscPlanRvwOpnnItemSchema).nullish(), + esntlAtchFileList: z.array(sewerBscPlanEsntlAtchFileItemSchema).nullish(), + bizCstList: z.array(sewerBscPlanBizCstItemSchema).nullish(), + sewerBscPlanTmplntList: z.array(sewerBscPlanTmplntItemSchema).nullish(), + tmplntTmprStrgList: z.array(sewerBscPlanTmplntTmprStrgItemSchema).nullish(), }); export type SewerBscPlanSaveRequestDto = z.infer; diff --git a/apps/as/src/pages/design-cnstn/lib/design-cnstn-regist-schema.ts b/apps/as/src/pages/design-cnstn/lib/design-cnstn-regist-schema.ts index 9cbcdc270..fbb6c9147 100644 --- a/apps/as/src/pages/design-cnstn/lib/design-cnstn-regist-schema.ts +++ b/apps/as/src/pages/design-cnstn/lib/design-cnstn-regist-schema.ts @@ -23,8 +23,8 @@ export const designCnstnRegistSchema = z.object({ .string() .min(1, "설계자 이메일은 필수입니다") .email("올바른 이메일 형식이 아닙니다"), - sido: z.string().optional(), - gugun: z.string().optional(), + sido: z.string().nullish(), + gugun: z.string().nullish(), }), bzScaleList: z.array( designCnstnBzScaleItemSchema.extend({ @@ -32,7 +32,7 @@ export const designCnstnRegistSchema = z.object({ bscPl: z.number(), budgetReflct: z.number(), thtiDsgn: z.number(), - diff: z.number().optional(), + diff: z.number().nullish(), }), ), esntlAtchFileList: z.array( @@ -52,7 +52,7 @@ export function formatTaskSeComCdForApi(taskSeComCd: string[]): string { return taskSeComCd.join(","); } -export function parseTaskSeComCdFromApi(taskSeComCd?: string): string[] { +export function parseTaskSeComCdFromApi(taskSeComCd?: string | null): string[] { if (!taskSeComCd) return []; return taskSeComCd.split(",").filter(Boolean); } diff --git a/apps/as/src/pages/design-cnstn/model/columns.tsx b/apps/as/src/pages/design-cnstn/model/columns.tsx index 083bd08fe..429c209aa 100644 --- a/apps/as/src/pages/design-cnstn/model/columns.tsx +++ b/apps/as/src/pages/design-cnstn/model/columns.tsx @@ -72,7 +72,7 @@ function getBadgeColor(state: BadgeState) { } } -function formatOptional(value: string | undefined) { +function formatOptional(value: string | null | undefined) { return value?.trim() ? value : "-"; } diff --git a/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts b/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts index 3b0aca199..357388417 100644 --- a/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts +++ b/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts @@ -51,14 +51,19 @@ const ROLE_STATUS_BUTTON_ACTIONS: Record { - const step = (row.rvwStpComCd ?? "LOCAL") as ReviewStepCode; - if (REVIEW_STEP_CODES.includes(step)) base[step].push(row); - }); - return base; -} - export function extractTaskCodes(rows: CklstRvwRsltTreeDto[]): string[] { return Array.from(new Set(rows.map((row) => row.taskSeComCd).filter(Boolean))); } @@ -70,13 +60,6 @@ export function computeChecklistProgress( return { total, completed, percent }; } -export function filterChecklistRowsByReviewStep( - rows: CklstRvwRsltTreeDto[], - reviewStep: ReviewStepCode, -): CklstRvwRsltTreeDto[] { - return rows.filter((row) => row.rvwStpComCd === reviewStep); -} - export function computeReviewStepChecklistProgress( rows: CklstRvwRsltTreeDto[], results: ChecklistFormState["results"], @@ -93,23 +76,6 @@ export function computeReviewStepChecklistProgress( return { total, completed, percent }; } -export function buildChecklistFormState(rows: CklstRvwRsltTreeDto[]): ChecklistFormState { - const results: ChecklistFormState["results"] = {}; - const comments: ChecklistFormState["comments"] = {}; - rows.forEach((row) => { - const key = buildChecklistRowKey(row); - if (row.rvwRsltAnmlyYn === "Y" || row.rvwRsltAnmlyYn === "N") { - results[key] = row.rvwRsltAnmlyYn; - } - if (row.picRvwCn) comments[key] = row.picRvwCn; - }); - return { - results, - comments, - progress: computeChecklistProgress(rows, results), - }; -} - export function mergeChecklistFormStateFromServer( prev: ChecklistFormState, allRows: CklstRvwRsltTreeDto[], diff --git a/apps/as/src/pages/fnrs-cnsltn/lib/fnrs-cnsltn-regist-schema.ts b/apps/as/src/pages/fnrs-cnsltn/lib/fnrs-cnsltn-regist-schema.ts index 5739c8e6e..f0dbd8ad2 100644 --- a/apps/as/src/pages/fnrs-cnsltn/lib/fnrs-cnsltn-regist-schema.ts +++ b/apps/as/src/pages/fnrs-cnsltn/lib/fnrs-cnsltn-regist-schema.ts @@ -27,8 +27,8 @@ export const fnrsCnsltnRegistSchema = z.object({ .string() .min(1, "설계자 이메일은 필수입니다") .email("올바른 이메일 형식이 아닙니다"), - sido: z.string().optional(), - gugun: z.string().optional(), + sido: z.string().nullish(), + gugun: z.string().nullish(), }), bzScaleList: z.array( fnrsCnsltnBzScaleItemSchema.extend({ @@ -36,7 +36,7 @@ export const fnrsCnsltnRegistSchema = z.object({ bscPl: z.number(), budgetReflct: z.number(), thtiDsgn: z.number(), - diff: z.number().optional(), + diff: z.number().nullish(), }), ), bizCstList: z.array( @@ -52,8 +52,8 @@ export const fnrsCnsltnRegistSchema = z.object({ fnrsSharSeCd: z.string(), exstnAmt: z.number(), chgRqtAmt: z.number(), - ajmtAmt: z.number().optional(), - rmrkCn: z.string().optional(), + ajmtAmt: z.number().nullish(), + rmrkCn: z.string().nullish(), }), ), cklstResultList: z.array( @@ -74,7 +74,7 @@ export const fnrsCnsltnRegistSchema = z.object({ splmntDmndList: z.array( fnrsCnsltnSplmntDmndItemSchema.extend({ splmntArtclCdNm: z.string().nullish(), - splmntDmndAtchFileNm: z.string().optional(), + splmntDmndAtchFileNm: z.string().nullish(), }), ), privacyConsent: z.enum(["Y", "N"], { @@ -88,7 +88,7 @@ export function formatTaskSeComCdForApi(taskSeComCd: string[]): string { return taskSeComCd.join(","); } -export function parseTaskSeComCdFromApi(taskSeComCd?: string): string[] { +export function parseTaskSeComCdFromApi(taskSeComCd?: string | null): string[] { if (!taskSeComCd) return []; return taskSeComCd.split(",").filter(Boolean); } diff --git a/apps/as/src/pages/fnrs-cnsltn/lib/pwrk-cnsltn-doc-evl-schema.ts b/apps/as/src/pages/fnrs-cnsltn/lib/pwrk-cnsltn-doc-evl-schema.ts index 569c4f9c2..10e532a00 100644 --- a/apps/as/src/pages/fnrs-cnsltn/lib/pwrk-cnsltn-doc-evl-schema.ts +++ b/apps/as/src/pages/fnrs-cnsltn/lib/pwrk-cnsltn-doc-evl-schema.ts @@ -15,7 +15,7 @@ export const pwrkCnsltnDocEvlFormSchema = z.object({ required_error: "만족도를 선택해 주세요.", invalid_type_error: "만족도를 선택해 주세요.", }), - pwrkCnsltnDocEvlCn: z.string().max(2000).optional(), + pwrkCnsltnDocEvlCn: z.string().max(2000).nullish(), }); export type PwrkCnsltnDocEvlFormValues = z.infer; diff --git a/apps/as/src/pages/fnrs-cnsltn/lib/review-step-utils.ts b/apps/as/src/pages/fnrs-cnsltn/lib/review-step-utils.ts index 0ba84b926..f1d93361a 100644 --- a/apps/as/src/pages/fnrs-cnsltn/lib/review-step-utils.ts +++ b/apps/as/src/pages/fnrs-cnsltn/lib/review-step-utils.ts @@ -1,3 +1,5 @@ +import type { CklstRvwRsltTreeDto } from "@/entities/fnrs-cnsltn"; + import { PBADMS_PROGRESS_ORDER, REVIEW_STEP_CODES, @@ -28,6 +30,25 @@ export function getVisibleReviewSteps( return REVIEW_STEP_CODES.slice(0, count); } +export function resolveVisibleReviewSteps( + prgrsSttsComCd: string, + userRoleCode: string | undefined, + cklstResultList: CklstRvwRsltTreeDto[], +): ReviewStepCode[] { + const byProgressAndRole = getVisibleReviewSteps(prgrsSttsComCd, userRoleCode); + const currentStep = byProgressAndRole.at(-1); + const stepsWithData = new Set(); + + for (const row of cklstResultList) { + const step = row.rvwStpComCd as ReviewStepCode | undefined; + if (step && REVIEW_STEP_CODES.includes(step)) stepsWithData.add(step); + } + + return REVIEW_STEP_CODES.filter( + (step) => stepsWithData.has(step) || step === currentStep, + ); +} + export function getEditableReviewStep( dtlInstCd?: string, prgrsSttsComCd?: string, diff --git a/apps/as/src/pages/fnrs-cnsltn/model/columns.tsx b/apps/as/src/pages/fnrs-cnsltn/model/columns.tsx index 2374b0c40..d033b290e 100644 --- a/apps/as/src/pages/fnrs-cnsltn/model/columns.tsx +++ b/apps/as/src/pages/fnrs-cnsltn/model/columns.tsx @@ -113,7 +113,7 @@ function getBadgeColor(state: BadgeState) { } } -function formatOptional(value: string | undefined) { +function formatOptional(value: string | null | undefined) { return value?.trim() ? value : "-"; } diff --git a/apps/as/src/pages/fnrs-cnsltn/model/view-types.ts b/apps/as/src/pages/fnrs-cnsltn/model/view-types.ts index c3a21fb94..4b71756cb 100644 --- a/apps/as/src/pages/fnrs-cnsltn/model/view-types.ts +++ b/apps/as/src/pages/fnrs-cnsltn/model/view-types.ts @@ -44,10 +44,14 @@ export interface ChecklistFormState { progress: ChecklistProgress; } -export type ChecklistStepMap = Record; - export const REVIEW_STEP_CODES: ReviewStepCode[] = ["LOCAL", "ENV", "KECO"]; +export const CHECKLIST_TAB_LABELS: Record = { + LOCAL: "자가체크", + ENV: "기술검토", + KECO: "환경청검토", +}; + export const REVIEW_STEP_LABELS: Record = { LOCAL: "지자체", ENV: "환경청", diff --git a/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx b/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx index b06bf2334..67c4aa9dc 100644 --- a/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx +++ b/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx @@ -180,7 +180,9 @@ function FloatingActionButtons({ userInfo?.userUnqId, ); const viewOnlyPwrkCnsltnDoc = - prgrsSttsComCd === "SL" || (prgrsSttsComCd === "RB" && dtlInstCd !== "ROLE_USER05"); + prgrsSttsComCd === "SL" || + (prgrsSttsComCd === "RB" && dtlInstCd !== "ROLE_USER05") || + (prgrsSttsComCd === "RK" && dtlInstCd === "ROLE_USER03"); const actionButtons = useMemo(() => { if (needsAtrzResolve && isRvwLoginUserLoading) return []; diff --git a/apps/as/src/pages/fnrs-cnsltn/ui/components/pwrk-cnsltn-doc-evl-dialog.tsx b/apps/as/src/pages/fnrs-cnsltn/ui/components/pwrk-cnsltn-doc-evl-dialog.tsx index 3696faf7c..eac7aa947 100644 --- a/apps/as/src/pages/fnrs-cnsltn/ui/components/pwrk-cnsltn-doc-evl-dialog.tsx +++ b/apps/as/src/pages/fnrs-cnsltn/ui/components/pwrk-cnsltn-doc-evl-dialog.tsx @@ -113,7 +113,8 @@ function PwrkCnsltnDocEvlDialog({ open, pwrkCnsltnDocNo, onClose }: PwrkCnsltnDo