다국어 언어삭제기능
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
|
* POST /api/multilang/batch
|
||||||
* 다국어 텍스트 배치 조회 API
|
* 다국어 텍스트 배치 조회 API
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue