diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-15 12:52:11 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-15 12:52:11 +0000 |
| commit | b54f6f03150dd78d86db62201b6386bf14b72394 (patch) | |
| tree | b3092bb34805fdc65eee5282e86a9fb90ba20d6e /db | |
| parent | c1bd1a2f499ee2f0742170021b37dab410983ab7 (diff) | |
(대표님) 커버, 데이터룸, 파일매니저, 담당자할당 등
Diffstat (limited to 'db')
| -rw-r--r-- | db/schema/companies.ts | 10 | ||||
| -rw-r--r-- | db/schema/users.ts | 15 | ||||
| -rw-r--r-- | db/schema/vendorDocu.ts | 52 |
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(), + } +) |
