summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-10-15 12:52:11 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-10-15 12:52:11 +0000
commitb54f6f03150dd78d86db62201b6386bf14b72394 (patch)
treeb3092bb34805fdc65eee5282e86a9fb90ba20d6e /db
parentc1bd1a2f499ee2f0742170021b37dab410983ab7 (diff)
(대표님) 커버, 데이터룸, 파일매니저, 담당자할당 등
Diffstat (limited to 'db')
-rw-r--r--db/schema/companies.ts10
-rw-r--r--db/schema/users.ts15
-rw-r--r--db/schema/vendorDocu.ts52
3 files changed, 70 insertions, 7 deletions
diff --git a/db/schema/companies.ts b/db/schema/companies.ts
index 60f8a0ce..b24acef0 100644
--- a/db/schema/companies.ts
+++ b/db/schema/companies.ts
@@ -11,3 +11,13 @@ export const companies = pgTable("companies", {
});
export type Company = typeof companies.$inferSelect
+
+export const ownerCompanies = pgTable("owner_companies", {
+ id: integer("id").primaryKey().generatedAlwaysAsIdentity(),
+ name: varchar("name", { length: 255 }).notNull(),
+ createdAt: timestamp("created_at", { withTimezone: true })
+ .defaultNow()
+ .notNull(),
+});
+
+export type OwnerCompany = typeof ownerCompanies.$inferSelect
diff --git a/db/schema/users.ts b/db/schema/users.ts
index 1d963228..278bc7ab 100644
--- a/db/schema/users.ts
+++ b/db/schema/users.ts
@@ -5,6 +5,7 @@ import {
import { eq, sql } from "drizzle-orm";
import { vendors } from "./vendors";
import { techVendors } from "./techVendors";
+import { ownerCompanies } from "./companies";
export const userDomainEnum = pgEnum("user_domain", ["pending", "evcp", "procurement", "sales", "engineering", "partners"]);
@@ -17,6 +18,8 @@ export const users = pgTable("users", {
deptCode: varchar("deptCode", { length: 50 }),
deptName: varchar("deptName", { length: 255 }),
+ ownerCompanyId: integer("owner_company_id")
+ .references(() => ownerCompanies.id, { onDelete: "set null" }),
companyId: integer("company_id")
.references(() => vendors.id, { onDelete: "set null" }),
techCompanyId: integer("tech_company_id")
@@ -49,12 +52,12 @@ export const users = pgTable("users", {
deactivatedAt: timestamp("deactivated_at", { withTimezone: true }),
deactivationReason: varchar("deactivation_reason", { length: 50 }), // 'INACTIVE', 'ADMIN', 'GDPR' 등
- // ✨ 새로 추가: 동의 관련 필드들
- lastConsentUpdate: timestamp("last_consent_update", { withTimezone: true }),
- consentVersion: varchar("consent_version", { length: 20 }), // 마지막 동의한 정책 버전
- requiresConsentUpdate: boolean("requires_consent_update").default(false).notNull(),
-
- // ✨ 새로 추가: 회원가입 관련
+ // ✨ 새로 추가: 동의 관련 필드들
+ lastConsentUpdate: timestamp("last_consent_update", { withTimezone: true }),
+ consentVersion: varchar("consent_version", { length: 20 }), // 마지막 동의한 정책 버전
+ requiresConsentUpdate: boolean("requires_consent_update").default(false).notNull(),
+
+ // ✨ 새로 추가: 회원가입 관련
// emailVerified: boolean("email_verified").default(false).notNull(),
// emailVerifiedAt: timestamp("email_verified_at", { withTimezone: true }),
// registrationCompleted: boolean("registration_completed").default(false).notNull(),
diff --git a/db/schema/vendorDocu.ts b/db/schema/vendorDocu.ts
index 812206c8..b7cef5e5 100644
--- a/db/schema/vendorDocu.ts
+++ b/db/schema/vendorDocu.ts
@@ -2086,4 +2086,54 @@ export const stageSubmissionView = pgView("stage_submission_view", {
ORDER BY ed.document_id, ist.stage_order
`);
-export type StageSubmissionView = typeof stageSubmissionView.$inferSelect \ No newline at end of file
+export type StageSubmissionView = typeof stageSubmissionView.$inferSelect
+
+// 프로젝트 커버 페이지 템플릿
+export const projectCoverTemplates = pgTable(
+ "project_cover_templates",
+ {
+ id: integer("id").primaryKey().generatedAlwaysAsIdentity(),
+ projectId: integer("project_id")
+ .notNull()
+ .references(() => projects.id, { onDelete: "cascade" }),
+
+ // 템플릿 파일 정보
+ templateName: varchar("template_name", { length: 255 }).notNull(),
+ originalFileName: varchar("original_file_name", { length: 255 }).notNull(),
+ filePath: varchar("file_path", { length: 1024 }).notNull(), // S3 또는 로컬 경로
+ fileSize: integer("file_size"),
+
+ // 템플릿 변수 설정 (JSON으로 저장)
+ variables: jsonb("variables"), // {docNumber: "{{docNumber}}", customVar1: "{{customVar1}}"} 형태
+
+ // 메타데이터
+ isActive: boolean("is_active").default(true), // 여러 템플릿 중 활성화된 것
+ createdBy: varchar("created_by", { length: 255 }),
+ updatedBy: varchar("updated_by", { length: 255 }),
+
+ createdAt: timestamp("created_at").defaultNow().notNull(),
+ updatedAt: timestamp("updated_at").defaultNow().notNull(),
+ }
+)
+
+// 생성된 커버 페이지 (실제 사용 시 생성되는 문서)
+export const generatedCoverPages = pgTable(
+ "generated_cover_pages",
+ {
+ id: integer("id").primaryKey().generatedAlwaysAsIdentity(),
+ templateId: integer("template_id")
+ .notNull()
+ .references(() => projectCoverTemplates.id, { onDelete: "cascade" }),
+
+ // 변수 값 (실제 입력된 값들)
+ variableValues: jsonb("variable_values"), // {docNumber: "DOC-2024-001", customVar1: "value"}
+
+ // 생성된 파일
+ fileName: varchar("file_name", { length: 255 }).notNull(),
+ filePath: varchar("file_path", { length: 1024 }).notNull(),
+ fileSize: integer("file_size"),
+
+ generatedBy: varchar("generated_by", { length: 255 }),
+ generatedAt: timestamp("generated_at").defaultNow().notNull(),
+ }
+)