summaryrefslogtreecommitdiff
path: root/lib/vendor-data-plant/services.ts
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-04 16:28:49 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-04 16:28:49 +0900
commit153502b67da990c92973f1f8af416f9a81ec3abb (patch)
tree825d207df95a68113b084d8392c3cf208f6449f5 /lib/vendor-data-plant/services.ts
parent7bf90e71ee98abe2d65e18eaf20a449cd1bd097c (diff)
(김준회) 데이터입력(EDP): 조선/해양 프로젝트 목록 필터링해 구분
Diffstat (limited to 'lib/vendor-data-plant/services.ts')
-rw-r--r--lib/vendor-data-plant/services.ts114
1 files changed, 3 insertions, 111 deletions
diff --git a/lib/vendor-data-plant/services.ts b/lib/vendor-data-plant/services.ts
index e8ecd01c..51bd62ec 100644
--- a/lib/vendor-data-plant/services.ts
+++ b/lib/vendor-data-plant/services.ts
@@ -1,112 +1,4 @@
-"use server";
-
-import db from "@/db/db"
-import { items } from "@/db/schema/items"
-import { projects } from "@/db/schema/projects"
-import { eq } from "drizzle-orm"
-import { contractItems, contracts } from "@/db/schema/contract";
-import { getServerSession } from "next-auth";
-import { authOptions } from "@/app/api/auth/[...nextauth]/route";
-
-export interface ProjectWithContracts {
- projectId: number
- projectCode: string
- projectName: string
- projectType: string
-
- contracts: {
- contractId: number
- contractNo: string
- contractName: string
- packages: {
- itemId: number // contract_items.id
- itemName: string
- }[]
- }[]
-}
-
-export async function getVendorProjectsAndContracts(
- vendorId?: number
-): Promise<ProjectWithContracts[]> {
- // 세션에서 도메인 정보 가져오기
- const session = await getServerSession(authOptions)
-
- // EVCP 도메인일 때만 전체 조회
- const isEvcpDomain = session?.user?.domain === "evcp"
-
- const query = 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))
-
- if (!isEvcpDomain && vendorId) {
- query.where(eq(contracts.vendorId, vendorId))
- }
-
- const rows = await query
-
- 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 배열에 아이템 추가 (중복 체크)
- // itemName이 같은 항목이 이미 존재하는지 확인
- const existingItem = contractEntry.packages.find(
- (pkg) => pkg.itemName === row.itemName
- )
-
- // 같은 itemName이 없는 경우에만 추가
- if (!existingItem) {
- contractEntry.packages.push({
- itemId: row.itemId,
- itemName: row.itemName,
- })
- }
- }
-
- return Array.from(projectMap.values())
-}
+// vendor-data-plant/services.ts
+// vendor-data/services.ts의 통합 함수를 re-export
+export { getVendorProjectsAndContracts, type ProjectWithContracts } from "@/lib/vendor-data/services"