diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-06-30 08:28:13 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-06-30 08:28:13 +0000 |
| commit | 5b6313f16f508882a0ea67716b7dbaa1c6967f04 (patch) | |
| tree | 3d1d8dafea2f31274ace3fbda08333e889e06d1c /db/schema/menu.ts | |
| parent | 3f0fad18483a5c800c79c5e33946d9bb384c10e2 (diff) | |
(대표님) 20250630 16시 - 유저 도메인별 라우터 분리와 보안성검토 대응
Diffstat (limited to 'db/schema/menu.ts')
| -rw-r--r-- | db/schema/menu.ts | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/db/schema/menu.ts b/db/schema/menu.ts new file mode 100644 index 00000000..8491366b --- /dev/null +++ b/db/schema/menu.ts @@ -0,0 +1,55 @@ +// db/schema.ts에 추가할 테이블 정의 +import { pgTable, serial, varchar, text, timestamp, boolean, integer ,uniqueIndex, index} from "drizzle-orm/pg-core"; +import { userDomainEnum, users } from "./users"; +import { relations } from "drizzle-orm"; + +export const menuAssignments = pgTable("menu_assignments", { + id: integer("id").primaryKey().generatedAlwaysAsIdentity(), + menuPath: varchar("menu_path", { length: 255 }).notNull().unique(), // href 값 + menuTitle: varchar("menu_title", { length: 255 }).notNull(), + menuDescription: text("menu_description"), + menuGroup: varchar("menu_group", { length: 100 }), // 그룹 정보 + sectionTitle: varchar("section_title", { length: 255 }), // 섹션명 + domain: userDomainEnum("domain").notNull().default("evcp"), // evcp, partners + + // 담당자 정보 + manager1Id: integer("manager1_id") + .references(() => users.id, { onDelete: "set null" }), + manager2Id: integer("manager2_id") + .references(() => users.id, { onDelete: "set null" }), + + // 메타 정보 + isActive: boolean("is_active").default(true).notNull(), + createdAt: timestamp("created_at", { withTimezone: true }) + .defaultNow() + .notNull(), + updatedAt: timestamp("updated_at", { withTimezone: true }) + .defaultNow() + .notNull(), + }, (table) => { + return { + menuPathIdx: uniqueIndex("menu_assignments_path_idx").on(table.menuPath), + manager1Idx: index("menu_assignments_manager1_idx").on(table.manager1Id), + manager2Idx: index("menu_assignments_manager2_idx").on(table.manager2Id), + domainIdx: index("menu_assignments_domain_idx").on(table.domain), + }; + }); + + // Relations 추가 + export const menuAssignmentsRelations = relations(menuAssignments, ({ one }) => ({ + manager1: one(users, { + fields: [menuAssignments.manager1Id], + references: [users.id], + relationName: "manager1", + }), + manager2: one(users, { + fields: [menuAssignments.manager2Id], + references: [users.id], + relationName: "manager2", + }), + })); + + export const usersRelations2 = relations(users, ({ many }) => ({ + managedMenus1: many(menuAssignments, { relationName: "manager1" }), + managedMenus2: many(menuAssignments, { relationName: "manager2" }), + }));
\ No newline at end of file |
