diff options
Diffstat (limited to 'lib/docu-list-rule/code-groups/service.ts')
| -rw-r--r-- | lib/docu-list-rule/code-groups/service.ts | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/lib/docu-list-rule/code-groups/service.ts b/lib/docu-list-rule/code-groups/service.ts index c99588a5..843bafa2 100644 --- a/lib/docu-list-rule/code-groups/service.ts +++ b/lib/docu-list-rule/code-groups/service.ts @@ -3,7 +3,8 @@ import { revalidatePath } from "next/cache" import db from "@/db/db" import { codeGroups, comboBoxSettings } from "@/db/schema/docu-list-rule" -import { eq, sql, count } from "drizzle-orm" +import { projects } from "@/db/schema/projects" +import { eq, sql, count, and } from "drizzle-orm" import { unstable_noStore } from "next/cache" // Code Groups 목록 조회 @@ -24,7 +25,8 @@ export async function getCodeGroups(input: any) { ${codeGroups.groupId} ILIKE ${searchTerm} OR ${codeGroups.description} ILIKE ${searchTerm} OR ${codeGroups.codeFormat} ILIKE ${searchTerm} OR - ${codeGroups.controlType} ILIKE ${searchTerm} + ${codeGroups.controlType} ILIKE ${searchTerm} OR + ${projects.code} ILIKE ${searchTerm} )` } @@ -68,14 +70,20 @@ export async function getCodeGroups(input: any) { if (input.sort && input.sort.length > 0) { const sortField = input.sort[0] // 안전성 체크: 필드가 실제 테이블에 존재하는지 확인 - if (sortField && sortField.id && typeof sortField.id === "string" && sortField.id in codeGroups) { + if (sortField && sortField.id && typeof sortField.id === "string") { const direction = sortField.desc ? sql`DESC` : sql`ASC` - const col = codeGroups[sortField.id as keyof typeof codeGroups] - orderBy = sql`${col} ${direction}` + + // 프로젝트 코드 정렬 처리 + if (sortField.id === "projectCode") { + orderBy = sql`${projects.code} ${direction}` + } else if (sortField.id in codeGroups) { + const col = codeGroups[sortField.id as keyof typeof codeGroups] + orderBy = sql`${col} ${direction}` + } } } - // 데이터 조회 + // 데이터 조회 (프로젝트 정보 포함) const data = await db .select({ id: codeGroups.id, @@ -87,38 +95,44 @@ export async function getCodeGroups(input: any) { isActive: codeGroups.isActive, createdAt: codeGroups.createdAt, updatedAt: codeGroups.updatedAt, + projectId: codeGroups.projectId, + projectCode: projects.code, + projectName: projects.name, }) .from(codeGroups) + .leftJoin(projects, eq(codeGroups.projectId, projects.id)) .where(whereConditions) .orderBy(orderBy) .limit(perPage) .offset(offset) - // 총 개수 조회 (Document Class 제외) - const [{ count: total }] = await db - .select({ count: count() }) + // 총 개수 조회 (프로젝트 정보 포함) + const totalCountResult = await db + .select({ count: sql<number>`count(*)` }) .from(codeGroups) + .leftJoin(projects, eq(codeGroups.projectId, projects.id)) .where(whereConditions) - const pageCount = Math.ceil(total / perPage) + const totalCount = totalCountResult[0]?.count || 0 return { data, - pageCount, - total, + totalCount, + pageCount: Math.ceil(totalCount / perPage), } } catch (error) { console.error("Error fetching code groups:", error) return { data: [], + totalCount: 0, pageCount: 0, - total: 0, } } } // Code Group 생성 export async function createCodeGroup(input: { + projectId: number // projectCode를 projectId로 변경 description: string codeFormat?: string expressions?: string @@ -126,11 +140,14 @@ export async function createCodeGroup(input: { isActive?: boolean }) { try { - // 마지막 Code Group의 groupId를 찾아서 다음 번호 생성 (DOC_CLASS 제외) + // 해당 프로젝트의 마지막 Code Group의 groupId를 찾아서 다음 번호 생성 (DOC_CLASS 제외) const lastCodeGroup = await db .select({ groupId: codeGroups.groupId }) .from(codeGroups) - .where(sql`${codeGroups.groupId} != 'DOC_CLASS'`) + .where(and( + eq(codeGroups.projectId, input.projectId), // projectId로 변경 + sql`${codeGroups.groupId} != 'DOC_CLASS'` + )) .orderBy(sql`CAST(SUBSTRING(${codeGroups.groupId}, 6) AS INTEGER) DESC`) .limit(1) @@ -148,6 +165,7 @@ export async function createCodeGroup(input: { const [newCodeGroup] = await db .insert(codeGroups) .values({ + projectId: input.projectId, // projectId로 변경 groupId: newGroupId, description: input.description, codeFormat: input.codeFormat, |
