From 10f90dc68dec42e9a64e081cc0dce6a484447290 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 29 Jul 2025 11:48:59 +0000 Subject: (대표님, 박서영, 최겸) document-list-only, gtc, vendorDocu, docu-list-rule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/docu-list-rule/combo-box-settings/service.ts | 33 +++++++++------------- .../table/combo-box-options-add-dialog.tsx | 23 ++++++++++++--- 2 files changed, 33 insertions(+), 23 deletions(-) (limited to 'lib/docu-list-rule') diff --git a/lib/docu-list-rule/combo-box-settings/service.ts b/lib/docu-list-rule/combo-box-settings/service.ts index 70046828..2c5ee42b 100644 --- a/lib/docu-list-rule/combo-box-settings/service.ts +++ b/lib/docu-list-rule/combo-box-settings/service.ts @@ -229,39 +229,34 @@ export async function createComboBoxOption(input: { } } - const codeGroupDescription = codeGroup[0].description - - // 해당 Code Group의 마지막 옵션 번호 찾기 - const lastOption = await db - .select({ code: comboBoxSettings.code }) + // 코드 중복 체크 + const existingOption = await db + .select({ id: comboBoxSettings.id }) .from(comboBoxSettings) - .where(eq(comboBoxSettings.codeGroupId, input.codeGroupId)) - .orderBy(sql`CAST(SUBSTRING(${comboBoxSettings.code} FROM ${codeGroupDescription.length + 2}) AS INTEGER) DESC`) + .where( + sql`${comboBoxSettings.codeGroupId} = ${input.codeGroupId} AND ${comboBoxSettings.code} = ${input.code}` + ) .limit(1) - let nextNumber = 1 - if (lastOption.length > 0 && lastOption[0].code) { - const prefix = `${codeGroupDescription}_` - if (lastOption[0].code.startsWith(prefix)) { - const lastNumber = parseInt(lastOption[0].code.replace(prefix, '')) - if (!isNaN(lastNumber)) { - nextNumber = lastNumber + 1 - } + if (existingOption.length > 0) { + return { + success: false, + error: "이미 존재하는 코드입니다." } } - const newCode = `${codeGroupDescription}_${nextNumber}` - const [newOption] = await db .insert(comboBoxSettings) .values({ codeGroupId: input.codeGroupId, - code: newCode, - description: input.description, + code: input.code, + description: input.description || "-", remark: input.remark, }) .returning({ id: comboBoxSettings.id }) + + revalidatePath("/evcp/docu-list-rule/combo-box-settings") return { diff --git a/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx b/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx index 1fb8950c..a5a8af2f 100644 --- a/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx +++ b/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx @@ -30,7 +30,8 @@ import { Input } from "@/components/ui/input" import { createComboBoxOption } from "../service" const createOptionSchema = z.object({ - description: z.string().min(1, "값은 필수입니다."), + code: z.string().min(1, "코드는 필수입니다."), + description: z.string().default("-"), remark: z.string().optional(), }) @@ -48,7 +49,8 @@ export function ComboBoxOptionsAddDialog({ codeGroupId, onSuccess }: ComboBoxOpt const form = useForm({ resolver: zodResolver(createOptionSchema), defaultValues: { - description: "", + code: "", + description: "-", remark: "", }, }) @@ -58,8 +60,8 @@ export function ComboBoxOptionsAddDialog({ codeGroupId, onSuccess }: ComboBoxOpt try { const result = await createComboBoxOption({ codeGroupId, - code: "", // 서비스에서 자동 생성 - description: data.description, + code: data.code, + description: data.description || "-", remark: data.remark, }) @@ -100,6 +102,19 @@ export function ComboBoxOptionsAddDialog({ codeGroupId, onSuccess }: ComboBoxOpt
+ ( + + 코드 + + + + + + )} + />