From c657ef972feeafff16ab0e07cb4771f7dd141ba0 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Thu, 10 Jul 2025 09:55:45 +0000 Subject: (대표님) 20250710 작업사항 - 평가 첨부, 로그인, SEDP 변경 요구사항 반영 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/vendor-data/services copy.ts | 99 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 lib/vendor-data/services copy.ts (limited to 'lib/vendor-data/services copy.ts') diff --git a/lib/vendor-data/services copy.ts b/lib/vendor-data/services copy.ts new file mode 100644 index 00000000..7f0c47c1 --- /dev/null +++ b/lib/vendor-data/services copy.ts @@ -0,0 +1,99 @@ +"use server"; + +import db from "@/db/db" +import { items } from "@/db/schema/items" +import { projects } from "@/db/schema/projects" +import { Tag, tags } from "@/db/schema/vendorData" +import { eq } from "drizzle-orm" +import { revalidateTag, unstable_noStore } from "next/cache"; +import { unstable_cache } from "@/lib/unstable-cache"; +import { contractItems, contracts } from "@/db/schema/contract"; + +// 스키마 import + +export interface ProjectWithContracts { + projectId: number + projectCode: string + projectName: string + projectType: string + + contracts: { + contractId: number + contractNo: string + contractName: string + // contractName 등 필요한 필드 추가 + packages: { + itemId: number + itemName: string + }[] + }[] +} + + +export async function getVendorProjectsAndContracts( + vendorId: number +): Promise { + const rows = await db + .select({ + projectId: projects.id, + projectCode: projects.code, + projectName: projects.name, + projectType: projects.type, + + contractId: contracts.id, + contractNo: contracts.contractNo, + contractName: contracts.contractName, + + itemId: contractItems.id, + itemName: items.itemName, + }) + .from(contracts) + .innerJoin(projects, eq(contracts.projectId, projects.id)) + .innerJoin(contractItems, eq(contractItems.contractId, contracts.id)) + .innerJoin(items, eq(contractItems.itemId, items.id)) + .where(eq(contracts.vendorId, vendorId)) + + const projectMap = new Map() + + for (const row of rows) { + // 1) 프로젝트 그룹 찾기 + let projectEntry = projectMap.get(row.projectId) + if (!projectEntry) { + // 새 프로젝트 항목 생성 + projectEntry = { + projectId: row.projectId, + projectCode: row.projectCode, + projectName: row.projectName, + projectType: row.projectType, + contracts: [], + } + projectMap.set(row.projectId, projectEntry) + } + + // 2) 프로젝트 안에서 계약(contractId) 찾기 + let contractEntry = projectEntry.contracts.find( + (c) => c.contractId === row.contractId + ) + if (!contractEntry) { + // 새 계약 항목 + contractEntry = { + contractId: row.contractId, + contractNo: row.contractNo, + contractName: row.contractName, + packages: [], + } + projectEntry.contracts.push(contractEntry) + } + + // 3) 계약의 packages 배열에 아이템 추가 + contractEntry.packages.push({ + itemId: row.itemId, + itemName: row.itemName, + }) + } + + return Array.from(projectMap.values()) +} + + +// 1) 태그 조회 -- cgit v1.2.3