summaryrefslogtreecommitdiff
path: root/db/schema/menu.ts
diff options
context:
space:
mode:
Diffstat (limited to 'db/schema/menu.ts')
-rw-r--r--db/schema/menu.ts55
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