summaryrefslogtreecommitdiff
path: root/lib/vendor-document-list/enhanced-document-service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vendor-document-list/enhanced-document-service.ts')
-rw-r--r--lib/vendor-document-list/enhanced-document-service.ts52
1 files changed, 21 insertions, 31 deletions
diff --git a/lib/vendor-document-list/enhanced-document-service.ts b/lib/vendor-document-list/enhanced-document-service.ts
index d2cec15d..05ace8d5 100644
--- a/lib/vendor-document-list/enhanced-document-service.ts
+++ b/lib/vendor-document-list/enhanced-document-service.ts
@@ -4,7 +4,7 @@
import { revalidatePath, unstable_cache } from "next/cache"
import { and, asc, desc, eq, ilike, or, count, avg, inArray, sql } from "drizzle-orm"
import db from "@/db/db"
-import { documentAttachments, documentStagesOnlyView, documents, enhancedDocumentsView, issueStages, revisions, simplifiedDocumentsView, type EnhancedDocumentsView } from "@/db/schema/vendorDocu"
+import { StageDocumentsView, documentAttachments, documentStagesOnlyView, documents, enhancedDocumentsView, issueStages, revisions, simplifiedDocumentsView, type EnhancedDocumentsView } from "@/db/schema/vendorDocu"
import { filterColumns } from "@/lib/filter-columns"
import type {
CreateDocumentInput,
@@ -42,6 +42,22 @@ export interface GetEnhancedDocumentsSchema {
}>
}
+export interface GetDocumentsSchema {
+ page: number
+ perPage: number
+ search?: string
+ filters?: Array<{
+ id: string
+ value: string | string[]
+ operator?: "eq" | "ne" | "like" | "ilike" | "in" | "notin" | "lt" | "lte" | "gt" | "gte"
+ }>
+ joinOperator?: "and" | "or"
+ sort?: Array<{
+ id: keyof StageDocumentsView
+ desc: boolean
+ }>
+}
+
// Repository 함수들
export async function selectEnhancedDocuments(
tx: any,
@@ -1024,19 +1040,7 @@ export async function getDocumentDetails(documentId: number) {
if (!companyId) {
return { data: [], pageCount: 0, total: 0, drawingKind: null, vendorInfo: null }
}
-
- // 2. 해당 벤더의 모든 계약 ID들 조회
- const vendorContracts = await db
- .select({ projectId: contracts.projectId, contractId:contracts.id })
- .from(contracts)
- .where(eq(contracts.vendorId, companyId))
-
- const contractIds = vendorContracts.map(c => c.contractId)
-
- if (contractIds.length === 0) {
- return { data: [], pageCount: 0, total: 0, drawingKind: null, vendorInfo: null }
- }
-
+
// 3. 고급 필터 처리
const advancedWhere = filterColumns({
table: simplifiedDocumentsView,
@@ -1057,7 +1061,7 @@ export async function getDocumentDetails(documentId: number) {
// 5. 최종 WHERE 조건 (계약 ID들로 필터링)
const finalWhere = and(
- inArray(simplifiedDocumentsView.contractId, contractIds),
+ eq(simplifiedDocumentsView.vendorId, Number(companyId)),
advancedWhere,
globalWhere,
)
@@ -1133,32 +1137,18 @@ export async function getDocumentDetails(documentId: number) {
}
const companyId = session?.user?.companyId;
-
if (!companyId) {
return { stats: {}, totalDocuments: 0, primaryDrawingKind: null }
}
-
- // 해당 벤더의 계약 ID들 조회
- const vendorContracts = await db
- .select({ id: contracts.id })
- .from(contracts)
- .where(eq(contracts.vendorId, companyId))
-
- const contractIds = vendorContracts.map(c => c.id)
-
- if (contractIds.length === 0) {
- return { stats: {}, totalDocuments: 0, primaryDrawingKind: null }
- }
-
+
// DrawingKind별 통계 조회
const documents = await db
.select({
drawingKind: simplifiedDocumentsView.drawingKind,
- contractId: simplifiedDocumentsView.contractId,
})
.from(simplifiedDocumentsView)
- .where(inArray(simplifiedDocumentsView.contractId, contractIds))
+ .where(eq(simplifiedDocumentsView.vendorId, Number(companyId)))
// 통계 계산
const stats = documents.reduce((acc, doc) => {