diff options
| author | joonhoekim <26rote@gmail.com> | 2025-07-23 06:06:27 +0000 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-07-23 06:06:27 +0000 |
| commit | f9bfc82880212e1a13f6bbb28ecfc87b89346f26 (patch) | |
| tree | ee792f340ebfa7eaf30d2e79f99f41213e5c5cf3 /db/schema | |
| parent | edc0eabc8f5fc44408c28023ca155bd73ddf8183 (diff) | |
(김준회) 메뉴접근제어(부서별) 메뉴 구현
Diffstat (limited to 'db/schema')
| -rw-r--r-- | db/schema/departmentDomainAssignments.ts | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/db/schema/departmentDomainAssignments.ts b/db/schema/departmentDomainAssignments.ts new file mode 100644 index 00000000..5a391578 --- /dev/null +++ b/db/schema/departmentDomainAssignments.ts @@ -0,0 +1,88 @@ +import { + pgTable, + varchar, + timestamp, + integer, + text, + boolean +} from "drizzle-orm/pg-core"; + +// 부서별 도메인 할당 정보 테이블 +export const departmentDomainAssignments = pgTable("department_domain_assignments", { + id: integer("id").primaryKey().generatedAlwaysAsIdentity(), + + // 부서 정보 (Knox 조직과 연결되지만 FK 제약조건은 걸지 않음) + companyCode: varchar("company_code", { length: 10 }).notNull(), + departmentCode: varchar("department_code", { length: 50 }).notNull(), + departmentName: varchar("department_name", { length: 255 }).notNull(), // 검색 편의를 위해 저장 + + // 할당할 도메인 (users.domain enum과 동일) + assignedDomain: varchar("assigned_domain", { + length: 20, + enum: ["pending", "evcp", "procurement", "sales", "engineering", "partners"] + }).notNull(), + + // 할당 설정 상태 + isActive: boolean("is_active").notNull().default(true), + + // 메타데이터 + description: text("description"), // 할당 이유나 설명 + createdBy: integer("created_by"), // 생성자 (users.id 참조하지만 FK는 걸지 않음) + updatedBy: integer("updated_by"), // 수정자 + + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +// 고립된 레코드 관리를 위한 매핑 테이블 (추후 구현용) +export const departmentDomainMappings = pgTable("department_domain_mappings", { + id: integer("id").primaryKey().generatedAlwaysAsIdentity(), + + // 기존 할당 레코드 참조 + assignmentId: integer("assignment_id").notNull(), + + // 기존 부서 정보 (더 이상 Knox에 존재하지 않는 부서) + oldCompanyCode: varchar("old_company_code", { length: 10 }).notNull(), + oldDepartmentCode: varchar("old_department_code", { length: 50 }).notNull(), + oldDepartmentName: varchar("old_department_name", { length: 255 }), + + // 새로운 부서 정보 (현재 Knox에 존재하는 부서) + newCompanyCode: varchar("new_company_code", { length: 10 }), + newDepartmentCode: varchar("new_department_code", { length: 50 }), + newDepartmentName: varchar("new_department_name", { length: 255 }), + + // 매핑 상태 + mappingStatus: varchar("mapping_status", { + length: 20, + enum: ["pending", "mapped", "rejected"] + }).notNull().default("pending"), + + mappedBy: integer("mapped_by"), // 매핑 처리자 + mappedAt: timestamp("mapped_at"), + + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +// 할당 이력 추적 테이블 (감사 목적) +export const departmentDomainAssignmentHistory = pgTable("department_domain_assignment_history", { + id: integer("id").primaryKey().generatedAlwaysAsIdentity(), + + assignmentId: integer("assignment_id").notNull(), + + // 변경 정보 + action: varchar("action", { + length: 20, + enum: ["created", "updated", "deleted", "activated", "deactivated"] + }).notNull(), + + // 변경 전후 값 (JSON으로 저장) + previousValues: text("previous_values"), // JSON string + newValues: text("new_values"), // JSON string + + // 변경자 정보 + changedBy: integer("changed_by"), + changeReason: text("change_reason"), + + createdAt: timestamp("created_at").defaultNow().notNull(), +});
\ No newline at end of file |
