feat: Phase 2.5 & 2.6 완료 - ExternalDbConnectionService + DataflowControlService Raw Query 전환

Phase 2.5: ExternalDbConnectionService (15개)
- 15개 Prisma 호출을 모두 Raw Query로 전환
- 동적 WHERE 조건 생성 및 동적 UPDATE 쿼리 구현
- 비밀번호 암호화/복호화 로직 유지
- ILIKE 검색 지원

Phase 2.6: DataflowControlService (6개)
- 6개 Prisma 호출을 모두 Raw Query로 전환
- 파라미터 바인딩 수정 (MySQL ? → PostgreSQL $1, $2)
- 복잡한 비즈니스 로직 및 다중 커넥션 지원 유지
- 조건부 실행, 에러 처리 로직 보존

전체 성과:
- TypeScript 컴파일 성공 (linter 에러 0개)
- Prisma import 완전 제거
- Phase 2 진행률: 152/162 (93.8%)
- 전체 진행률: 238/444 (53.6%)
This commit is contained in:
kjs
2025-10-01 10:14:16 +09:00
parent 5f3f869135
commit e5180b7659
3 changed files with 62 additions and 47 deletions

View File

@@ -1,5 +1,4 @@
// 🔧 Prisma 클라이언트 중복 생성 방지 - 기존 인스턴스 재사용
import prisma = require("../config/database");
import { query, queryOne } from "../database/db";
export interface ControlCondition {
id: string;
@@ -82,9 +81,10 @@ export class DataflowControlService {
});
// 관계도 정보 조회
const diagram = await prisma.dataflow_diagrams.findUnique({
where: { diagram_id: diagramId },
});
const diagram = await queryOne<any>(
`SELECT * FROM dataflow_diagrams WHERE diagram_id = $1`,
[diagramId]
);
if (!diagram) {
return {
@@ -527,9 +527,9 @@ export class DataflowControlService {
}
// 대상 테이블에서 조건에 맞는 데이터 조회
const queryResult = await prisma.$queryRawUnsafe(
const queryResult = await query<Record<string, any>>(
`SELECT ${condition.field} FROM ${tableName} WHERE ${condition.field} = $1 LIMIT 1`,
condition.value
[condition.value]
);
dataToCheck =
@@ -758,14 +758,14 @@ export class DataflowControlService {
try {
// 동적 테이블 INSERT 실행
const result = await prisma.$executeRawUnsafe(
`
INSERT INTO ${targetTable} (${Object.keys(insertData).join(", ")})
VALUES (${Object.keys(insertData)
.map(() => "?")
.join(", ")})
`,
...Object.values(insertData)
const placeholders = Object.keys(insertData)
.map((_, i) => `$${i + 1}`)
.join(", ");
const result = await query(
`INSERT INTO ${targetTable} (${Object.keys(insertData).join(", ")})
VALUES (${placeholders})`,
Object.values(insertData)
);
results.push({
@@ -878,10 +878,7 @@ export class DataflowControlService {
);
console.log(`📊 쿼리 파라미터:`, allValues);
const result = await prisma.$executeRawUnsafe(
updateQuery,
...allValues
);
const result = await query(updateQuery, allValues);
console.log(
`✅ UPDATE 성공 (${i + 1}/${action.fieldMappings.length}):`,
@@ -1033,10 +1030,7 @@ export class DataflowControlService {
console.log(`🚀 실행할 쿼리:`, deleteQuery);
console.log(`📊 쿼리 파라미터:`, whereValues);
const result = await prisma.$executeRawUnsafe(
deleteQuery,
...whereValues
);
const result = await query(deleteQuery, whereValues);
console.log(`✅ DELETE 성공:`, {
table: tableName,
@@ -1089,18 +1083,15 @@ export class DataflowControlService {
columnName: string
): Promise<boolean> {
try {
const result = await prisma.$queryRawUnsafe<Array<{ exists: boolean }>>(
`
SELECT EXISTS (
const result = await query<{ exists: boolean }>(
`SELECT EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_name = $1
AND column_name = $2
AND table_schema = 'public'
) as exists
`,
tableName,
columnName
) as exists`,
[tableName, columnName]
);
return result[0]?.exists || false;