summaryrefslogtreecommitdiff
path: root/lib/docu-list-rule/code-groups/service.ts
diff options
context:
space:
mode:
author0-Zz-ang <s1998319@gmail.com>2025-08-07 18:02:54 +0900
committer0-Zz-ang <s1998319@gmail.com>2025-08-07 18:02:54 +0900
commit67bb1ad7d7e001e19c8d1dd9153a5f663e2afa03 (patch)
tree9aab25663d6c180fd3a315840a3035b491ac0b7d /lib/docu-list-rule/code-groups/service.ts
parente270e477f362dd68249bb4a013c66eab293bba82 (diff)
(박서영)docu-list-rule Project_code적용
Diffstat (limited to 'lib/docu-list-rule/code-groups/service.ts')
-rw-r--r--lib/docu-list-rule/code-groups/service.ts48
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,