diff options
Diffstat (limited to 'lib/vendor-document-list/enhanced-document-service.ts')
| -rw-r--r-- | lib/vendor-document-list/enhanced-document-service.ts | 52 |
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) => { |
