From d474af56883ce9e14909e98ffb8fd317b74b862f Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 19 Feb 2026 10:50:04 +0900 Subject: [PATCH] =?UTF-8?q?[st]=20feat:=20=EA=B2=80=EC=A6=9D=20=ED=95=AD?= =?UTF-8?q?=EB=AA=A9=20=EC=83=81=EC=84=B8=20=ED=8F=BC=20=EC=9C=A0=ED=9A=A8?= =?UTF-8?q?=EC=84=B1=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../verification/VerificationTargetDialog.tsx | 103 ++++++++---------- .../verification-target-management-schema.ts | 29 ++++- 2 files changed, 71 insertions(+), 61 deletions(-) diff --git a/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx b/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx index 29e1607d3..09b091748 100644 --- a/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx +++ b/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx @@ -100,11 +100,6 @@ export function VerificationTargetDialog({ } placeholder="선택" /> - {errors.statsCd && ( -

- {errors.statsCd.message} -

- )} )} /> @@ -147,11 +142,6 @@ export function VerificationTargetDialog({ {...field} placeholder="스키마명" /> - {errors.schmNm && ( -

- {errors.schmNm.message} -

- )} )} /> @@ -172,11 +162,6 @@ export function VerificationTargetDialog({ {...field} placeholder="테이블명" /> - {errors.tblNm && ( -

- {errors.tblNm.message} -

- )} )} /> @@ -200,11 +185,6 @@ export function VerificationTargetDialog({ {...field} placeholder="컬럼명" /> - {errors.colNm && ( -

- {errors.colNm.message} -

- )} )} /> @@ -225,11 +205,6 @@ export function VerificationTargetDialog({ {...field} placeholder="PK 키" /> - {errors.pkColNm && ( -

- {errors.pkColNm.message} -

- )} )} /> @@ -248,6 +223,8 @@ export function VerificationTargetDialog({
@@ -260,7 +237,7 @@ export function VerificationTargetDialog({ : null, ) } - placeholder="(0 ~ 1)" + placeholder="(0 ~ 1, 0.1 단위)" />
)} @@ -277,6 +254,8 @@ export function VerificationTargetDialog({
@@ -289,7 +268,7 @@ export function VerificationTargetDialog({ : null, ) } - placeholder="(0 ~ 0.5)" + placeholder="(0 ~ 0.5, 0.1 단위)" />
)} @@ -306,21 +285,26 @@ export function VerificationTargetDialog({ name="scopCntCntVl" control={control} render={({ field }) => ( - - field.onChange( - e.target.value - ? Number( - e.target - .value, - ) - : null, - ) - } - /> +
+ + field.onChange( + e.target.value + ? Number( + e.target + .value, + ) + : null, + ) + } + placeholder="(0 ~ 1, 0.01 단위)" + /> +
)} /> @@ -332,21 +316,26 @@ export function VerificationTargetDialog({ name="thrsCntVl" control={control} render={({ field }) => ( - - field.onChange( - e.target.value - ? Number( - e.target - .value, - ) - : null, - ) - } - /> +
+ + field.onChange( + e.target.value + ? Number( + e.target + .value, + ) + : null, + ) + } + placeholder="(0 ~ 100, 1 단위)" + /> +
)} /> diff --git a/apps/st/src/entities/statistics/model/verification-target-management-schema.ts b/apps/st/src/entities/statistics/model/verification-target-management-schema.ts index 821e860f8..976c5b397 100644 --- a/apps/st/src/entities/statistics/model/verification-target-management-schema.ts +++ b/apps/st/src/entities/statistics/model/verification-target-management-schema.ts @@ -10,10 +10,31 @@ export const verificationTargetManagementSchema = z.object({ tblNm: z.string().min(1, "테이블명을 입력해주세요"), colNm: z.string().min(1, "컬럼명을 입력해주세요"), pkColNm: z.string().min(1, "PK 키를 입력해주세요"), - ipcrCntVl: z.number().optional().nullable(), - pctlCrtrVl: z.number().optional().nullable(), - scopCntCntVl: z.number().optional().nullable(), - thrsCntVl: z.number().optional().nullable(), + ipcrCntVl: z + .number() + .min(0, "중요도 계수는 0 이상이어야 합니다") + .max(1, "중요도 계수는 1 이하여야 합니다") + .nullable() + .optional(), + pctlCrtrVl: z + .number() + .min(0, "백분위수 기준값은 0 이상이어야 합니다") + .max(0.5, "백분위수 기준값은 0.5 이하여야 합니다") + .nullable() + .optional(), + scopCntCntVl: z + .number() + .min(0, "스케일 조정 계수는 0 이상이어야 합니다") + .max(1, "스케일 조정 계수는 1 이하여야 합니다") + .nullable() + .optional(), + thrsCntVl: z + .number() + .int("임계 계수는 정수여야 합니다") + .min(0, "임계 계수는 0 이상이어야 합니다") + .max(100, "임계 계수는 100 이하여야 합니다") + .nullable() + .optional(), useYn: z.string().optional(), vrfcTrgtNm: z.string().optional().nullable(), rgtr: z.string().optional().nullable(),