summaryrefslogtreecommitdiff
path: root/db/schema/vendorDocu.ts
diff options
context:
space:
mode:
Diffstat (limited to 'db/schema/vendorDocu.ts')
-rw-r--r--db/schema/vendorDocu.ts48
1 files changed, 46 insertions, 2 deletions
diff --git a/db/schema/vendorDocu.ts b/db/schema/vendorDocu.ts
index 8c144f35..ebae7630 100644
--- a/db/schema/vendorDocu.ts
+++ b/db/schema/vendorDocu.ts
@@ -15,14 +15,47 @@ export const documents = pgTable(
contractId: integer("contract_id")
.notNull()
.references(() => contracts.id, { onDelete: "cascade" }),
+
+ // 기본 문서 정보
docNumber: varchar("doc_number", { length: 100 }).notNull(),
- // ✅ 벤더용 문서 번호 추가 (옵셔널)
vendorDocNumber: varchar("vendor_doc_number", { length: 100 }),
title: varchar("title", { length: 255 }).notNull(),
status: varchar("status", { length: 50 })
.notNull()
.default("ACTIVE"),
issuedDate: date("issued_date"),
+
+ // ✅ DOLCE 연동을 위한 새로운 필드들
+ drawingKind: varchar("drawing_kind", { length: 10 }), // B3, B4, B5
+ drawingMoveGbn: varchar("drawing_move_gbn", { length: 50 }), // 도면입수, 도면제출, GTT Deliverable, SHI Input Information
+ discipline: varchar("discipline", { length: 10 }), // DE, ME, etc.
+
+ // ✅ 외부 시스템 연동 정보
+ externalDocumentId: varchar("external_document_id", { length: 100 }), // DOLCE 시스템의 문서 ID
+ externalSystemType: varchar("external_system_type", { length: 20 }), // DOLCE, SWP
+ externalSyncedAt: timestamp("external_synced_at"), // 마지막 동기화 시간
+
+ // ✅ B4 전용 필드들 (drawingKind가 B4일 때만 사용)
+ cGbn: varchar("c_gbn", { length: 50 }), // CGbn
+ dGbn: varchar("d_gbn", { length: 50 }), // DGbn
+ degreeGbn: varchar("degree_gbn", { length: 50 }), // DegreeGbn
+ deptGbn: varchar("dept_gbn", { length: 50 }), // DeptGbn
+ jGbn: varchar("j_gbn", { length: 50 }), // JGbn
+ sGbn: varchar("s_gbn", { length: 50 }), // SGbn
+
+ // ✅ DOLCE 응답의 추가 정보들
+ shiDrawingNo: varchar("shi_drawing_no", { length: 100 }), // SHI 도면 번호
+ manager: varchar("manager", { length: 100 }), // 담당자
+ managerENM: varchar("manager_enm", { length: 100 }), // 담당자 영문명
+ managerNo: varchar("manager_no", { length: 50 }), // 담당자 번호
+ registerGroup: integer("register_group"), // 등록 그룹
+ registerGroupId: integer("register_group_id"), // 등록 그룹 ID
+
+ // ✅ 생성자 정보 (DOLCE에서 가져온 정보)
+ createUserNo: varchar("create_user_no", { length: 50 }), // 생성자 번호
+ createUserId: varchar("create_user_id", { length: 100 }), // 생성자 ID (한글명)
+ createUserENM: varchar("create_user_enm", { length: 100 }), // 생성자 영문명
+
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
},
@@ -33,14 +66,24 @@ export const documents = pgTable(
table.docNumber,
table.status
),
- // ✅ 벤더 문서 번호가 있는 경우 유니크 제약 조건 (옵셔널이므로 별도 인덱스)
uniqueContractVendorDoc: uniqueIndex("unique_contract_vendor_doc").on(
table.contractId,
table.vendorDocNumber
).where(sql`${table.vendorDocNumber} IS NOT NULL`),
+
+ // ✅ 외부 시스템 문서 ID 유니크 인덱스
+ uniqueExternalDoc: uniqueIndex("unique_external_doc").on(
+ table.contractId,
+ table.externalDocumentId,
+ table.externalSystemType
+ ).where(sql`${table.externalDocumentId} IS NOT NULL`),
+
+ // ✅ drawingKind 인덱스 (자주 검색될 것 같음)
+ drawingKindIndex: index("drawing_kind_idx").on(table.drawingKind),
}
}
)
+
// 확장된 issueStages 테이블
export const issueStages = pgTable(
"issue_stages",
@@ -115,6 +158,7 @@ export const revisions = pgTable(
reviewerId: integer("reviewer_id"),
reviewerName: varchar("reviewer_name", { length: 100 }),
reviewComments: varchar("review_comments", { length: 1000 }),
+ externalUploadId: varchar("external_upload_id", { length: 255 }),
comment: varchar("comment", { length: 500 }),
createdAt: timestamp("created_at").defaultNow().notNull(),