summaryrefslogtreecommitdiff
path: root/db/schema/agreementComments.ts
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-11-17 08:43:00 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-11-17 08:43:00 +0000
commit1a6774d195b5fb9e3547f3268bf3527a8718c9bf (patch)
tree541a4367ec3ffa9abfb8a9256c24f6286628b71c /db/schema/agreementComments.ts
parentd19cca70ad1689807192a8784efc3091bf677816 (diff)
(임수민) GTC 기본계약 코멘트 수정
Diffstat (limited to 'db/schema/agreementComments.ts')
-rw-r--r--db/schema/agreementComments.ts66
1 files changed, 66 insertions, 0 deletions
diff --git a/db/schema/agreementComments.ts b/db/schema/agreementComments.ts
new file mode 100644
index 00000000..56631b1f
--- /dev/null
+++ b/db/schema/agreementComments.ts
@@ -0,0 +1,66 @@
+import { pgTable, text, timestamp, integer, varchar, boolean, jsonb } from 'drizzle-orm/pg-core';
+import { relations } from 'drizzle-orm';
+import { basicContract } from './basicContractDocumnet';
+import { users } from './users';
+import { vendors } from './vendors';
+
+/**
+ * GTC 기본 계약서 협의 코멘트 테이블
+ * SHI와 Vendor 간의 계약서 협의 내용을 저장
+ */
+export const agreementComments = pgTable('agreement_comments', {
+ id: integer("id").primaryKey().generatedAlwaysAsIdentity(),
+
+ // 어떤 기본계약서에 대한 코멘트인지
+ basicContractId: integer('basic_contract_id')
+ .references(() => basicContract.id)
+ .notNull(),
+
+ // 작성자 구분 (SHI or Vendor)
+ authorType: text('author_type').notNull(), // 'SHI' | 'Vendor'
+
+ // 작성자 정보
+ authorUserId: integer('author_user_id').references(() => users.id),
+ authorVendorId: integer('author_vendor_id').references(() => vendors.id),
+ authorName: varchar('author_name', { length: 255 }), // 선택적 작성자 이름
+
+ // 코멘트 내용
+ comment: text('comment').notNull(),
+
+ // 첨부파일 정보 (JSON 배열로 저장)
+ attachments: jsonb('attachments').$type<Array<{
+ id: string;
+ fileName: string;
+ filePath: string;
+ fileSize: number;
+ uploadedAt: Date;
+ }>>().default([]),
+
+ // 상태 관리
+ isDeleted: boolean('is_deleted').notNull().default(false),
+
+ // 감사 정보
+ createdAt: timestamp('created_at').defaultNow().notNull(),
+ updatedAt: timestamp('updated_at').defaultNow().notNull(),
+ deletedAt: timestamp('deleted_at'),
+});
+
+// Relations 정의
+export const agreementCommentsRelations = relations(agreementComments, ({ one }) => ({
+ basicContract: one(basicContract, {
+ fields: [agreementComments.basicContractId],
+ references: [basicContract.id],
+ }),
+ authorUser: one(users, {
+ fields: [agreementComments.authorUserId],
+ references: [users.id],
+ }),
+ authorVendor: one(vendors, {
+ fields: [agreementComments.authorVendorId],
+ references: [vendors.id],
+ }),
+}));
+
+export type AgreementComment = typeof agreementComments.$inferSelect;
+export type NewAgreementComment = typeof agreementComments.$inferInsert;
+