// 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 = { 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; }