다국어 언어삭제기능

This commit is contained in:
kjs 2025-08-29 10:44:55 +09:00
parent 11f40c3fc3
commit c00026c83d
4 changed files with 124 additions and 1 deletions

View File

@ -753,6 +753,66 @@ export const getLangText = async (
} }
}; };
/**
* DELETE /api/multilang/languages/:langCode
* API
*/
export const deleteLanguage = async (
req: AuthenticatedRequest,
res: Response
): Promise<void> => {
try {
const { langCode } = req.params;
logger.info("언어 삭제 요청", { langCode, user: req.user });
if (!langCode) {
res.status(400).json({
success: false,
message: "언어 코드가 필요합니다.",
error: {
code: "MISSING_LANG_CODE",
details: "langCode parameter is required",
},
});
return;
}
// PostgreSQL 클라이언트 생성
const client = new Client({
connectionString:
process.env.DATABASE_URL ||
"postgresql://postgres:postgres@localhost:5432/ilshin",
});
await client.connect();
try {
const multiLangService = new MultiLangService(client);
await multiLangService.deleteLanguage(langCode);
const response: ApiResponse<string> = {
success: true,
message: "언어가 성공적으로 삭제되었습니다.",
data: "삭제 완료",
};
res.status(200).json(response);
} finally {
await client.end();
}
} catch (error) {
logger.error("언어 삭제 실패:", error);
res.status(500).json({
success: false,
message: "언어 삭제 중 오류가 발생했습니다.",
error: {
code: "LANGUAGE_DELETE_ERROR",
details: error instanceof Error ? error.message : "Unknown error",
},
});
}
};
/** /**
* POST /api/multilang/batch * POST /api/multilang/batch
* API * API

View File

@ -5,6 +5,7 @@ import {
getLanguages, getLanguages,
createLanguage, createLanguage,
updateLanguage, updateLanguage,
deleteLanguage,
toggleLanguage, toggleLanguage,
// 다국어 키 관리 API // 다국어 키 관리 API
@ -34,6 +35,7 @@ router.use(authenticateToken);
router.get("/languages", getLanguages); // 언어 목록 조회 router.get("/languages", getLanguages); // 언어 목록 조회
router.post("/languages", createLanguage); // 언어 생성 router.post("/languages", createLanguage); // 언어 생성
router.put("/languages/:langCode", updateLanguage); // 언어 수정 router.put("/languages/:langCode", updateLanguage); // 언어 수정
router.delete("/languages/:langCode", deleteLanguage); // 언어 삭제
router.put("/languages/:langCode/toggle", toggleLanguage); // 언어 상태 토글 router.put("/languages/:langCode/toggle", toggleLanguage); // 언어 상태 토글
// 다국어 키 관리 API // 다국어 키 관리 API

View File

@ -840,6 +840,67 @@ export class MultiLangService {
} }
} }
/**
*
*/
async deleteLanguage(langCode: string): Promise<void> {
try {
logger.info("언어 삭제 시작", { langCode });
// 기존 언어 확인
const checkQuery = `
SELECT lang_code FROM language_master WHERE lang_code = $1
`;
const checkResult = await this.client.query(checkQuery, [langCode]);
if (checkResult.rows.length === 0) {
throw new Error(`언어를 찾을 수 없습니다: ${langCode}`);
}
// 트랜잭션 시작
await this.client.query("BEGIN");
try {
// 관련된 다국어 텍스트 삭제
const deleteTextsQuery = `
DELETE FROM multi_lang_text
WHERE key_id IN (
SELECT key_id FROM multi_lang_key_master
WHERE company_code = '*' OR company_code = 'SYSTEM'
)
`;
await this.client.query(deleteTextsQuery);
// 관련된 다국어 키 삭제 (시스템 레벨)
const deleteKeysQuery = `
DELETE FROM multi_lang_key_master
WHERE company_code = '*' OR company_code = 'SYSTEM'
`;
await this.client.query(deleteKeysQuery);
// 언어 마스터 삭제
const deleteLanguageQuery = `
DELETE FROM language_master WHERE lang_code = $1
`;
await this.client.query(deleteLanguageQuery, [langCode]);
// 트랜잭션 커밋
await this.client.query("COMMIT");
logger.info("언어 삭제 완료", { langCode });
} catch (error) {
// 트랜잭션 롤백
await this.client.query("ROLLBACK");
throw error;
}
} catch (error) {
logger.error("언어 삭제 중 오류 발생:", error);
throw new Error(
`언어 삭제 실패: ${error instanceof Error ? error.message : "Unknown error"}`
);
}
}
/** /**
* ( ) * ( )
*/ */

View File

@ -293,7 +293,7 @@ export default function MultiLangPage() {
try { try {
const deletePromises = Array.from(selectedLanguages).map((langCode) => const deletePromises = Array.from(selectedLanguages).map((langCode) =>
apiClient.delete(`/admin/multilang/languages/${langCode}`), apiClient.delete(`/multilang/languages/${langCode}`),
); );
const responses = await Promise.all(deletePromises); const responses = await Promise.all(deletePromises);