import { query } from '../../../utils/db' import { requireAdmin } from '../../../utils/session' /** * 메뉴 목록 조회 (권한 포함) * GET /api/admin/menu/list */ export default defineEventHandler(async (event) => { await requireAdmin(event) // 메뉴 목록 조회 const menus = await query(` SELECT m.menu_id, m.menu_code, m.menu_name, m.menu_path, m.menu_icon, m.parent_menu_id, m.sort_order, m.is_active, m.created_at, m.updated_at, pm.menu_name AS parent_menu_name FROM wr_menu m LEFT JOIN wr_menu pm ON m.parent_menu_id = pm.menu_id ORDER BY m.parent_menu_id NULLS FIRST, m.sort_order `) // 권한 목록 조회 const roles = await query(` SELECT role_id, role_code, role_name FROM wr_role ORDER BY role_id `) // 메뉴-권한 매핑 조회 const menuRoles = await query(` SELECT menu_id, role_id FROM wr_menu_role `) // 메뉴별 권한 매핑 정리 const menuRoleMap: Record = {} for (const mr of menuRoles) { if (!menuRoleMap[mr.menu_id]) { menuRoleMap[mr.menu_id] = [] } menuRoleMap[mr.menu_id].push(mr.role_id) } return { menus: menus.map(m => ({ menuId: m.menu_id, menuCode: m.menu_code, menuName: m.menu_name, menuPath: m.menu_path, menuIcon: m.menu_icon, parentMenuId: m.parent_menu_id, parentMenuName: m.parent_menu_name, sortOrder: m.sort_order, isActive: m.is_active, createdAt: m.created_at, updatedAt: m.updated_at, roleIds: menuRoleMap[m.menu_id] || [] })), roles: roles.map((r: any) => ({ roleId: r.role_id, roleCode: r.role_code, roleName: r.role_name })) } })