feat: Routes & Service Prisma 전환 완료

완료된 파일:

1. ddlRoutes.ts (2개):
   -  health check: PrismaClient 동적 import 제거
   -  SELECT 1 쿼리를 query() 함수로 변경

2. companyManagementRoutes.ts (2개):
   -  findUnique → queryOne (회사 존재 확인)
   -  update → query (soft delete)

3. multiConnectionQueryService.ts (4개):
   -  executeSelect: $queryRawUnsafe → query
   -  executeInsert: $queryRawUnsafe → query
   -  executeUpdate: $queryRawUnsafe → query
   -  executeDelete: $queryRawUnsafe → query

기술적 개선:
- 동적 import 제거로 성능 향상
- 일관된 쿼리 인터페이스 사용
- 파라미터 전달 방식 통일 (...params → params)

전체 진행률: 50/54 (92.6%)
남은 작업: database.ts (4개 - 제거 예정)
This commit is contained in:
kjs 2025-10-01 14:41:04 +09:00
parent 97f4d11870
commit bc54d37ff2
3 changed files with 19 additions and 28 deletions

View File

@ -3,10 +3,9 @@ import { authenticateToken } from "../middleware/authMiddleware";
import { AuthenticatedRequest } from "../types/auth";
import { logger } from "../utils/logger";
import { FileSystemManager } from "../utils/fileSystemManager";
import { PrismaClient } from "@prisma/client";
import { query, queryOne } from "../database/db";
const router = express.Router();
const prisma = new PrismaClient();
// 모든 라우트에 인증 미들웨어 적용
router.use(authenticateToken);
@ -29,9 +28,10 @@ router.delete(
});
// 1. 회사 존재 확인
const existingCompany = await prisma.company_mng.findUnique({
where: { company_code: companyCode },
});
const existingCompany = await queryOne<any>(
`SELECT * FROM company_mng WHERE company_code = $1`,
[companyCode]
);
if (!existingCompany) {
res.status(404).json({
@ -58,12 +58,10 @@ router.delete(
}
// 3. 데이터베이스에서 회사 삭제 (soft delete)
await prisma.company_mng.update({
where: { company_code: companyCode },
data: {
status: "deleted",
},
});
await query(
`UPDATE company_mng SET status = 'deleted' WHERE company_code = $1`,
[companyCode]
);
logger.info("회사 삭제 완료", {
companyCode,

View File

@ -10,6 +10,7 @@ import {
validateDDLPermission,
} from "../middleware/superAdminMiddleware";
import { authenticateToken } from "../middleware/authMiddleware";
import { query } from "../database/db";
const router = express.Router();
@ -180,11 +181,7 @@ router.get("/info", authenticateToken, requireSuperAdmin, (req, res) => {
router.get("/health", authenticateToken, async (req, res) => {
try {
// 기본적인 데이터베이스 연결 테스트
const { PrismaClient } = await import("@prisma/client");
const prisma = new PrismaClient();
await prisma.$queryRaw`SELECT 1`;
await prisma.$disconnect();
await query("SELECT 1");
res.json({
success: true,

View File

@ -8,7 +8,7 @@ import { ExternalDbConnectionService } from "./externalDbConnectionService";
import { TableManagementService } from "./tableManagementService";
import { ExternalDbConnection, ApiResponse } from "../types/externalDbTypes";
import { ColumnTypeInfo, TableInfo } from "../types/tableManagement";
import prisma from "../config/database";
import { query } from "../database/db";
import { logger } from "../utils/logger";
// 🔧 Prisma 클라이언트 중복 생성 방지 - 기존 인스턴스 재사용
@ -1002,7 +1002,7 @@ export class MultiConnectionQueryService {
queryParams.push(...Object.values(conditions));
}
return await prisma.$queryRawUnsafe(query, ...queryParams);
return await query(query, queryParams);
case "insert":
if (!data) throw new Error("INSERT 작업에는 데이터가 필요합니다.");
@ -1019,11 +1019,10 @@ export class MultiConnectionQueryService {
RETURNING *
`;
const insertResult = await prisma.$queryRawUnsafe(
insertQuery,
...insertValues
);
return Array.isArray(insertResult) ? insertResult[0] : insertResult;
const insertResult = await query(insertQuery, insertValues);
return Array.isArray(insertResult) && insertResult.length > 0
? insertResult[0]
: insertResult;
case "update":
if (!data) throw new Error("UPDATE 작업에는 데이터가 필요합니다.");
@ -1052,7 +1051,7 @@ export class MultiConnectionQueryService {
...Object.values(data),
...Object.values(conditions),
];
return await prisma.$queryRawUnsafe(updateQuery, ...updateParams);
return await query(updateQuery, updateParams);
case "delete":
if (!conditions)
@ -1068,10 +1067,7 @@ export class MultiConnectionQueryService {
RETURNING *
`;
return await prisma.$queryRawUnsafe(
deleteQuery,
...Object.values(conditions)
);
return await query(deleteQuery, Object.values(conditions));
default:
throw new Error(`지원하지 않는 작업입니다: ${operation}`);