Raw SQL을 Prisma ORM으로 마이그레이션

This commit is contained in:
hyeonsu
2025-09-01 14:52:00 +09:00
parent bde5f0884a
commit b365969c72
4 changed files with 384 additions and 2367 deletions

View File

@@ -333,23 +333,36 @@ export class AdminService {
try {
logger.info(`AdminService.getMenuInfo 시작 - menuId: ${menuId}`);
// menu_info 모델이 @@ignore로 설정되어 있으므로 $queryRaw 사용
const menuInfo = await prisma.$queryRaw<any[]>`
SELECT
MI.*,
COALESCE(CM.COMPANY_NAME, '미지정') AS COMPANY_NAME
FROM MENU_INFO MI
LEFT JOIN COMPANY_MNG CM ON MI.COMPANY_CODE = CM.COMPANY_CODE
WHERE MI.OBJID = ${parseInt(menuId)}::numeric
LIMIT 1
`;
// Prisma ORM을 사용한 메뉴 정보 조회 (회사 정보 포함)
const menuInfo = await prisma.menu_info.findUnique({
where: {
objid: Number(menuId),
},
include: {
company: {
select: {
company_name: true,
},
},
},
});
if (!menuInfo || menuInfo.length === 0) {
if (!menuInfo) {
return null;
}
logger.info("메뉴 정보 조회 결과:", menuInfo[0]);
return menuInfo[0];
// 응답 형식 조정 (기존 형식과 호환성 유지)
const result = {
...menuInfo,
objid: menuInfo.objid.toString(), // BigInt를 문자열로 변환
menu_type: menuInfo.menu_type?.toString(),
parent_obj_id: menuInfo.parent_obj_id?.toString(),
seq: menuInfo.seq?.toString(),
company_name: menuInfo.company?.company_name || "미지정",
};
logger.info("메뉴 정보 조회 결과:", result);
return result;
} catch (error) {
logger.error("AdminService.getMenuInfo 오류:", error);
throw error;

View File

@@ -155,23 +155,35 @@ export class AuthService {
return null;
}
// 권한 정보 조회 (기존 Java 로직과 동일)
const authInfo = await prisma.$queryRaw<Array<{ auth_name: string }>>`
SELECT ARRAY_TO_STRING(ARRAY_AGG(AM.AUTH_NAME), ',') AS AUTH_NAME
FROM AUTHORITY_MASTER AM, AUTHORITY_SUB_USER ASU
WHERE AM.OBJID = ASU.MASTER_OBJID
AND ASU.USER_ID = ${userId}
GROUP BY ASU.USER_ID
`;
// 권한 정보 조회 (Prisma ORM 사용)
const authInfo = await prisma.authority_sub_user.findMany({
where: {
user_id: userId,
},
include: {
authority_master: {
select: {
auth_name: true,
},
},
},
});
// 회사 정보 조회 (기존 Java 로직과 동일)
const companyInfo = await prisma.$queryRaw<
Array<{ company_name: string }>
>`
SELECT COALESCE(CM.COMPANY_NAME, '미지정') AS COMPANY_NAME
FROM COMPANY_MNG CM
WHERE CM.COMPANY_CODE = ${userInfo.company_code || "ILSHIN"}
`;
// 권한명들을 쉼표로 연결
const authNames = authInfo
.filter((auth) => auth.authority_master?.auth_name)
.map((auth) => auth.authority_master!.auth_name!)
.join(",");
// 회사 정보 조회 (Prisma ORM 사용으로 변경)
const companyInfo = await prisma.company_mng.findFirst({
where: {
company_code: userInfo.company_code || "ILSHIN",
},
select: {
company_name: true,
},
});
// PersonBean 형태로 변환 (null 값을 undefined로 변환)
const personBean: PersonBean = {
@@ -189,9 +201,11 @@ export class AuthService {
userType: userInfo.user_type || undefined,
userTypeName: userInfo.user_type_name || undefined,
partnerObjid: userInfo.partner_objid || undefined,
authName: authInfo.length > 0 ? authInfo[0].auth_name : undefined,
authName: authNames || undefined,
companyCode: userInfo.company_code || "ILSHIN",
photo: userInfo.photo ? `data:image/jpeg;base64,${userInfo.photo.toString('base64')}` : undefined,
photo: userInfo.photo
? `data:image/jpeg;base64,${userInfo.photo.toString("base64")}`
: undefined,
locale: userInfo.locale || "KR",
};