diff options
| author | 0-Zz-ang <s1998319@gmail.com> | 2025-11-13 11:36:15 +0900 |
|---|---|---|
| committer | 0-Zz-ang <s1998319@gmail.com> | 2025-11-13 11:36:15 +0900 |
| commit | a4ceade24d28af0bde985bf750017efc02f053ff (patch) | |
| tree | 45b03d3e6b5d36a60bea464e37155f0a18e73153 /db | |
| parent | 1cdbf77cabcead1a7f76379d3786ede6f43355fb (diff) | |
(박서영)준법설문조사 RedFlag관련 요청사항 반영
Diffstat (limited to 'db')
| -rw-r--r-- | db/schema/compliance.ts | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/db/schema/compliance.ts b/db/schema/compliance.ts index 18df510b..d878abe1 100644 --- a/db/schema/compliance.ts +++ b/db/schema/compliance.ts @@ -23,6 +23,7 @@ export const complianceQuestions = pgTable('compliance_questions', { questionType: varchar('question_type', { length: 20 }).notNull(), // 'RADIO', 'CHECKBOX', 'TEXT', 'TEXTAREA', 'DROPDOWN', 'FILE', 'PERCENTAGE', 'CONDITIONAL' isRequired: boolean('is_required').notNull().default(true), + isRedFlag: boolean('is_red_flag').notNull().default(false), // 레드플래그 질문 여부 hasDetailText: boolean('has_detail_text').notNull().default(false), // 상세 기술 필요 여부 hasFileUpload: boolean('has_file_upload').notNull().default(false), // 첨부파일 필요 여부 parentQuestionId: integer('parent_question_id'), // 조건부 질문의 부모 @@ -79,6 +80,15 @@ export const complianceResponseFiles = pgTable('compliance_response_files', { uploadedAt: timestamp('uploaded_at').defaultNow(), }); +// 7. 레드플래그 담당자 관리 +export const redFlagManagers = pgTable('red_flag_managers', { + id: serial('id').primaryKey(), + purchasingManagerId: integer('purchasing_manager_id').references(() => users.id), // 구매기획 담당자 + complianceManagerId: integer('compliance_manager_id').references(() => users.id), // 준법 담당자 + createdAt: timestamp('created_at').defaultNow(), + updatedAt: timestamp('updated_at').defaultNow(), +}); + // Relations 정의 export const complianceSurveyTemplatesRelations = relations(complianceSurveyTemplates, ({ many }) => ({ questions: many(complianceQuestions), @@ -137,6 +147,17 @@ export const complianceResponseFilesRelations = relations(complianceResponseFile }), })); +export const redFlagManagersRelations = relations(redFlagManagers, ({ one }) => ({ + purchasingManager: one(users, { + fields: [redFlagManagers.purchasingManagerId], + references: [users.id], + }), + complianceManager: one(users, { + fields: [redFlagManagers.complianceManagerId], + references: [users.id], + }), +})); + // 타입 정의 export type ComplianceSurveyTemplate = typeof complianceSurveyTemplates.$inferSelect; export type ComplianceQuestion = typeof complianceQuestions.$inferSelect; @@ -144,6 +165,7 @@ export type ComplianceQuestionOption = typeof complianceQuestionOptions.$inferSe export type ComplianceResponse = typeof complianceResponses.$inferSelect; export type ComplianceResponseAnswer = typeof complianceResponseAnswers.$inferSelect; export type ComplianceResponseFile = typeof complianceResponseFiles.$inferSelect; +export type RedFlagManager = typeof redFlagManagers.$inferSelect; // Insert 타입 export type NewComplianceSurveyTemplate = typeof complianceSurveyTemplates.$inferInsert; @@ -152,6 +174,7 @@ export type NewComplianceQuestionOption = typeof complianceQuestionOptions.$infe export type NewComplianceResponse = typeof complianceResponses.$inferInsert; export type NewComplianceResponseAnswer = typeof complianceResponseAnswers.$inferInsert; export type NewComplianceResponseFile = typeof complianceResponseFiles.$inferInsert; +export type NewRedFlagManager = typeof redFlagManagers.$inferInsert; // 질문 타입 상수 export const QUESTION_TYPES = { |
