diff options
| author | joonhoekim <26rote@gmail.com> | 2025-09-08 12:17:54 +0000 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-09-08 12:17:54 +0000 |
| commit | 57d92a7e290490fdb8126fe8a7376a57dcfdcb40 (patch) | |
| tree | 957c9e9bc3e1b8af7e3c907c364231cd0fff3125 /lib/gtc-contract | |
| parent | ea97747736daa94a71835f79d1d9983c82f4c1c1 (diff) | |
(김준회) evcp/gtc 필터 및 정렬 오류 수정
Diffstat (limited to 'lib/gtc-contract')
| -rw-r--r-- | lib/gtc-contract/service.ts | 28 | ||||
| -rw-r--r-- | lib/gtc-contract/status/gtc-documents-table-columns.tsx | 14 |
2 files changed, 30 insertions, 12 deletions
diff --git a/lib/gtc-contract/service.ts b/lib/gtc-contract/service.ts index 0d21f7aa..c8417901 100644 --- a/lib/gtc-contract/service.ts +++ b/lib/gtc-contract/service.ts @@ -32,7 +32,7 @@ export async function checkProjectExists(projectId: number): Promise<boolean> { async function countGtcDocuments(tx: any, where: any) { const result = await tx .select({ count: count() }) - .from(gtcDocuments) + .from(gtcDocumentsView) .where(where) return result[0]?.count ?? 0 @@ -48,10 +48,17 @@ export async function getGtcDocuments(input: GetGtcDocumentsSchema) { const offset = (input.page - 1) * input.perPage // (1) advancedWhere - 고급 필터 + const customColumnMapping = { + "project.name": { table: gtcDocumentsView, column: "projectName" }, + "createdBy.name": { table: gtcDocumentsView, column: "createdByName" }, + "updatedBy.name": { table: gtcDocumentsView, column: "updatedByName" }, + } + const advancedWhere = filterColumns({ table: gtcDocumentsView, filters: input.filters, joinOperator: input.joinOperator, + customColumnMapping, }) // (2) globalWhere - 전역 검색 @@ -60,14 +67,15 @@ export async function getGtcDocuments(input: GetGtcDocumentsSchema) { const s = `%${input.search}%` globalWhere = or( ilike(gtcDocumentsView.editReason, s), - ilike(projects.name, s), - ilike(projects.code, s) + ilike(gtcDocumentsView.projectName, s), + ilike(gtcDocumentsView.projectCode, s) ) } // (4) 최종 where 조건 const finalWhere = and( + eq(gtcDocumentsView.isActive, true), // 활성 상태인 문서만 조회 advancedWhere, globalWhere, ) @@ -76,14 +84,24 @@ export async function getGtcDocuments(input: GetGtcDocumentsSchema) { const orderBy = input.sort.length > 0 ? input.sort.map((item) => { - const column = gtcDocumentsView[item.id as keyof typeof gtcDocumentsView] + // 중첩 필드 매핑 처리 + let column: any + if (item.id === 'project.name' || item.id === 'projectName') { + column = gtcDocumentsView.projectName + } else if (item.id === 'createdBy.name' || item.id === 'createdByName') { + column = gtcDocumentsView.createdByName + } else if (item.id === 'updatedBy.name' || item.id === 'updatedByName') { + column = gtcDocumentsView.updatedByName + } else { + column = (gtcDocumentsView as any)[item.id] + } return item.desc ? desc(column) : asc(column) }) : [desc(gtcDocumentsView.updatedAt)] // (6) 데이터 조회 const { data, total } = await db.transaction(async (tx) => { - const data =await db + const data = await db .select() .from(gtcDocumentsView) .where(finalWhere) diff --git a/lib/gtc-contract/status/gtc-documents-table-columns.tsx b/lib/gtc-contract/status/gtc-documents-table-columns.tsx index 6fce9b66..e3f7c98a 100644 --- a/lib/gtc-contract/status/gtc-documents-table-columns.tsx +++ b/lib/gtc-contract/status/gtc-documents-table-columns.tsx @@ -72,7 +72,7 @@ export function getColumns({ setRowAction, router }: GetColumnsProps): ColumnDef meta: { excelHeader: "구분" }, }, { - accessorKey: "project", + accessorKey: "projectName", header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="프로젝트" />, cell: ({ row }) => { const projectName = row.original.projectName @@ -131,11 +131,11 @@ export function getColumns({ setRowAction, router }: GetColumnsProps): ColumnDef meta: { excelHeader: "최초등록일" }, }, { - accessorKey: "createdBy", + accessorKey: "createdByName", header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="최초등록자" />, cell: ({ row }) => { - const createdBy = row.original.createdBy - return createdBy ? <span className="text-sm">{createdBy.name}</span> : <span className="text-muted-foreground">-</span> + const createdByName = row.original.createdByName + return createdByName ? <span className="text-sm">{createdByName}</span> : <span className="text-muted-foreground">-</span> }, size: 120, enableResizing: true, @@ -153,11 +153,11 @@ export function getColumns({ setRowAction, router }: GetColumnsProps): ColumnDef meta: { excelHeader: "최종수정일" }, }, { - accessorKey: "updatedBy", + accessorKey: "updatedByName", header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="최종수정자" />, cell: ({ row }) => { - const updatedBy = row.original.updatedBy - return updatedBy ? <span className="text-sm">{updatedBy.name}</span> : <span className="text-muted-foreground">-</span> + const updatedByName = row.original.updatedByName + return updatedByName ? <span className="text-sm">{updatedByName}</span> : <span className="text-muted-foreground">-</span> }, size: 120, enableResizing: true, |
