docs: Phase 3.1 MultiLangService 완료 문서 업데이트 및 코드 포맷 정리

- PRISMA_TO_RAW_QUERY_MIGRATION_PLAN.md 업데이트
  - MultiLangService (25개) 완료 표시
  - Phase 3 진행률 반영
- multilangService.ts 코드 포맷 정리

Phase 3 진행률: 25/162 (15.4%)
전체 진행률: 276/444 (62.2%)
This commit is contained in:
kjs 2025-10-01 10:27:15 +09:00
parent 284c67193d
commit 143f851190
2 changed files with 35 additions and 20 deletions

View File

@ -31,6 +31,7 @@ backend-node/src/services/
├── dynamicFormService.ts # 동적 폼 (0개 호출) ✅ 전환 완료
├── externalDbConnectionService.ts # 외부DB (0개 호출) ✅ 전환 완료
├── dataflowControlService.ts # 제어관리 (0개 호출) ✅ 전환 완료
├── multilangService.ts # 다국어 (0개 호출) ✅ 전환 완료
├── ddlExecutionService.ts # DDL 실행 (6개 호출)
├── authService.ts # 인증 (5개 호출)
└── multiConnectionQueryService.ts # 다중 연결 (4개 호출)
@ -121,7 +122,7 @@ backend-node/ (루트)
#### 🟠 **복잡 (Raw Query 혼재) - 2순위**
- `multilangService.ts` (25개) - 재귀 쿼리, 다국어 처리
- `multilangService.ts` (0개) - ✅ **전환 완료** (Phase 3.1)
- `batchService.ts` (16개) - 배치 작업 관리
- `componentStandardService.ts` (16개) - 컴포넌트 표준 관리
- `commonCodeService.ts` (15개) - 코드 관리, 계층 구조
@ -1128,7 +1129,14 @@ describe("Performance Benchmarks", () => {
### **Phase 3: 관리 기능 (2.5주) - 162개 호출**
- [ ] MultiLangService 전환 (25개) - 재귀 쿼리
- [x] **MultiLangService 전환 (25개)****완료** (Phase 3.1)
- [x] 25개 Prisma 호출 전환 완료 (다국어 관리 CRUD)
- [x] 동적 WHERE 조건 및 동적 UPDATE 쿼리 구현
- [x] 트랜잭션 처리 (삭제 + 삽입)
- [x] JOIN 쿼리 (multi_lang_text + multi_lang_key_master)
- [x] IN 절 동적 파라미터 바인딩
- [x] TypeScript 컴파일 성공
- [x] Prisma import 완전 제거
- [ ] 배치 관련 서비스 전환 (40개) ⭐ 대규모 신규 발견
- [ ] BatchService (16개), BatchExternalDbService (8개)
- [ ] BatchExecutionLogService (7개), BatchManagementService (5개)

View File

@ -288,9 +288,10 @@ export class MultiLangService {
paramIndex++;
}
const whereClause = whereConditions.length > 0
? `WHERE ${whereConditions.join(" AND ")}`
: "";
const whereClause =
whereConditions.length > 0
? `WHERE ${whereConditions.join(" AND ")}`
: "";
const langKeys = await query<{
key_id: number;
@ -532,10 +533,9 @@ export class MultiLangService {
// 트랜잭션으로 키와 연관된 텍스트 모두 삭제
await transaction(async (client) => {
// 관련된 다국어 텍스트 삭제
await client.query(
`DELETE FROM multi_lang_text WHERE key_id = $1`,
[keyId]
);
await client.query(`DELETE FROM multi_lang_text WHERE key_id = $1`, [
keyId,
]);
// 다국어 키 삭제
await client.query(
@ -618,10 +618,9 @@ export class MultiLangService {
// 트랜잭션으로 기존 텍스트 삭제 후 새로 생성
await transaction(async (client) => {
// 기존 텍스트 삭제
await client.query(
`DELETE FROM multi_lang_text WHERE key_id = $1`,
[keyId]
);
await client.query(`DELETE FROM multi_lang_text WHERE key_id = $1`, [
keyId,
]);
// 새로운 텍스트 삽입
if (textData.texts.length > 0) {
@ -672,7 +671,14 @@ export class MultiLangService {
AND mlkm.menu_name = $4
AND mlkm.lang_key = $5
AND mlkm.is_active = $6`,
[params.userLang, "Y", params.companyCode, params.menuCode, params.langKey, "Y"]
[
params.userLang,
"Y",
params.companyCode,
params.menuCode,
params.langKey,
"Y",
]
);
if (!result) {
@ -765,8 +771,10 @@ export class MultiLangService {
}
// 모든 키에 대한 번역 조회
const placeholders = params.langKeys.map((_, i) => `$${i + 4}`).join(", ");
const placeholders = params.langKeys
.map((_, i) => `$${i + 4}`)
.join(", ");
const translations = await query<{
lang_text: string;
lang_key: string;
@ -844,10 +852,9 @@ export class MultiLangService {
});
// 언어 마스터 삭제
await client.query(
`DELETE FROM language_master WHERE lang_code = $1`,
[langCode]
);
await client.query(`DELETE FROM language_master WHERE lang_code = $1`, [
langCode,
]);
});
logger.info("언어 삭제 완료", { langCode });