docs: Phase 4 남은 Prisma 호출 전환 계획서 작성

현재 상황 분석 및 문서화:

컨트롤러 레이어:
-  adminController.ts (28개) 완료
-  screenFileController.ts (2개) 완료
- 🔄 남은 파일 (12개 호출):
  * webTypeStandardController.ts (11개)
  * fileController.ts (1개)

Routes & Services:
- ddlRoutes.ts (2개)
- companyManagementRoutes.ts (2개)
- multiConnectionQueryService.ts (4개)

Config:
- database.ts (4개 - 제거 예정)

새로운 계획서:
- PHASE4_REMAINING_PRISMA_CALLS.md (상세 전환 계획)
- 파일별 Prisma 호출 상세 분석
- 전환 패턴 및 우선순위 정리

전체 진행률: 445/444 (100.2%)
남은 작업: 12개 (추가 조사 필요한 파일 제외)
This commit is contained in:
kjs
2025-10-01 14:33:08 +09:00
parent 381d19caee
commit 7919079362
23 changed files with 2304 additions and 1295 deletions

View File

@@ -1,9 +1,7 @@
import { Request, Response } from 'express';
import { AuthenticatedRequest } from '../middleware/authMiddleware';
import { PrismaClient } from '@prisma/client';
import logger from '../utils/logger';
const prisma = new PrismaClient();
import { Request, Response } from "express";
import { AuthenticatedRequest } from "../middleware/authMiddleware";
import { query } from "../database/db";
import logger from "../utils/logger";
/**
* 화면 컴포넌트별 파일 정보 조회 및 복원
@@ -14,37 +12,33 @@ export const getScreenComponentFiles = async (
): Promise<void> => {
try {
const { screenId } = req.params;
logger.info(`화면 컴포넌트 파일 조회 시작: screenId=${screenId}`);
// screen_files: 접두사로 해당 화면의 모든 파일 조회
const targetObjidPattern = `screen_files:${screenId}:%`;
const files = await prisma.attach_file_info.findMany({
where: {
target_objid: {
startsWith: `screen_files:${screenId}:`
},
status: 'ACTIVE'
},
orderBy: {
regdate: 'desc'
}
});
const files = await query<any>(
`SELECT * FROM attach_file_info
WHERE target_objid LIKE $1
AND status = 'ACTIVE'
ORDER BY regdate DESC`,
[`screen_files:${screenId}:%`]
);
// 컴포넌트별로 파일 그룹화
const componentFiles: { [componentId: string]: any[] } = {};
files.forEach(file => {
files.forEach((file) => {
// target_objid 형식: screen_files:screenId:componentId:fieldName
const targetParts = file.target_objid?.split(':') || [];
const targetParts = file.target_objid?.split(":") || [];
if (targetParts.length >= 3) {
const componentId = targetParts[2];
if (!componentFiles[componentId]) {
componentFiles[componentId] = [];
}
componentFiles[componentId].push({
objid: file.objid.toString(),
savedFileName: file.saved_file_name,
@@ -58,26 +52,27 @@ export const getScreenComponentFiles = async (
parentTargetObjid: file.parent_target_objid,
writer: file.writer,
regdate: file.regdate?.toISOString(),
status: file.status
status: file.status,
});
}
});
logger.info(`화면 컴포넌트 파일 조회 완료: ${Object.keys(componentFiles).length}개 컴포넌트, 총 ${files.length}개 파일`);
logger.info(
`화면 컴포넌트 파일 조회 완료: ${Object.keys(componentFiles).length}개 컴포넌트, 총 ${files.length}개 파일`
);
res.json({
success: true,
componentFiles: componentFiles,
totalFiles: files.length,
componentCount: Object.keys(componentFiles).length
componentCount: Object.keys(componentFiles).length,
});
} catch (error) {
logger.error('화면 컴포넌트 파일 조회 오류:', error);
logger.error("화면 컴포넌트 파일 조회 오류:", error);
res.status(500).json({
success: false,
message: '화면 컴포넌트 파일 조회 중 오류가 발생했습니다.',
error: error instanceof Error ? error.message : '알 수 없는 오류'
message: "화면 컴포넌트 파일 조회 중 오류가 발생했습니다.",
error: error instanceof Error ? error.message : "알 수 없는 오류",
});
}
};
@@ -91,25 +86,23 @@ export const getComponentFiles = async (
): Promise<void> => {
try {
const { screenId, componentId } = req.params;
logger.info(`컴포넌트 파일 조회: screenId=${screenId}, componentId=${componentId}`);
logger.info(
`컴포넌트 파일 조회: screenId=${screenId}, componentId=${componentId}`
);
// target_objid 패턴: screen_files:screenId:componentId:*
const targetObjidPattern = `screen_files:${screenId}:${componentId}:`;
const files = await prisma.attach_file_info.findMany({
where: {
target_objid: {
startsWith: targetObjidPattern
},
status: 'ACTIVE'
},
orderBy: {
regdate: 'desc'
}
});
const fileList = files.map(file => ({
const files = await query<any>(
`SELECT * FROM attach_file_info
WHERE target_objid LIKE $1
AND status = 'ACTIVE'
ORDER BY regdate DESC`,
[`${targetObjidPattern}%`]
);
const fileList = files.map((file) => ({
objid: file.objid.toString(),
savedFileName: file.saved_file_name,
realFileName: file.real_file_name,
@@ -122,7 +115,7 @@ export const getComponentFiles = async (
parentTargetObjid: file.parent_target_objid,
writer: file.writer,
regdate: file.regdate?.toISOString(),
status: file.status
status: file.status,
}));
logger.info(`컴포넌트 파일 조회 완료: ${fileList.length}개 파일`);
@@ -131,15 +124,14 @@ export const getComponentFiles = async (
success: true,
files: fileList,
componentId: componentId,
screenId: screenId
screenId: screenId,
});
} catch (error) {
logger.error('컴포넌트 파일 조회 오류:', error);
logger.error("컴포넌트 파일 조회 오류:", error);
res.status(500).json({
success: false,
message: '컴포넌트 파일 조회 중 오류가 발생했습니다.',
error: error instanceof Error ? error.message : '알 수 없는 오류'
message: "컴포넌트 파일 조회 중 오류가 발생했습니다.",
error: error instanceof Error ? error.message : "알 수 없는 오류",
});
}
};