summaryrefslogtreecommitdiff
path: root/lib/gtc-contract
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gtc-contract')
-rw-r--r--lib/gtc-contract/service.ts28
-rw-r--r--lib/gtc-contract/status/gtc-documents-table-columns.tsx14
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,