summaryrefslogtreecommitdiff
path: root/lib/menu-v2/types.ts
blob: 1be8a4fec50aea9cfccb0bfaf1eb8e4d67ebb922 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// lib/menu-v2/types.ts

export type NodeType = 'menu_group' | 'group' | 'menu' | 'additional';
export type MenuDomain = 'evcp' | 'partners';

export interface MenuTreeNode {
  id: number;
  domain: MenuDomain;
  parentId: number | null;
  nodeType: NodeType;
  sortOrder: number;
  titleKo: string;
  titleEn: string | null;
  descriptionKo: string | null;
  descriptionEn: string | null;
  menuPath: string | null;
  icon: string | null;
  scrId: string | null;
  isActive: boolean;
  manager1Id: number | null;
  manager2Id: number | null;
  createdAt: Date;
  updatedAt: Date;
  // 조회 시 추가되는 필드
  children?: MenuTreeNode[];
}

export interface DiscoveredMenu {
  domain: MenuDomain;
  menuPath: string;
  pageFilePath: string;
  routeGroup: string;
}

// 도메인별 앱 라우터 경로 설정
export const DOMAIN_APP_PATHS: Record<MenuDomain, { 
  appDir: string; 
  basePath: string;
}> = {
  evcp: { 
    appDir: 'app/[lng]/evcp/(evcp)', 
    basePath: '/evcp' 
  },
  partners: { 
    appDir: 'app/[lng]/partners', 
    basePath: '/partners' 
  }
};

// 관리자용 트리 조회 결과 타입
// tree: 메뉴그룹(드롭다운) + 최상위 메뉴(단일 링크) 통합
export interface MenuTreeAdminResult {
  tree: MenuTreeNode[];
  unassigned: MenuTreeNode[];
}

// 헤더용 트리 조회 결과 타입
// tree: 메뉴그룹(드롭다운) + 최상위 메뉴(단일 링크) 통합
export interface MenuTreeActiveResult {
  tree: MenuTreeNode[];
}

// 노드 생성 타입
export interface CreateMenuGroupInput {
  titleKo: string;
  titleEn?: string;
  sortOrder?: number;
}

export interface CreateGroupInput {
  parentId: number;
  titleKo: string;
  titleEn?: string;
  sortOrder?: number;
}

// 최상위 메뉴 생성 (단일 링크)
export interface CreateTopLevelMenuInput {
  titleKo: string;
  titleEn?: string;
  menuPath: string;
  sortOrder?: number;
}

// 노드 업데이트 타입
export interface UpdateNodeInput {
  titleKo?: string;
  titleEn?: string;
  descriptionKo?: string;
  descriptionEn?: string;
  isActive?: boolean;
  scrId?: string;
  icon?: string;
  manager1Id?: number | null;
  manager2Id?: number | null;
}

// 순서 변경 타입
export interface ReorderNodeInput {
  id: number;
  sortOrder: number;
}