Refactor code structure for improved readability and maintainability

This commit is contained in:
DDD1542
2026-03-31 09:34:54 +09:00
parent c465141f53
commit 87498b9940
141 changed files with 6275 additions and 1939 deletions
@@ -14,34 +14,34 @@ public class MultilangService extends BaseService {
private static final String NS = "multilang.";
public List<Map<String, Object>> getLanguages() {
return sqlSession.selectList(NS + "get_multilang_language_list", new HashMap<>());
return sqlSession.selectList(NS + "getMultilangLanguageList", new HashMap<>());
}
public Map<String, Object> createLanguage(Map<String, Object> params) {
String langCode = str(params.get("lang_code"));
Map<String, Object> check = Map.of("lang_code", langCode);
if (sqlSession.selectOne(NS + "get_multilang_language_info", check) != null) {
if (sqlSession.selectOne(NS + "getMultilangLanguageInfo", check) != null) {
throw new IllegalArgumentException("이미 존재하는 언어 코드입니다: " + langCode);
}
if (params.get("is_active") == null) params.put("is_active", "Y");
if (params.get("sort_order") == null) params.put("sort_order", 0);
sqlSession.insert(NS + "insert_multilang_language", params);
return sqlSession.selectOne(NS + "get_multilang_language_info", check);
sqlSession.insert(NS + "insertMultilangLanguage", params);
return sqlSession.selectOne(NS + "getMultilangLanguageInfo", check);
}
public Map<String, Object> updateLanguage(String langCode, Map<String, Object> params) {
params.put("lang_code", langCode);
Map<String, Object> check = Map.of("lang_code", langCode);
if (sqlSession.selectOne(NS + "get_multilang_language_info", check) == null) {
if (sqlSession.selectOne(NS + "getMultilangLanguageInfo", check) == null) {
throw new IllegalArgumentException("언어를 찾을 수 없습니다: " + langCode);
}
sqlSession.update(NS + "update_multilang_language", params);
return sqlSession.selectOne(NS + "get_multilang_language_info", check);
sqlSession.update(NS + "updateMultilangLanguage", params);
return sqlSession.selectOne(NS + "getMultilangLanguageInfo", check);
}
public String toggleLanguage(String langCode) {
Map<String, Object> check = Map.of("lang_code", langCode);
Map<String, Object> current = sqlSession.selectOne(NS + "get_multilang_language_info", check);
Map<String, Object> current = sqlSession.selectOne(NS + "getMultilangLanguageInfo", check);
if (current == null) {
throw new IllegalArgumentException("언어를 찾을 수 없습니다: " + langCode);
}
@@ -50,72 +50,72 @@ public class MultilangService extends BaseService {
params.put("lang_code", langCode);
params.put("new_status", newStatus);
params.put("updated_by", "system");
sqlSession.update(NS + "update_multilang_language_status", params);
sqlSession.update(NS + "updateMultilangLanguageStatus", params);
return "Y".equals(newStatus) ? "활성화" : "비활성화";
}
@Transactional
public void deleteLanguage(String langCode) {
Map<String, Object> check = Map.of("lang_code", langCode);
if (sqlSession.selectOne(NS + "get_multilang_language_info", check) == null) {
if (sqlSession.selectOne(NS + "getMultilangLanguageInfo", check) == null) {
throw new IllegalArgumentException("언어를 찾을 수 없습니다: " + langCode);
}
Map<String, Object> params = Map.of("lang_code", langCode);
sqlSession.delete(NS + "delete_multilang_text_by_lang_code", params);
sqlSession.delete(NS + "delete_multilang_language", params);
sqlSession.delete(NS + "deleteMultilangTextByLangCode", params);
sqlSession.delete(NS + "deleteMultilangLanguage", params);
}
public List<Map<String, Object>> getLangKeys(Map<String, Object> params) {
if (params.containsKey("company_code")) {
params.put("filter_company_code", params.get("company_code"));
}
return sqlSession.selectList(NS + "get_multilang_key_list", params);
return sqlSession.selectList(NS + "getMultilangKeyList", params);
}
public List<Map<String, Object>> getLangTexts(int keyId) {
return sqlSession.selectList(NS + "get_multilang_text_list", Map.of("key_id", keyId));
return sqlSession.selectList(NS + "getMultilangTextList", Map.of("key_id", keyId));
}
public int createLangKey(Map<String, Object> params) {
String companyCode = str(params.get("company_code"));
String langKey = str(params.get("lang_key"));
Map<String, Object> dupCheck = Map.of("company_code", companyCode, "lang_key", langKey);
if (sqlSession.selectOne(NS + "get_multilang_key_by_company_and_key", dupCheck) != null) {
if (sqlSession.selectOne(NS + "getMultilangKeyByCompanyAndKey", dupCheck) != null) {
throw new IllegalArgumentException("동일한 회사에 이미 존재하는 언어키입니다: " + langKey);
}
if (params.get("is_active") == null) params.put("is_active", "Y");
sqlSession.insert(NS + "insert_multilang_key", params);
sqlSession.insert(NS + "insertMultilangKey", params);
return toInt(params.get("key_id"));
}
public void updateLangKey(int keyId, Map<String, Object> params) {
params.put("key_id", keyId);
if (sqlSession.selectOne(NS + "get_multilang_key_info", Map.of("key_id", keyId)) == null) {
if (sqlSession.selectOne(NS + "getMultilangKeyInfo", Map.of("key_id", keyId)) == null) {
throw new IllegalArgumentException("다국어 키를 찾을 수 없습니다: " + keyId);
}
String companyCode = str(params.get("company_code"));
String langKey = str(params.get("lang_key"));
if (!companyCode.isEmpty() && !langKey.isEmpty()) {
Map<String, Object> dupCheck = Map.of("company_code", companyCode, "lang_key", langKey, "key_id", keyId);
if (sqlSession.selectOne(NS + "get_multilang_key_by_company_and_key_exclude", dupCheck) != null) {
if (sqlSession.selectOne(NS + "getMultilangKeyByCompanyAndKeyExclude", dupCheck) != null) {
throw new IllegalArgumentException("동일한 회사에 이미 존재하는 언어키입니다: " + langKey);
}
}
sqlSession.update(NS + "update_multilang_key", params);
sqlSession.update(NS + "updateMultilangKey", params);
}
@Transactional
public void deleteLangKey(int keyId) {
if (sqlSession.selectOne(NS + "get_multilang_key_info", Map.of("key_id", keyId)) == null) {
if (sqlSession.selectOne(NS + "getMultilangKeyInfo", Map.of("key_id", keyId)) == null) {
throw new IllegalArgumentException("다국어 키를 찾을 수 없습니다: " + keyId);
}
Map<String, Object> params = Map.of("key_id", keyId);
sqlSession.delete(NS + "delete_multilang_text_by_key_id", params);
sqlSession.delete(NS + "delete_multilang_key", params);
sqlSession.delete(NS + "deleteMultilangTextByKeyId", params);
sqlSession.delete(NS + "deleteMultilangKey", params);
}
public String toggleLangKey(int keyId) {
Map<String, Object> current = sqlSession.selectOne(NS + "get_multilang_key_info", Map.of("key_id", keyId));
Map<String, Object> current = sqlSession.selectOne(NS + "getMultilangKeyInfo", Map.of("key_id", keyId));
if (current == null) {
throw new IllegalArgumentException("다국어 키를 찾을 수 없습니다: " + keyId);
}
@@ -124,21 +124,21 @@ public class MultilangService extends BaseService {
params.put("key_id", keyId);
params.put("new_status", newStatus);
params.put("updated_by", "system");
sqlSession.update(NS + "update_multilang_key_status", params);
sqlSession.update(NS + "updateMultilangKeyStatus", params);
return "Y".equals(newStatus) ? "활성화" : "비활성화";
}
@Transactional
public void saveLangTexts(int keyId, List<Map<String, Object>> texts) {
if (sqlSession.selectOne(NS + "get_multilang_key_info", Map.of("key_id", keyId)) == null) {
if (sqlSession.selectOne(NS + "getMultilangKeyInfo", Map.of("key_id", keyId)) == null) {
throw new IllegalArgumentException("다국어 키를 찾을 수 없습니다: " + keyId);
}
sqlSession.delete(NS + "delete_multilang_text_by_key_id", Map.of("key_id", keyId));
sqlSession.delete(NS + "deleteMultilangTextByKeyId", Map.of("key_id", keyId));
for (Map<String, Object> text : texts) {
Map<String, Object> params = new HashMap<>(text);
params.put("key_id", keyId);
if (params.get("is_active") == null) params.put("is_active", "Y");
sqlSession.insert(NS + "insert_multilang_text", params);
sqlSession.insert(NS + "insertMultilangText", params);
}
}
@@ -146,14 +146,14 @@ public class MultilangService extends BaseService {
Map<String, Object> params = Map.of(
"company_code", companyCode, "menu_code", menuCode,
"lang_key", langKey, "user_lang", userLang);
Map<String, Object> result = sqlSession.selectOne(NS + "get_multilang_user_text", params);
Map<String, Object> result = sqlSession.selectOne(NS + "getMultilangUserText", params);
return result != null ? str(result.get("lang_text")) : langKey;
}
public String getLangText(String companyCode, String langKey, String langCode) {
Map<String, Object> params = Map.of(
"company_code", companyCode, "lang_key", langKey, "lang_code", langCode);
Map<String, Object> result = sqlSession.selectOne(NS + "get_multilang_single_text", params);
Map<String, Object> result = sqlSession.selectOne(NS + "getMultilangSingleText", params);
return result != null ? str(result.get("lang_text")) : langKey;
}
@@ -165,7 +165,7 @@ public class MultilangService extends BaseService {
params.put("menu_code", menuCode);
params.put("user_lang", userLang);
params.put("lang_keys", langKeys);
List<Map<String, Object>> translations = sqlSession.selectList(NS + "get_multilang_batch_translation_list", params);
List<Map<String, Object>> translations = sqlSession.selectList(NS + "getMultilangBatchTranslationList", params);
Map<String, String> result = new LinkedHashMap<>();
Set<String> processed = new HashSet<>();
for (Map<String, Object> t : translations) {
@@ -180,7 +180,7 @@ public class MultilangService extends BaseService {
Map<String, Object> fallbackParams = new HashMap<>();
fallbackParams.put("company_code", companyCode);
fallbackParams.put("missing_keys", missingKeys);
List<Map<String, Object>> fallback = sqlSession.selectList(NS + "get_multilang_fallback_translation_list", fallbackParams);
List<Map<String, Object>> fallback = sqlSession.selectList(NS + "getMultilangFallbackTranslationList", fallbackParams);
Set<String> fbProcessed = new HashSet<>();
for (Map<String, Object> t : fallback) {
String key = str(t.get("lang_key"));
@@ -195,16 +195,16 @@ public class MultilangService extends BaseService {
}
public List<Map<String, Object>> getCategories() {
List<Map<String, Object>> flat = sqlSession.selectList(NS + "get_multilang_category_list", new HashMap<>());
List<Map<String, Object>> flat = sqlSession.selectList(NS + "getMultilangCategoryList", new HashMap<>());
return buildCategoryTree(flat);
}
public Map<String, Object> getCategoryById(int categoryId) {
return sqlSession.selectOne(NS + "get_multilang_category_info", Map.of("category_id", categoryId));
return sqlSession.selectOne(NS + "getMultilangCategoryInfo", Map.of("category_id", categoryId));
}
public List<Map<String, Object>> getCategoryPath(int categoryId) {
return sqlSession.selectList(NS + "get_multilang_category_path", Map.of("category_id", categoryId));
return sqlSession.selectList(NS + "getMultilangCategoryPath", Map.of("category_id", categoryId));
}
private List<Map<String, Object>> buildCategoryTree(List<Map<String, Object>> flat) {
@@ -242,7 +242,7 @@ public class MultilangService extends BaseService {
List<Map<String, Object>> categoryPath = getCategoryPath(categoryId);
if (categoryPath.isEmpty()) throw new IllegalArgumentException("존재하지 않는 카테고리입니다");
String langKey = buildLangKey(categoryPath, keyMeaning);
if (sqlSession.selectOne(NS + "get_multilang_key_by_company_and_key", Map.of("company_code", companyCode, "lang_key", langKey)) != null) {
if (sqlSession.selectOne(NS + "getMultilangKeyByCompanyAndKey", Map.of("company_code", companyCode, "lang_key", langKey)) != null) {
throw new IllegalArgumentException("이미 존재하는 키입니다: " + langKey);
}
Map<String, Object> insertParams = new HashMap<>();
@@ -253,7 +253,7 @@ public class MultilangService extends BaseService {
insertParams.put("usage_note", params.get("usage_note"));
insertParams.put("description", params.get("usage_note"));
insertParams.put("created_by", params.getOrDefault("created_by", "system"));
sqlSession.insert(NS + "insert_multilang_key_with_category", insertParams);
sqlSession.insert(NS + "insertMultilangKeyWithCategory", insertParams);
int keyId = toInt(insertParams.get("key_id"));
@SuppressWarnings("unchecked")
List<Map<String, Object>> texts = (List<Map<String, Object>>) params.get("texts");
@@ -264,7 +264,7 @@ public class MultilangService extends BaseService {
if (tp.get("is_active") == null) tp.put("is_active", "Y");
if (tp.get("created_by") == null) tp.put("created_by", params.getOrDefault("created_by", "system"));
if (tp.get("updated_by") == null) tp.put("updated_by", params.getOrDefault("created_by", "system"));
sqlSession.insert(NS + "insert_multilang_text", tp);
sqlSession.insert(NS + "insertMultilangText", tp);
}
}
return keyId;
@@ -274,8 +274,8 @@ public class MultilangService extends BaseService {
List<Map<String, Object>> categoryPath = getCategoryPath(categoryId);
if (categoryPath.isEmpty()) throw new IllegalArgumentException("존재하지 않는 카테고리입니다");
String langKey = buildLangKey(categoryPath, keyMeaning);
Map<String, Object> commonKey = sqlSession.selectOne(NS + "get_multilang_key_by_company_and_key", Map.of("company_code", "*", "lang_key", langKey));
Map<String, Object> companyKey = sqlSession.selectOne(NS + "get_multilang_key_by_company_and_key", Map.of("company_code", companyCode, "lang_key", langKey));
Map<String, Object> commonKey = sqlSession.selectOne(NS + "getMultilangKeyByCompanyAndKey", Map.of("company_code", "*", "lang_key", langKey));
Map<String, Object> companyKey = sqlSession.selectOne(NS + "getMultilangKeyByCompanyAndKey", Map.of("company_code", companyCode, "lang_key", langKey));
Map<String, Object> result = new LinkedHashMap<>();
result.put("lang_key", langKey);
result.put("exists", companyKey != null);
@@ -288,11 +288,11 @@ public class MultilangService extends BaseService {
public int createOverrideKey(Map<String, Object> params) {
int baseKeyId = toInt(params.get("base_key_id"));
String companyCode = str(params.get("company_code"));
Map<String, Object> baseKey = sqlSession.selectOne(NS + "get_multilang_base_key_info", Map.of("key_id", baseKeyId));
Map<String, Object> baseKey = sqlSession.selectOne(NS + "getMultilangBaseKeyInfo", Map.of("key_id", baseKeyId));
if (baseKey == null) throw new IllegalArgumentException("원본 키를 찾을 수 없습니다");
if (!"*".equals(str(baseKey.get("company_code")))) throw new IllegalArgumentException("공통 키(*)만 오버라이드 할 수 있습니다");
String langKey = str(baseKey.get("lang_key"));
if (sqlSession.selectOne(NS + "get_multilang_key_by_company_and_key", Map.of("company_code", companyCode, "lang_key", langKey)) != null) {
if (sqlSession.selectOne(NS + "getMultilangKeyByCompanyAndKey", Map.of("company_code", companyCode, "lang_key", langKey)) != null) {
throw new IllegalArgumentException("이미 해당 회사의 오버라이드 키가 존재합니다");
}
Map<String, Object> insertParams = new HashMap<>();
@@ -302,7 +302,7 @@ public class MultilangService extends BaseService {
insertParams.put("key_meaning", baseKey.get("key_meaning"));
insertParams.put("base_key_id", baseKeyId);
insertParams.put("created_by", params.getOrDefault("created_by", "system"));
sqlSession.insert(NS + "insert_multilang_override_key", insertParams);
sqlSession.insert(NS + "insertMultilangOverrideKey", insertParams);
int keyId = toInt(insertParams.get("key_id"));
@SuppressWarnings("unchecked")
List<Map<String, Object>> texts = (List<Map<String, Object>>) params.get("texts");
@@ -313,27 +313,27 @@ public class MultilangService extends BaseService {
if (tp.get("is_active") == null) tp.put("is_active", "Y");
if (tp.get("created_by") == null) tp.put("created_by", params.getOrDefault("created_by", "system"));
if (tp.get("updated_by") == null) tp.put("updated_by", params.getOrDefault("created_by", "system"));
sqlSession.insert(NS + "insert_multilang_text", tp);
sqlSession.insert(NS + "insertMultilangText", tp);
}
}
return keyId;
}
public List<Map<String, Object>> getOverrideKeys(String companyCode) {
return sqlSession.selectList(NS + "get_multilang_override_key_list", Map.of("company_code", companyCode));
return sqlSession.selectList(NS + "getMultilangOverrideKeyList", Map.of("company_code", companyCode));
}
@Transactional
public List<Map<String, Object>> generateScreenLabelKeys(Map<String, Object> params) {
int screenId = toInt(params.get("screen_id"));
Map<String, Object> screenInfo = sqlSession.selectOne(NS + "get_multilang_screen_company_code", Map.of("screen_id", screenId));
Map<String, Object> screenInfo = sqlSession.selectOne(NS + "getMultilangScreenCompanyCode", Map.of("screen_id", screenId));
String companyCode = (screenInfo != null && !str(screenInfo.get("company_code")).isEmpty())
? str(screenInfo.get("company_code")) : str(params.getOrDefault("company_code", "*"));
String companyName;
if ("*".equals(companyCode)) {
companyName = "공통";
} else {
Map<String, Object> companyInfo = sqlSession.selectOne(NS + "get_multilang_company_name", Map.of("company_code", companyCode));
Map<String, Object> companyInfo = sqlSession.selectOne(NS + "getMultilangCompanyName", Map.of("company_code", companyCode));
companyName = (companyInfo != null) ? str(companyInfo.get("company_name")) : companyCode;
}
List<String> groupPath = getScreenGroupPath(screenId);
@@ -351,7 +351,7 @@ public class MultilangService extends BaseService {
List<String> parts = new ArrayList<>(keyPrefixParts);
parts.add(keyMeaning);
String langKey = String.join(".", parts);
Map<String, Object> existing = sqlSession.selectOne(NS + "get_multilang_key_by_company_and_key", Map.of("company_code", companyCode, "lang_key", langKey));
Map<String, Object> existing = sqlSession.selectOne(NS + "getMultilangKeyByCompanyAndKey", Map.of("company_code", companyCode, "lang_key", langKey));
int keyId;
if (existing != null) {
keyId = toInt(existing.get("key_id"));
@@ -363,9 +363,9 @@ public class MultilangService extends BaseService {
insertParams.put("is_active", "Y");
insertParams.put("category_id", categoryId);
insertParams.put("key_meaning", keyMeaning);
sqlSession.insert(NS + "insert_multilang_key_with_category", insertParams);
sqlSession.insert(NS + "insertMultilangKeyWithCategory", insertParams);
keyId = toInt(insertParams.get("key_id"));
sqlSession.update(NS + "upsert_multilang_text", Map.of("key_id", keyId, "lang_code", "KR", "lang_text", label));
sqlSession.update(NS + "upsertMultilangText", Map.of("key_id", keyId, "lang_code", "KR", "lang_text", label));
}
Map<String, Object> entry = new LinkedHashMap<>();
entry.put("component_id", componentId);
@@ -377,10 +377,10 @@ public class MultilangService extends BaseService {
}
private List<String> getScreenGroupPath(int screenId) {
Map<String, Object> groupRow = sqlSession.selectOne(NS + "get_multilang_screen_group_id", Map.of("screen_id", screenId));
Map<String, Object> groupRow = sqlSession.selectOne(NS + "getMultilangScreenGroupId", Map.of("screen_id", screenId));
if (groupRow == null) return Collections.emptyList();
int groupId = toInt(groupRow.get("group_id"));
List<Map<String, Object>> groups = sqlSession.selectList(NS + "get_multilang_screen_group_path", Map.of("group_id", groupId));
List<Map<String, Object>> groups = sqlSession.selectList(NS + "getMultilangScreenGroupPath", Map.of("group_id", groupId));
List<String> path = new ArrayList<>();
for (Map<String, Object> g : groups) path.add(str(g.get("group_name")));
return path;
@@ -391,7 +391,7 @@ public class MultilangService extends BaseService {
int parentId = ensureCompanyCategory(companyCode, companyName);
int currentLevel = 3;
for (String groupName : groupPath) {
Map<String, Object> existing = sqlSession.selectOne(NS + "get_multilang_category_by_name_and_parent", Map.of("category_name", groupName, "parent_id", parentId));
Map<String, Object> existing = sqlSession.selectOne(NS + "getMultilangCategoryByNameAndParent", Map.of("category_name", groupName, "parent_id", parentId));
if (existing != null) {
parentId = toInt(existing.get("category_id"));
} else {
@@ -403,7 +403,7 @@ public class MultilangService extends BaseService {
insertParams.put("key_prefix", groupName.toLowerCase().replace("\\s+", "_"));
insertParams.put("description", groupName + " 화면 그룹의 다국어");
insertParams.put("sort_order", 0);
sqlSession.insert(NS + "insert_multilang_category", insertParams);
sqlSession.insert(NS + "insertMultilangCategory", insertParams);
parentId = toInt(insertParams.get("category_id"));
}
currentLevel++;
@@ -413,7 +413,7 @@ public class MultilangService extends BaseService {
private int ensureCompanyCategory(String companyCode, String companyName) {
int screenRootId = ensureScreenRootCategory();
Map<String, Object> existing = sqlSession.selectOne(NS + "get_multilang_category_by_code_and_parent", Map.of("category_code", companyCode, "parent_id", screenRootId));
Map<String, Object> existing = sqlSession.selectOne(NS + "getMultilangCategoryByCodeAndParent", Map.of("category_code", companyCode, "parent_id", screenRootId));
if (existing != null) return toInt(existing.get("category_id"));
String displayName = "*".equals(companyCode) ? "공통" : companyName;
String keyPrefix = "*".equals(companyCode) ? "common" : companyCode.toLowerCase();
@@ -425,12 +425,12 @@ public class MultilangService extends BaseService {
insertParams.put("key_prefix", keyPrefix);
insertParams.put("description", displayName + " 회사의 화면 다국어");
insertParams.put("sort_order", "*".equals(companyCode) ? 0 : 10);
sqlSession.insert(NS + "insert_multilang_category", insertParams);
sqlSession.insert(NS + "insertMultilangCategory", insertParams);
return toInt(insertParams.get("category_id"));
}
private int ensureScreenRootCategory() {
Map<String, Object> existing = sqlSession.selectOne(NS + "get_multilang_root_category_by_code", Map.of("category_code", "screen"));
Map<String, Object> existing = sqlSession.selectOne(NS + "getMultilangRootCategoryByCode", Map.of("category_code", "screen"));
if (existing != null) return toInt(existing.get("category_id"));
Map<String, Object> insertParams = new HashMap<>();
insertParams.put("category_code", "screen");
@@ -440,7 +440,7 @@ public class MultilangService extends BaseService {
insertParams.put("key_prefix", "screen");
insertParams.put("description", "화면 디자이너에서 자동 생성된 다국어 키");
insertParams.put("sort_order", 100);
sqlSession.insert(NS + "insert_multilang_category", insertParams);
sqlSession.insert(NS + "insertMultilangCategory", insertParams);
return toInt(insertParams.get("category_id"));
}