From 519d01ed0a2e40c353d0afcccd4b7a83483f7eaf Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Wed, 12 Nov 2025 18:58:10 +0900 Subject: (김준회) Document Numbering Rule(해양): DOC_CLASS 1글자로 제한 (SWP측 제약), DOC_CLASS에서 코드 컬럼 제거 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/schema/docu-list-rule.ts | 12 ++------ lib/docu-list-rule/document-class/service.ts | 8 ++--- .../table/document-class-add-dialog.tsx | 2 +- .../table/document-class-edit-sheet.tsx | 23 +++++++++++--- .../table/document-class-table-columns.tsx | 35 ++++++++++++++-------- .../document-class/table/document-class-table.tsx | 7 ++--- 6 files changed, 50 insertions(+), 37 deletions(-) diff --git a/db/schema/docu-list-rule.ts b/db/schema/docu-list-rule.ts index 62a770b4..0d1f668a 100644 --- a/db/schema/docu-list-rule.ts +++ b/db/schema/docu-list-rule.ts @@ -28,21 +28,15 @@ export const codeGroups = pgTable("code_groups", { export const documentClasses = pgTable("document_classes", { id: serial("id").primaryKey(), projectId: integer("project_id").notNull().references(() => projects.id), // 프로젝트 ID 참조 - code: varchar("code", { length: 50 }).notNull(), // CODE (자동 생성) - value: varchar("value", { length: 100 }), // 사용자가 선택할 수 있는 값 - description: varchar("description", { length: 200 }).notNull(), // 값의 의미 설명 + value: varchar("value", { length: 1 }).notNull(), // Document Class 값 (A-Z, 0-9 중 1자리) + description: varchar("description", { length: 200 }), // 값의 설명 (선택사항) codeGroupId: integer("code_group_id").references(() => codeGroups.id), // 참조하는 Code Group ID isActive: boolean("is_active").default(true), createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(), updatedAt: timestamp("updated_at", { withTimezone: true }).defaultNow().notNull(), }, (table) => { return { - // 같은 프로젝트 내에서 code는 유니크해야 함 - uniqueProjectCode: unique("unique_project_code").on( - table.projectId, - table.code - ), - // 같은 프로젝트 내에서 value는 유니크해야 함 (null 제외) + // 같은 프로젝트 내에서 value는 유니크해야 함 uniqueProjectValue: unique("unique_project_value").on( table.projectId, table.value diff --git a/lib/docu-list-rule/document-class/service.ts b/lib/docu-list-rule/document-class/service.ts index 9d3ff23a..0dc4a4f4 100644 --- a/lib/docu-list-rule/document-class/service.ts +++ b/lib/docu-list-rule/document-class/service.ts @@ -4,7 +4,7 @@ import { revalidatePath } from "next/cache" import db from "@/db/db" import { documentClasses, documentClassOptions, codeGroups } from "@/db/schema/docu-list-rule" import { projects } from "@/db/schema/projects" -import { eq, desc, sql, and } from "drizzle-orm" +import { eq, sql, and } from "drizzle-orm" // Document Class 목록 조회 (A Class, B Class 등) export async function getDocumentClassCodeGroups(input: { @@ -36,7 +36,6 @@ export async function getDocumentClassCodeGroups(input: { if (search) { const searchTerm = `%${search}%` whereConditions = sql`${whereConditions} AND ( - ${documentClasses.code} ILIKE ${searchTerm} OR ${documentClasses.value} ILIKE ${searchTerm} OR ${documentClasses.description} ILIKE ${searchTerm} OR ${projects.code} ILIKE ${searchTerm} @@ -50,8 +49,6 @@ export async function getDocumentClassCodeGroups(input: { if (!value) return null switch (id) { - case "code": - return sql`${documentClasses.code} ILIKE ${`%${value}%`}` case "value": return sql`${documentClasses.value} ILIKE ${`%${value}%`}` case "description": @@ -79,7 +76,7 @@ export async function getDocumentClassCodeGroups(input: { } // 정렬 (안전한 필드 체크 적용) - let orderBy = sql`${documentClasses.code} ASC` + let orderBy = sql`${documentClasses.value} ASC` if (sort && sort.length > 0) { const sortField = sort[0] // 안전성 체크: 필드가 실제 테이블에 존재하는지 확인 @@ -100,7 +97,6 @@ export async function getDocumentClassCodeGroups(input: { const data = await db .select({ id: documentClasses.id, - code: documentClasses.code, value: documentClasses.value, description: documentClasses.description, isActive: documentClasses.isActive, diff --git a/lib/docu-list-rule/document-class/table/document-class-add-dialog.tsx b/lib/docu-list-rule/document-class/table/document-class-add-dialog.tsx index 6e8ac686..471f2089 100644 --- a/lib/docu-list-rule/document-class/table/document-class-add-dialog.tsx +++ b/lib/docu-list-rule/document-class/table/document-class-add-dialog.tsx @@ -129,7 +129,7 @@ export function DocumentClassAddDialog({ />