summaryrefslogtreecommitdiff
path: root/lib/vendor-data/services copy.ts
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-07-10 09:55:45 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-07-10 09:55:45 +0000
commitc657ef972feeafff16ab0e07cb4771f7dd141ba0 (patch)
treebefabd884b00d3cc632c628b3e3810f61cc9f38d /lib/vendor-data/services copy.ts
parentb8a03c9d130435a71c5d6217d06ccb0beb9697e5 (diff)
(대표님) 20250710 작업사항 - 평가 첨부, 로그인, SEDP 변경 요구사항 반영
Diffstat (limited to 'lib/vendor-data/services copy.ts')
-rw-r--r--lib/vendor-data/services copy.ts99
1 files changed, 99 insertions, 0 deletions
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<ProjectWithContracts[]> {
+ 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<number, ProjectWithContracts>()
+
+ 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) 태그 조회