67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
/**
|
|
* 전체 메뉴 목록 조회 (권한 설정용)
|
|
*/
|
|
static async getAllMenus(companyCode?: string): Promise<any[]> {
|
|
try {
|
|
logger.info("🔍 전체 메뉴 목록 조회 시작", { companyCode });
|
|
|
|
let whereConditions: string[] = ["status = 'active'"];
|
|
const params: any[] = [];
|
|
let paramIndex = 1;
|
|
|
|
// 회사 코드 필터 (선택적)
|
|
// 공통 메뉴(*)와 특정 회사 메뉴를 모두 조회
|
|
if (companyCode) {
|
|
whereConditions.push(`(company_code = \$${paramIndex} OR company_code = '*')`);
|
|
params.push(companyCode);
|
|
paramIndex++;
|
|
logger.info("📋 회사 코드 필터 적용", { companyCode });
|
|
} else {
|
|
logger.info("📋 회사 코드 필터 없음 (전체 조회)");
|
|
}
|
|
|
|
const whereClause = whereConditions.join(" AND ");
|
|
|
|
const sql = `
|
|
SELECT
|
|
objid,
|
|
menu_name_kor AS "menuName",
|
|
menu_name_eng AS "menuNameEng",
|
|
menu_code AS "menuCode",
|
|
menu_url AS "menuUrl",
|
|
menu_type AS "menuType",
|
|
parent_obj_id AS "parentObjid",
|
|
seq AS "sortOrder",
|
|
company_code AS "companyCode"
|
|
FROM menu_info
|
|
WHERE ${whereClause}
|
|
ORDER BY seq, menu_name_kor
|
|
`;
|
|
|
|
logger.info("🔍 SQL 쿼리 실행", {
|
|
whereClause,
|
|
params,
|
|
sql: sql.substring(0, 200) + "...",
|
|
});
|
|
|
|
const result = await query<any>(sql, params);
|
|
|
|
logger.info("✅ 메뉴 목록 조회 성공", {
|
|
count: result.length,
|
|
companyCode,
|
|
menus: result.map((m) => ({
|
|
objid: m.objid,
|
|
name: m.menuName,
|
|
code: m.menuCode,
|
|
companyCode: m.companyCode,
|
|
})),
|
|
});
|
|
|
|
return result;
|
|
} catch (error) {
|
|
logger.error("❌ 메뉴 목록 조회 실패", { error, companyCode });
|
|
throw error;
|
|
}
|
|
}
|
|
}
|