summaryrefslogtreecommitdiff
path: root/lib/docu-list-rule/combo-box-settings
diff options
context:
space:
mode:
Diffstat (limited to 'lib/docu-list-rule/combo-box-settings')
-rw-r--r--lib/docu-list-rule/combo-box-settings/service.ts33
-rw-r--r--lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx23
2 files changed, 33 insertions, 23 deletions
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<CreateOptionSchema>({
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,
})
@@ -102,6 +104,19 @@ export function ComboBoxOptionsAddDialog({ codeGroupId, onSuccess }: ComboBoxOpt
<form onSubmit={form.handleSubmit(handleSubmit)} className="space-y-4">
<FormField
control={form.control}
+ name="code"
+ render={({ field }) => (
+ <FormItem>
+ <FormLabel>코드</FormLabel>
+ <FormControl>
+ <Input {...field} placeholder="옵션 코드" />
+ </FormControl>
+ <FormMessage />
+ </FormItem>
+ )}
+ />
+ <FormField
+ control={form.control}
name="description"
render={({ field }) => (
<FormItem>