summaryrefslogtreecommitdiff
path: root/db/schema/basicContractDocumnet.ts
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-04-28 02:13:30 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-04-28 02:13:30 +0000
commitef4c533ebacc2cdc97e518f30e9a9350004fcdfb (patch)
tree345251a3ed0f4429716fa5edaa31024d8f4cb560 /db/schema/basicContractDocumnet.ts
parent9ceed79cf32c896f8a998399bf1b296506b2cd4a (diff)
~20250428 작업사항
Diffstat (limited to 'db/schema/basicContractDocumnet.ts')
-rw-r--r--db/schema/basicContractDocumnet.ts75
1 files changed, 75 insertions, 0 deletions
diff --git a/db/schema/basicContractDocumnet.ts b/db/schema/basicContractDocumnet.ts
new file mode 100644
index 00000000..ce22fdc9
--- /dev/null
+++ b/db/schema/basicContractDocumnet.ts
@@ -0,0 +1,75 @@
+import { pgTable, pgView, text, timestamp, integer, varchar } from 'drizzle-orm/pg-core';
+import { vendors } from './vendors';
+import { eq, sql } from "drizzle-orm";
+import { users } from './users';
+
+export const basicContractTemplates = pgTable('basic_contract_templates', {
+ id: integer("id").primaryKey().generatedAlwaysAsIdentity(),
+ templateName: text('template_name').notNull(),
+ status: text('status').notNull().default('ACTIVE'), // ACTIVE, DISPOSED
+ fileName: varchar("file_name", { length: 255 }).notNull(),
+ filePath: varchar("file_path", { length: 1024 }).notNull(),
+ createdAt: timestamp('created_at').defaultNow(),
+ updatedAt: timestamp('updated_at').defaultNow(),
+ validityPeriod: integer('validity_period'), // 계약 유효기간(개월) - 새로 추가할 필드
+
+});
+
+export const basicContract = pgTable('basic_contract', {
+ id: integer("id").primaryKey().generatedAlwaysAsIdentity(),
+ templateId: integer('template_id').references(() => basicContractTemplates.id),
+ vendorId: integer('vendor_id').references(() => vendors.id),
+ requestedBy: integer('requested_by').references(() => users.id),
+ status: text('status').notNull().default('PENDING'), // PENDING, COMPLETED, REJECTED
+ fileName: varchar("file_name", { length: 255 }).notNull(),
+ filePath: varchar("file_path", { length: 1024 }).notNull(),
+ createdAt: timestamp('created_at').defaultNow(),
+ updatedAt: timestamp('updated_at').defaultNow(),
+ completedAt: timestamp('completed_at'), // 계약 체결 완료 날짜 - 새로 추가할 필드
+
+});
+
+
+// 기본 계약 요청 뷰
+export const basicContractView = pgView('basic_contract_view').as((qb) => {
+ return qb
+ .select({
+ // 기본 계약 정보
+ id: sql<number>`${basicContract.id}`.as('id'),
+ templateId: sql<number | null>`${basicContract.templateId}`.as('template_id'),
+ vendorId: sql<number | null>`${basicContract.vendorId}`.as('vendor_id'),
+ requestedBy: sql<number | null>`${basicContract.requestedBy}`.as('requested_by'),
+ status: sql<string>`${basicContract.status}`.as('basic_contract_status'),
+ createdAt: sql<Date>`${basicContract.createdAt}`.as('created_at'),
+ updatedAt: sql<Date>`${basicContract.updatedAt}`.as('updated_at'),
+ completedAt: sql<Date>`${basicContract.updatedAt}`.as('completed_at'),
+
+ // 벤더 정보
+ vendorCode: sql<string | null>`${vendors.vendorCode}`.as('vendor_code'),
+ vendorEmail: sql<string | null>`${vendors.email}`.as('vendor_email'),
+ vendorName: sql<string | null>`${vendors.vendorName}`.as('vendor_name'),
+
+ // 사용자 정보
+ userName: sql<string | null>`${users.name}`.as('user_name'),
+
+ // 템플릿 정보
+ templateName: sql<string | null>`${basicContractTemplates.templateName}`.as('template_name'),
+ validityPeriod: sql<number | null>`${basicContractTemplates.validityPeriod}`.as('validityPeriod'),
+
+ filePath: sql<string | null>`${basicContractTemplates.filePath}`.as('file_path'),
+ fileName: sql<string | null>`${basicContractTemplates.fileName}`.as('file_name'),
+
+ signedFilePath: sql<string | null>`${basicContract.filePath}`.as('signed_file_path'),
+
+ })
+ .from(basicContract)
+ .leftJoin(vendors, eq(basicContract.vendorId, vendors.id))
+ .leftJoin(users, eq(basicContract.requestedBy, users.id))
+ .leftJoin(basicContractTemplates, eq(basicContract.templateId, basicContractTemplates.id));
+});
+
+// 타입 정의
+export type BasicContractTemplate = typeof basicContractTemplates.$inferSelect;
+export type BasicContract = typeof basicContract.$inferSelect;
+export type BasicContractView = typeof basicContractView.$inferSelect;
+