summaryrefslogtreecommitdiff
path: root/db/schema/menu.ts
blob: 8491366b7eba46eb3c4b82ac1873060b6419bbae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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" }),
  }));