다국어 언어삭제기능
This commit is contained in:
parent
11f40c3fc3
commit
c00026c83d
|
|
@ -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
|
||||
* 다국어 텍스트 배치 조회 API
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import {
|
|||
getLanguages,
|
||||
createLanguage,
|
||||
updateLanguage,
|
||||
deleteLanguage,
|
||||
toggleLanguage,
|
||||
|
||||
// 다국어 키 관리 API
|
||||
|
|
@ -34,6 +35,7 @@ router.use(authenticateToken);
|
|||
router.get("/languages", getLanguages); // 언어 목록 조회
|
||||
router.post("/languages", createLanguage); // 언어 생성
|
||||
router.put("/languages/:langCode", updateLanguage); // 언어 수정
|
||||
router.delete("/languages/:langCode", deleteLanguage); // 언어 삭제
|
||||
router.put("/languages/:langCode/toggle", toggleLanguage); // 언어 상태 토글
|
||||
|
||||
// 다국어 키 관리 API
|
||||
|
|
|
|||
|
|
@ -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"}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 기본 번역 생성 (키를 그대로 반환)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -293,7 +293,7 @@ export default function MultiLangPage() {
|
|||
|
||||
try {
|
||||
const deletePromises = Array.from(selectedLanguages).map((langCode) =>
|
||||
apiClient.delete(`/admin/multilang/languages/${langCode}`),
|
||||
apiClient.delete(`/multilang/languages/${langCode}`),
|
||||
);
|
||||
|
||||
const responses = await Promise.all(deletePromises);
|
||||
|
|
|
|||
Loading…
Reference in New Issue