diff --git a/Dockerfile b/Dockerfile index ab7a327e..2a0a026f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,28 @@ # ========================== # 멀티 스테이지 Dockerfile -# - 백엔드: Node.js + Express + TypeScript +# - 백엔드: Spring Boot (Java 21) # - 프론트엔드: Next.js (프로덕션 빌드) # ========================== # ------------------------------ -# Stage 1: 백엔드 빌드 +# Stage 1: 백엔드 빌드 (Spring Boot) # ------------------------------ -FROM node:20.10-alpine AS backend-builder +FROM eclipse-temurin:21-jdk-alpine AS backend-builder WORKDIR /app/backend -# 백엔드 의존성 설치 -COPY backend-node/package*.json ./ -RUN npm ci --only=production && \ - npm cache clean --force +# Gradle Wrapper 복사 +COPY backend-spring/gradlew ./ +COPY backend-spring/gradle ./gradle +RUN chmod +x gradlew -# 백엔드 소스 복사 및 빌드 -COPY backend-node/tsconfig.json ./ -COPY backend-node/src ./src -RUN npm install -D typescript @types/node && \ - npm run build && \ - npm prune --production +# 의존성 캐싱 +COPY backend-spring/build.gradle backend-spring/settings.gradle ./ +RUN ./gradlew dependencies --no-daemon || true + +# 소스 복사 및 빌드 +COPY backend-spring/src ./src +RUN ./gradlew bootJar --no-daemon # ------------------------------ # Stage 2: 프론트엔드 빌드 @@ -46,38 +47,38 @@ RUN npm run build:no-lint # ------------------------------ # Stage 3: 최종 런타임 이미지 # ------------------------------ -FROM node:20.10-alpine AS runtime +FROM eclipse-temurin:21-jre-alpine AS runtime -# 보안 강화: 비특권 사용자 생성 -RUN addgroup -g 1001 -S nodejs && \ - adduser -S nodejs -u 1001 +RUN apk add --no-cache curl nodejs npm + +# 비특권 사용자 생성 +RUN addgroup -g 1001 -S appgroup && \ + adduser -S appuser -u 1001 -G appgroup WORKDIR /app -# 백엔드 런타임 파일 복사 -COPY --from=backend-builder --chown=nodejs:nodejs /app/backend/dist ./backend/dist -COPY --from=backend-builder --chown=nodejs:nodejs /app/backend/node_modules ./backend/node_modules -COPY --from=backend-builder --chown=nodejs:nodejs /app/backend/package.json ./backend/package.json +# 백엔드 JAR 복사 +COPY --from=backend-builder --chown=appuser:appgroup /app/backend/build/libs/*.jar ./backend/app.jar # 프론트엔드 런타임 파일 복사 -COPY --from=frontend-builder --chown=nodejs:nodejs /app/frontend/.next ./frontend/.next -COPY --from=frontend-builder --chown=nodejs:nodejs /app/frontend/node_modules ./frontend/node_modules -COPY --from=frontend-builder --chown=nodejs:nodejs /app/frontend/package.json ./frontend/package.json -COPY --from=frontend-builder --chown=nodejs:nodejs /app/frontend/public ./frontend/public -COPY --from=frontend-builder --chown=nodejs:nodejs /app/frontend/next.config.mjs ./frontend/next.config.mjs +COPY --from=frontend-builder --chown=appuser:appgroup /app/frontend/.next ./frontend/.next +COPY --from=frontend-builder --chown=appuser:appgroup /app/frontend/node_modules ./frontend/node_modules +COPY --from=frontend-builder --chown=appuser:appgroup /app/frontend/package.json ./frontend/package.json +COPY --from=frontend-builder --chown=appuser:appgroup /app/frontend/public ./frontend/public +COPY --from=frontend-builder --chown=appuser:appgroup /app/frontend/next.config.mjs ./frontend/next.config.mjs -# 업로드 디렉토리 생성 (백엔드용) -RUN mkdir -p /app/backend/uploads && \ - chown -R nodejs:nodejs /app/backend/uploads +# 업로드 디렉토리 생성 +RUN mkdir -p /app/backend/uploads /app/backend/logs && \ + chown -R appuser:appgroup /app # 시작 스크립트 생성 RUN echo '#!/bin/sh' > /app/start.sh && \ echo 'set -e' >> /app/start.sh && \ echo '' >> /app/start.sh && \ - echo '# 백엔드 시작 (백그라운드)' >> /app/start.sh && \ + echo '# Spring Boot 백엔드 시작 (백그라운드)' >> /app/start.sh && \ echo 'cd /app/backend' >> /app/start.sh && \ - echo 'echo "Starting backend on port 8080..."' >> /app/start.sh && \ - echo 'node dist/app.js &' >> /app/start.sh && \ + echo 'echo "Starting Spring Boot backend on port 8081..."' >> /app/start.sh && \ + echo 'java -jar app.jar &' >> /app/start.sh && \ echo 'BACKEND_PID=$!' >> /app/start.sh && \ echo '' >> /app/start.sh && \ echo '# 프론트엔드 시작 (포그라운드)' >> /app/start.sh && \ @@ -89,18 +90,16 @@ RUN echo '#!/bin/sh' > /app/start.sh && \ echo '# 프로세스 모니터링' >> /app/start.sh && \ echo 'wait $BACKEND_PID $FRONTEND_PID' >> /app/start.sh && \ chmod +x /app/start.sh && \ - chown nodejs:nodejs /app/start.sh + chown appuser:appgroup /app/start.sh -# 비특권 사용자로 전환 -USER nodejs +USER appuser # 포트 노출 -EXPOSE 3000 8080 +EXPOSE 3000 8081 # 헬스체크 -HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ +HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1 # 컨테이너 시작 CMD ["/app/start.sh"] - diff --git a/backend-node/Dockerfile.win b/backend-node/Dockerfile.win deleted file mode 100644 index aa14dcc6..00000000 --- a/backend-node/Dockerfile.win +++ /dev/null @@ -1,25 +0,0 @@ -# Windows 개발 환경 전용 Dockerfile (단순 개발 모드) -FROM node:20-bookworm-slim - -WORKDIR /app - -# 필요한 패키지 설치 (wget 포함) -RUN apt-get update \ - && apt-get install -y --no-install-recommends openssl ca-certificates wget \ - && rm -rf /var/lib/apt/lists/* - -# package.json 복사 및 의존성 설치 -COPY package*.json ./ -RUN npm ci - -# 소스 코드 복사 -COPY . . - -# 개발 환경 설정 -ENV NODE_ENV=development - -# 포트 노출 -EXPOSE 8080 - -# 개발 서버 시작 (nodemon 사용) -CMD ["npm", "run", "dev"] diff --git a/backend-spring/src/main/java/com/erp/controller/AdminController.java b/backend-spring/src/main/java/com/erp/controller/AdminController.java index 43c88fef..4413e94d 100644 --- a/backend-spring/src/main/java/com/erp/controller/AdminController.java +++ b/backend-spring/src/main/java/com/erp/controller/AdminController.java @@ -249,6 +249,21 @@ public class AdminController { return ResponseEntity.ok(ApiResponse.success(adminService.saveUser(body), "사용자 수정 성공")); } + /** + * DELETE /api/admin/users/{userId} + * 사용자 삭제 (비활성화) + */ + @DeleteMapping("/users/{userId}") + public ResponseEntity> deleteUser( + @PathVariable String userId) { + Map existing = adminService.getUserInfo(userId); + if (existing == null) { + return ResponseEntity.status(404).body(ApiResponse.error("사용자를 찾을 수 없습니다.")); + } + adminService.changeUserStatus(userId, "inactive"); + return ResponseEntity.ok(ApiResponse.success(null, "사용자 삭제 성공")); + } + /** * PATCH /api/admin/users/{userId}/status * 사용자 상태 변경 diff --git a/backend-spring/src/main/java/com/erp/controller/BatchController.java b/backend-spring/src/main/java/com/erp/controller/BatchController.java index 23d1d8a9..90625593 100644 --- a/backend-spring/src/main/java/com/erp/controller/BatchController.java +++ b/backend-spring/src/main/java/com/erp/controller/BatchController.java @@ -84,6 +84,12 @@ public class BatchController { body.put("company_code", companyCode); body.put("created_by", userId); body.put("updated_by", userId); + + // API 필드명(cron_expression) → DB 필드명(cron_schedule) 매핑 + if (body.containsKey("cron_expression") && !body.containsKey("cron_schedule")) { + body.put("cron_schedule", body.get("cron_expression")); + } + Map created = batchService.insertBatch(body); return ResponseEntity.status(201).body(ApiResponse.success(created, "배치 설정이 성공적으로 생성되었습니다.")); } @@ -97,6 +103,12 @@ public class BatchController { body.put("company_code", companyCode); body.put("updated_by", userId); body.put("id", id); + + // API 필드명(cron_expression) → DB 필드명(cron_schedule) 매핑 + if (body.containsKey("cron_expression") && !body.containsKey("cron_schedule")) { + body.put("cron_schedule", body.get("cron_expression")); + } + Map updated = batchService.updateBatch(body); return ResponseEntity.ok(ApiResponse.success(updated, "배치 설정이 성공적으로 수정되었습니다.")); } diff --git a/backend-spring/src/main/java/com/erp/controller/NumberingRuleController.java b/backend-spring/src/main/java/com/erp/controller/NumberingRuleController.java index dfd484b1..7822b18d 100644 --- a/backend-spring/src/main/java/com/erp/controller/NumberingRuleController.java +++ b/backend-spring/src/main/java/com/erp/controller/NumberingRuleController.java @@ -42,7 +42,7 @@ public class NumberingRuleController { @GetMapping("/available/{menuObjid}") public ResponseEntity>>> getAvailableRulesForMenuWithId( @RequestAttribute("company_code") String companyCode, - @PathVariable Integer menuObjid) { + @PathVariable String menuObjid) { List> list = numberingRuleService.getAvailableRulesForMenu(companyCode, menuObjid); return ResponseEntity.ok(ApiResponse.success(list, "사용 가능한 채번 규칙을 조회했습니다.")); } @@ -86,7 +86,7 @@ public class NumberingRuleController { @GetMapping("/test/list/{menuObjid}") public ResponseEntity>>> getRulesFromTestWithMenu( @RequestAttribute("company_code") String companyCode, - @PathVariable Integer menuObjid) { + @PathVariable String menuObjid) { List> list = numberingRuleService.getRulesFromTest(companyCode, menuObjid); return ResponseEntity.ok(ApiResponse.success(list, "테스트 채번 규칙 목록을 조회했습니다.")); } diff --git a/backend-spring/src/main/java/com/erp/controller/RoleController.java b/backend-spring/src/main/java/com/erp/controller/RoleController.java index e94b4288..2d55477f 100644 --- a/backend-spring/src/main/java/com/erp/controller/RoleController.java +++ b/backend-spring/src/main/java/com/erp/controller/RoleController.java @@ -97,6 +97,15 @@ public class RoleController { Map params = new HashMap<>(body); params.put("writer", userId); + params.put("objid", (int)(System.currentTimeMillis() % Integer.MAX_VALUE)); + + // API 필드명(role_name/role_code) → DB 필드명(auth_name/auth_code) 매핑 + if (params.containsKey("role_name") && !params.containsKey("auth_name")) { + params.put("auth_name", params.get("role_name")); + } + if (params.containsKey("role_code") && !params.containsKey("auth_code")) { + params.put("auth_code", params.get("role_code")); + } Map created = roleService.createRoleGroup(params); return ResponseEntity.status(201).body(ApiResponse.success(created, "권한 그룹 생성 성공")); @@ -130,6 +139,14 @@ public class RoleController { Map params = new HashMap<>(body); params.put("objid", parseLong(id)); + // API 필드명(role_name/role_code) → DB 필드명(auth_name/auth_code) 매핑 + if (params.containsKey("role_name") && !params.containsKey("auth_name")) { + params.put("auth_name", params.get("role_name")); + } + if (params.containsKey("role_code") && !params.containsKey("auth_code")) { + params.put("auth_code", params.get("role_code")); + } + Map updated = roleService.updateRoleGroup(params); return ResponseEntity.ok(ApiResponse.success(updated, "권한 그룹 수정 성공")); } diff --git a/backend-spring/src/main/java/com/erp/controller/ScreenManagementController.java b/backend-spring/src/main/java/com/erp/controller/ScreenManagementController.java index cd8a0984..7bd84d46 100644 --- a/backend-spring/src/main/java/com/erp/controller/ScreenManagementController.java +++ b/backend-spring/src/main/java/com/erp/controller/ScreenManagementController.java @@ -44,7 +44,7 @@ public class ScreenManagementController { if (screen == null) { return ResponseEntity.status(404).body(ApiResponse.error("화면을 찾을 수 없습니다.")); } - return ResponseEntity.ok(ApiResponse.success(commonService.toCamelCaseKeys(screen))); + return ResponseEntity.ok(ApiResponse.success(screen)); } @GetMapping("/screens/{id}/menu") @@ -540,7 +540,7 @@ public class ScreenManagementController { @GetMapping("/menus/{menuObjid}/screens") public ResponseEntity>>> getScreensByMenu( @RequestAttribute("company_code") String companyCode, - @PathVariable Integer menuObjid) { + @PathVariable String menuObjid) { return ResponseEntity.ok(ApiResponse.success(service.getScreensByMenu(menuObjid, companyCode))); } @@ -548,7 +548,7 @@ public class ScreenManagementController { public ResponseEntity> unassignScreenFromMenu( @RequestAttribute("company_code") String companyCode, @PathVariable Integer screenId, - @PathVariable Integer menuObjid) { + @PathVariable String menuObjid) { try { service.unassignScreenFromMenu(screenId, menuObjid, companyCode); return ResponseEntity.ok(ApiResponse.success(null, "메뉴 할당이 해제되었습니다.")); diff --git a/backend-spring/src/main/java/com/erp/service/AdminService.java b/backend-spring/src/main/java/com/erp/service/AdminService.java index e722cf78..803c15f3 100644 --- a/backend-spring/src/main/java/com/erp/service/AdminService.java +++ b/backend-spring/src/main/java/com/erp/service/AdminService.java @@ -76,6 +76,15 @@ public class AdminService extends BaseService { } public Map saveMenu(Map params) { + // Generate timestamp-based objid + long objid = System.currentTimeMillis(); + params.put("objid", objid); + + // Map frontend field names to DB column names + if (params.get("menu_name_kor") == null && params.get("menu_name") != null) { + params.put("menu_name_kor", params.get("menu_name")); + } + sqlSession.insert("admin.insertMenu", params); return params; } @@ -126,7 +135,7 @@ public class AdminService extends BaseService { pagination.put("total_pages", totalPages); Map result = new HashMap<>(); - result.put("data", commonService.toCamelCaseKeysList(users)); + result.put("data", users); result.put("total", total); result.put("search_type", rawSearch != null ? "v2" : "none"); result.put("pagination", pagination); @@ -342,17 +351,15 @@ public class AdminService extends BaseService { commonService.applyCompanyCodeFilter(params); List> rawList = sqlSession.selectList("admin.selectDepartmentList", params); - // 평탄 목록 (camelCase 변환) - List> flatList = rawList.stream() - .map(commonService::toCamelCaseKeys) - .collect(Collectors.toList()); + // 평탄 목록 + List> flatList = new java.util.ArrayList<>(rawList); - // 트리 구조 빌드 — 1차: camelCase 변환 + children 초기화 + // 트리 구조 빌드 java.util.LinkedHashMap> deptTreeMap = new java.util.LinkedHashMap<>(); List> rootDepts = new java.util.ArrayList<>(); for (Map raw : rawList) { - Map node = commonService.toCamelCaseKeys(raw); + Map node = new java.util.LinkedHashMap<>(raw); node.put("children", new java.util.ArrayList<>()); deptTreeMap.put((String) raw.get("dept_code"), node); } diff --git a/backend-spring/src/main/java/com/erp/service/AnalyticsReportService.java b/backend-spring/src/main/java/com/erp/service/AnalyticsReportService.java index 62ba30fa..98c1587f 100644 --- a/backend-spring/src/main/java/com/erp/service/AnalyticsReportService.java +++ b/backend-spring/src/main/java/com/erp/service/AnalyticsReportService.java @@ -16,7 +16,7 @@ public class AnalyticsReportService extends BaseService { private static final String NS = "analyticsReport."; public Map getProductionReportData(Map params) { - List> rows = sqlSession.selectList(NS + "get_production_report_data", params); + List> rows = sqlSession.selectList(NS + "getProductionReportData", params); Map filterOptions = new LinkedHashMap<>(); filterOptions.put("processes", extractFilterSet(rows, "process")); filterOptions.put("equipment", extractFilterSet(rows, "equipment")); @@ -30,7 +30,7 @@ public class AnalyticsReportService extends BaseService { } public Map getInventoryReportData(Map params) { - List> rows = sqlSession.selectList(NS + "get_inventory_report_data", params); + List> rows = sqlSession.selectList(NS + "getInventoryReportData", params); Map filterOptions = new LinkedHashMap<>(); filterOptions.put("items", extractFilterSet(rows, "item")); filterOptions.put("warehouses", extractFilterSet(rows, "warehouse")); @@ -49,7 +49,7 @@ public class AnalyticsReportService extends BaseService { } public Map getPurchaseReportData(Map params) { - List> rows = sqlSession.selectList(NS + "get_purchase_report_data", params); + List> rows = sqlSession.selectList(NS + "getPurchaseReportData", params); Map filterOptions = new LinkedHashMap<>(); filterOptions.put("suppliers", extractFilterSet(rows, "supplier")); filterOptions.put("items", extractFilterSet(rows, "item")); @@ -63,7 +63,7 @@ public class AnalyticsReportService extends BaseService { } public Map getQualityReportData(Map params) { - List> rows = sqlSession.selectList(NS + "get_quality_report_data", params); + List> rows = sqlSession.selectList(NS + "getQualityReportData", params); Map filterOptions = new LinkedHashMap<>(); filterOptions.put("items", extractFilterSet(rows, "item")); filterOptions.put("defect_types", List.of( @@ -83,7 +83,7 @@ public class AnalyticsReportService extends BaseService { } public Map getEquipmentReportData(Map params) { - List> rows = sqlSession.selectList(NS + "get_equipment_report_data", params); + List> rows = sqlSession.selectList(NS + "getEquipmentReportData", params); Map filterOptions = new LinkedHashMap<>(); filterOptions.put("equipment", extractFilterSet(rows, "equipment")); filterOptions.put("equip_types", extractFilterSet(rows, "equip_type")); @@ -97,7 +97,7 @@ public class AnalyticsReportService extends BaseService { } public Map getMoldReportData(Map params) { - List> rows = sqlSession.selectList(NS + "get_mold_report_data", params); + List> rows = sqlSession.selectList(NS + "getMoldReportData", params); Map filterOptions = new LinkedHashMap<>(); filterOptions.put("molds", extractFilterSet(rows, "mold")); filterOptions.put("mold_types", extractFilterSet(rows, "mold_type")); diff --git a/backend-spring/src/main/java/com/erp/service/BatchExecutionLogService.java b/backend-spring/src/main/java/com/erp/service/BatchExecutionLogService.java index ee20002a..dfee8d66 100644 --- a/backend-spring/src/main/java/com/erp/service/BatchExecutionLogService.java +++ b/backend-spring/src/main/java/com/erp/service/BatchExecutionLogService.java @@ -19,43 +19,43 @@ public class BatchExecutionLogService extends BaseService { public Map getBatchExecutionLogList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - Integer totalObj = sqlSession.selectOne(NS + "get_batch_execution_log_list_cnt", params); + Integer totalObj = sqlSession.selectOne(NS + "getBatchExecutionLogListCnt", params); int totalCount = totalObj != null ? totalObj : 0; - List> list = sqlSession.selectList(NS + "get_batch_execution_log_list", params); + List> list = sqlSession.selectList(NS + "getBatchExecutionLogList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getBatchExecutionLogInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_batch_execution_log_info", params); + return sqlSession.selectOne(NS + "getBatchExecutionLogInfo", params); } @Transactional public Map insertBatchExecutionLog(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_batch_execution_log", params); + sqlSession.insert(NS + "insertBatchExecutionLog", params); return params; } @Transactional public Map updateBatchExecutionLog(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_batch_execution_log", params); + sqlSession.update(NS + "updateBatchExecutionLog", params); return params; } @Transactional public Map deleteBatchExecutionLog(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_batch_execution_log", params); + sqlSession.delete(NS + "deleteBatchExecutionLog", params); return params; } public Map getBatchExecutionLogLatest(Map params) { - return sqlSession.selectOne(NS + "get_batch_execution_log_latest", params); + return sqlSession.selectOne(NS + "getBatchExecutionLogLatest", params); } public Map getBatchExecutionLogStats(Map params) { - return sqlSession.selectOne(NS + "get_batch_execution_log_stats", params); + return sqlSession.selectOne(NS + "getBatchExecutionLogStats", params); } } diff --git a/backend-spring/src/main/java/com/erp/service/BatchManagementService.java b/backend-spring/src/main/java/com/erp/service/BatchManagementService.java index 5c962ffd..4fc7f9d8 100644 --- a/backend-spring/src/main/java/com/erp/service/BatchManagementService.java +++ b/backend-spring/src/main/java/com/erp/service/BatchManagementService.java @@ -31,7 +31,7 @@ public class BatchManagementService extends BaseService { public Map getBatchStats(Map params) { commonService.applyCompanyCodeFilter(params); - Map stats = sqlSession.selectOne(NS + "get_batch_management_stats", params); + Map stats = sqlSession.selectOne(NS + "getBatchManagementStats", params); return stats != null ? stats : Collections.emptyMap(); } @@ -39,7 +39,7 @@ public class BatchManagementService extends BaseService { public List> getNodeFlows(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_batch_management_node_flow_list", params); + return sqlSession.selectList(NS + "getBatchManagementNodeFlowList", params); } // ── Connections / Tables / Columns ──────────────────────────────────────── @@ -205,17 +205,17 @@ public class BatchManagementService extends BaseService { public List getAuthServiceNames(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_batch_management_auth_service_list", params); + return sqlSession.selectList(NS + "getBatchManagementAuthServiceList", params); } // ── Sparkline / Recent Logs ─────────────────────────────────────────────── public List> getBatchSparkline(Map params) { - return sqlSession.selectList(NS + "get_batch_management_sparkline_data", params); + return sqlSession.selectList(NS + "getBatchManagementSparklineData", params); } public List> getBatchRecentLogs(Map params) { - return sqlSession.selectList(NS + "get_batch_management_recent_log_list", params); + return sqlSession.selectList(NS + "getBatchManagementRecentLogList", params); } // ── Private Helpers ─────────────────────────────────────────────────────── diff --git a/backend-spring/src/main/java/com/erp/service/BatchService.java b/backend-spring/src/main/java/com/erp/service/BatchService.java index 8cd64b12..83e5cd71 100644 --- a/backend-spring/src/main/java/com/erp/service/BatchService.java +++ b/backend-spring/src/main/java/com/erp/service/BatchService.java @@ -21,25 +21,25 @@ public class BatchService extends BaseService { public Map getBatchList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - Integer totalObj = sqlSession.selectOne(NS + "get_batch_list_cnt", params); + Integer totalObj = sqlSession.selectOne(NS + "getBatchListCnt", params); int totalCount = totalObj != null ? totalObj : 0; - List> list = sqlSession.selectList(NS + "get_batch_list", params); + List> list = sqlSession.selectList(NS + "getBatchList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getBatchInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_batch_info", params); + return sqlSession.selectOne(NS + "getBatchInfo", params); } @Transactional public Map insertBatch(Map params) { - sqlSession.insert(NS + "insert_batch", params); + sqlSession.insert(NS + "insertBatch", params); Long id = params.get("id") != null ? Long.parseLong(params.get("id").toString()) : null; if (id != null) { Map infoParams = new HashMap<>(); infoParams.put("id", id); - return sqlSession.selectOne(NS + "get_batch_info", infoParams); + return sqlSession.selectOne(NS + "getBatchInfo", infoParams); } return params; } @@ -47,16 +47,16 @@ public class BatchService extends BaseService { @Transactional public Map updateBatch(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_batch", params); + sqlSession.update(NS + "updateBatch", params); Map infoParams = new HashMap<>(); infoParams.put("id", params.get("id")); - return sqlSession.selectOne(NS + "get_batch_info", infoParams); + return sqlSession.selectOne(NS + "getBatchInfo", infoParams); } @Transactional public int deleteBatch(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.delete(NS + "delete_batch", params); + return sqlSession.delete(NS + "deleteBatch", params); } public List> getConnections(String companyCode) { @@ -73,7 +73,7 @@ public class BatchService extends BaseService { params.put("company_code", companyCode); params.put("is_active", "Y"); commonService.applyCompanyCodeFilter(params); - List> externalConns = sqlSession.selectList(EXT_NS + "get_external_db_connection_list", params); + List> externalConns = sqlSession.selectList(EXT_NS + "getExternalDbConnectionList", params); for (Map conn : externalConns) { Map item = new LinkedHashMap<>(); item.put("id", conn.get("id")); @@ -91,7 +91,7 @@ public class BatchService extends BaseService { public List> getTables(String type, Long connectionId) { if ("internal".equals(type)) { - return sqlSession.selectList(NS + "get_internal_tables"); + return sqlSession.selectList(NS + "getInternalTables"); } return new ArrayList<>(); } @@ -100,7 +100,7 @@ public class BatchService extends BaseService { if ("internal".equals(type)) { Map params = new HashMap<>(); params.put("table_name", tableName); - return sqlSession.selectList(NS + "get_internal_table_columns", params); + return sqlSession.selectList(NS + "getInternalTableColumns", params); } return new ArrayList<>(); } diff --git a/backend-spring/src/main/java/com/erp/service/BomService.java b/backend-spring/src/main/java/com/erp/service/BomService.java index 3dace3a7..eff67813 100644 --- a/backend-spring/src/main/java/com/erp/service/BomService.java +++ b/backend-spring/src/main/java/com/erp/service/BomService.java @@ -25,34 +25,34 @@ public class BomService extends BaseService { public Map getBomList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_bom_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_bom_list", params); + int totalCount = sqlSession.selectOne(NS + "getBomListCnt", params); + List> list = sqlSession.selectList(NS + "getBomList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getBomInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_bom_info", params); + return sqlSession.selectOne(NS + "getBomInfo", params); } @Transactional public Map insertBom(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_bom", params); + sqlSession.insert(NS + "insertBom", params); return params; } @Transactional public Map updateBom(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_bom", params); + sqlSession.update(NS + "updateBom", params); return params; } @Transactional public Map deleteBom(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_bom", params); + sqlSession.delete(NS + "deleteBom", params); return params; } diff --git a/backend-spring/src/main/java/com/erp/service/ButtonActionStandardService.java b/backend-spring/src/main/java/com/erp/service/ButtonActionStandardService.java index d0afffd6..42969b69 100644 --- a/backend-spring/src/main/java/com/erp/service/ButtonActionStandardService.java +++ b/backend-spring/src/main/java/com/erp/service/ButtonActionStandardService.java @@ -23,7 +23,7 @@ public class ButtonActionStandardService extends BaseService { * 버튼 액션 목록 조회 (동적 필터) */ public List> getButtonActions(Map params) { - List> rows = sqlSession.selectList(NS + "select_button_actions", params); + List> rows = sqlSession.selectList(NS + "selectButtonActions", params); rows.forEach(this::parseJsonFields); return rows; } @@ -32,7 +32,7 @@ public class ButtonActionStandardService extends BaseService { * 버튼 액션 단건 조회 */ public Map getButtonAction(Map params) { - Map row = sqlSession.selectOne(NS + "select_button_action_by_type", params); + Map row = sqlSession.selectOne(NS + "selectButtonActionByType", params); if (row != null) parseJsonFields(row); return row; } @@ -43,7 +43,7 @@ public class ButtonActionStandardService extends BaseService { @Transactional public Map createButtonAction(Map params) { // 중복 체크 - Map existing = sqlSession.selectOne(NS + "select_button_action_by_type", params); + Map existing = sqlSession.selectOne(NS + "selectButtonActionByType", params); if (existing != null) { throw new IllegalArgumentException("이미 존재하는 액션 타입입니다: " + params.get("action_type")); } @@ -59,11 +59,11 @@ public class ButtonActionStandardService extends BaseService { params.putIfAbsent("sort_order", 0); params.putIfAbsent("is_active", "Y"); - sqlSession.insert(NS + "insert_button_action", params); + sqlSession.insert(NS + "insertButtonAction", params); // 삽입된 행 조회 후 반환 (actionType 키로 조회) params.put("action_type", params.get("action_type")); - Map created = sqlSession.selectOne(NS + "select_button_action_by_type", params); + Map created = sqlSession.selectOne(NS + "selectButtonActionByType", params); if (created != null) parseJsonFields(created); return created; } @@ -74,7 +74,7 @@ public class ButtonActionStandardService extends BaseService { @Transactional public Map updateButtonAction(Map params) { // 존재 여부 확인 - Map existing = sqlSession.selectOne(NS + "select_button_action_by_type", params); + Map existing = sqlSession.selectOne(NS + "selectButtonActionByType", params); if (existing == null) { return null; } @@ -83,9 +83,9 @@ public class ButtonActionStandardService extends BaseService { serializeJsonField(params, "validation_rules"); serializeJsonField(params, "action_config"); - sqlSession.update(NS + "update_button_action", params); + sqlSession.update(NS + "updateButtonAction", params); - Map updated = sqlSession.selectOne(NS + "select_button_action_by_type", params); + Map updated = sqlSession.selectOne(NS + "selectButtonActionByType", params); if (updated != null) parseJsonFields(updated); return updated; } @@ -95,11 +95,11 @@ public class ButtonActionStandardService extends BaseService { */ @Transactional public boolean deleteButtonAction(Map params) { - Map existing = sqlSession.selectOne(NS + "select_button_action_by_type", params); + Map existing = sqlSession.selectOne(NS + "selectButtonActionByType", params); if (existing == null) { return false; } - sqlSession.delete(NS + "delete_button_action", params); + sqlSession.delete(NS + "deleteButtonAction", params); return true; } @@ -110,7 +110,7 @@ public class ButtonActionStandardService extends BaseService { public void updateSortOrder(List> items, String userId) { for (Map item : items) { item.put("updated_by", userId); - sqlSession.update(NS + "update_sort_order_item", item); + sqlSession.update(NS + "updateSortOrderItem", item); } } @@ -118,7 +118,7 @@ public class ButtonActionStandardService extends BaseService { * 카테고리 목록 조회 (카운트 포함) */ public List> getCategories(Map params) { - List> rows = sqlSession.selectList(NS + "select_categories", params); + List> rows = sqlSession.selectList(NS + "selectCategories", params); // count 필드를 Integer로 변환 rows.forEach(row -> { Object cnt = row.get("count"); diff --git a/backend-spring/src/main/java/com/erp/service/CascadingAutoFillService.java b/backend-spring/src/main/java/com/erp/service/CascadingAutoFillService.java index 021cd4f8..935c86a0 100644 --- a/backend-spring/src/main/java/com/erp/service/CascadingAutoFillService.java +++ b/backend-spring/src/main/java/com/erp/service/CascadingAutoFillService.java @@ -23,20 +23,20 @@ public class CascadingAutoFillService extends BaseService { public Map getCascadingAutoFillGroupList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_cascading_auto_fill_group_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_cascading_auto_fill_group_list", params); + int totalCount = sqlSession.selectOne(NS + "getCascadingAutoFillGroupListCnt", params); + List> list = sqlSession.selectList(NS + "getCascadingAutoFillGroupList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getCascadingAutoFillGroupDetail(Map params) { commonService.applyCompanyCodeFilter(params); - Map group = sqlSession.selectOne(NS + "get_cascading_auto_fill_group_by_code", params); + Map group = sqlSession.selectOne(NS + "getCascadingAutoFillGroupByCode", params); if (group == null) return null; Map mappingParams = new HashMap<>(); mappingParams.put("group_code", params.get("group_code")); mappingParams.put("company_code", group.get("company_code")); - List> mappings = sqlSession.selectList(NS + "get_cascading_auto_fill_mapping_list", mappingParams); + List> mappings = sqlSession.selectList(NS + "getCascadingAutoFillMappingList", mappingParams); Map result = new HashMap<>(group); result.put("mappings", mappings); @@ -51,7 +51,7 @@ public class CascadingAutoFillService extends BaseService { // Generate group code: AF_{timestamp_base36}_{count:03d} Map countParams = new HashMap<>(); countParams.put("company_code", companyCode); - Number cntNum = sqlSession.selectOne(NS + "get_cascading_auto_fill_group_count", countParams); + Number cntNum = sqlSession.selectOne(NS + "getCascadingAutoFillGroupCount", countParams); int count = (cntNum != null ? cntNum.intValue() : 0) + 1; String timestamp = Long.toString(System.currentTimeMillis(), 36).toUpperCase(); String suffix = timestamp.substring(Math.max(0, timestamp.length() - 4)); @@ -62,7 +62,7 @@ public class CascadingAutoFillService extends BaseService { params.put("is_active", "Y"); } - sqlSession.insert(NS + "insert_cascading_auto_fill_group", params); + sqlSession.insert(NS + "insertCascadingAutoFillGroup", params); // Insert mappings Object mappingsObj = params.get("mappings"); @@ -79,7 +79,7 @@ public class CascadingAutoFillService extends BaseService { if (mp.get("is_editable") == null) mp.put("is_editable", "Y"); if (mp.get("is_required") == null) mp.put("is_required", "N"); if (mp.get("sort_order") == null) mp.put("sort_order", i + 1); - sqlSession.insert(NS + "insert_cascading_auto_fill_mapping", mp); + sqlSession.insert(NS + "insertCascadingAutoFillMapping", mp); } } } @@ -91,20 +91,20 @@ public class CascadingAutoFillService extends BaseService { commonService.applyCompanyCodeFilter(params); String groupCode = (String) params.get("group_code"); - Map existing = sqlSession.selectOne(NS + "get_cascading_auto_fill_group_by_code", params); + Map existing = sqlSession.selectOne(NS + "getCascadingAutoFillGroupByCode", params); if (existing == null) return null; String actualCompanyCode = (String) existing.get("company_code"); params.put("company_code", actualCompanyCode); - sqlSession.update(NS + "update_cascading_auto_fill_group", params); + sqlSession.update(NS + "updateCascadingAutoFillGroup", params); // Replace mappings if provided if (params.containsKey("mappings")) { Map delParams = new HashMap<>(); delParams.put("group_code", groupCode); delParams.put("company_code", actualCompanyCode); - sqlSession.delete(NS + "delete_cascading_auto_fill_mappings", delParams); + sqlSession.delete(NS + "deleteCascadingAutoFillMappings", delParams); Object mappingsObj = params.get("mappings"); if (mappingsObj instanceof List) { @@ -120,7 +120,7 @@ public class CascadingAutoFillService extends BaseService { if (mp.get("is_editable") == null) mp.put("is_editable", "Y"); if (mp.get("is_required") == null) mp.put("is_required", "N"); if (mp.get("sort_order") == null) mp.put("sort_order", i + 1); - sqlSession.insert(NS + "insert_cascading_auto_fill_mapping", mp); + sqlSession.insert(NS + "insertCascadingAutoFillMapping", mp); } } } @@ -131,7 +131,7 @@ public class CascadingAutoFillService extends BaseService { @Transactional public boolean deleteCascadingAutoFillGroup(Map params) { commonService.applyCompanyCodeFilter(params); - Map existing = sqlSession.selectOne(NS + "get_cascading_auto_fill_group_by_code", params); + Map existing = sqlSession.selectOne(NS + "getCascadingAutoFillGroupByCode", params); if (existing == null) return false; String groupCode = (String) params.get("group_code"); @@ -140,8 +140,8 @@ public class CascadingAutoFillService extends BaseService { Map delParams = new HashMap<>(); delParams.put("group_code", groupCode); delParams.put("company_code", companyCode); - sqlSession.delete(NS + "delete_cascading_auto_fill_mappings", delParams); - sqlSession.delete(NS + "delete_cascading_auto_fill_group", delParams); + sqlSession.delete(NS + "deleteCascadingAutoFillMappings", delParams); + sqlSession.delete(NS + "deleteCascadingAutoFillGroup", delParams); return true; } @@ -151,7 +151,7 @@ public class CascadingAutoFillService extends BaseService { Map groupParams = new HashMap<>(params); groupParams.put("is_active", "Y"); - Map group = sqlSession.selectOne(NS + "get_cascading_auto_fill_group_by_code", groupParams); + Map group = sqlSession.selectOne(NS + "getCascadingAutoFillGroupByCode", groupParams); if (group == null) return null; String masterTable = sanitizeIdentifier((String) group.get("master_table")); @@ -185,14 +185,14 @@ public class CascadingAutoFillService extends BaseService { Map groupParams = new HashMap<>(params); groupParams.put("is_active", "Y"); - Map group = sqlSession.selectOne(NS + "get_cascading_auto_fill_group_by_code", groupParams); + Map group = sqlSession.selectOne(NS + "getCascadingAutoFillGroupByCode", groupParams); if (group == null) return null; String actualCompanyCode = (String) group.get("company_code"); Map mappingParams = new HashMap<>(); mappingParams.put("group_code", groupCode); mappingParams.put("company_code", actualCompanyCode); - List> mappings = sqlSession.selectList(NS + "get_cascading_auto_fill_mapping_list", mappingParams); + List> mappings = sqlSession.selectList(NS + "getCascadingAutoFillMappingList", mappingParams); if (mappings.isEmpty()) { Map empty = new HashMap<>(); diff --git a/backend-spring/src/main/java/com/erp/service/CascadingConditionService.java b/backend-spring/src/main/java/com/erp/service/CascadingConditionService.java index d1190b90..210a905f 100644 --- a/backend-spring/src/main/java/com/erp/service/CascadingConditionService.java +++ b/backend-spring/src/main/java/com/erp/service/CascadingConditionService.java @@ -24,34 +24,34 @@ public class CascadingConditionService extends BaseService { public Map getCascadingConditionList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_cascading_condition_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_cascading_condition_list", params); + int totalCount = sqlSession.selectOne(NS + "getCascadingConditionListCnt", params); + List> list = sqlSession.selectList(NS + "getCascadingConditionList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getCascadingConditionInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_cascading_condition_info", params); + return sqlSession.selectOne(NS + "getCascadingConditionInfo", params); } @Transactional public Map insertCascadingCondition(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_cascading_condition", params); + sqlSession.insert(NS + "insertCascadingCondition", params); return params; } @Transactional public Map updateCascadingCondition(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_cascading_condition", params); + sqlSession.update(NS + "updateCascadingCondition", params); return params; } @Transactional public Map deleteCascadingCondition(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_cascading_condition", params); + sqlSession.delete(NS + "deleteCascadingCondition", params); return params; } @@ -73,7 +73,7 @@ public class CascadingConditionService extends BaseService { } // 2. 조건 규칙 조회 (우선순위 내림차순) - List> conditions = sqlSession.selectList(NS + "get_cascading_conditions_by_relation_code", params); + List> conditions = sqlSession.selectList(NS + "getCascadingConditionsByRelationCode", params); // 3. 매칭 조건 탐색 Map matchedCondition = null; diff --git a/backend-spring/src/main/java/com/erp/service/CascadingHierarchyService.java b/backend-spring/src/main/java/com/erp/service/CascadingHierarchyService.java index b7992e2d..abda63c1 100644 --- a/backend-spring/src/main/java/com/erp/service/CascadingHierarchyService.java +++ b/backend-spring/src/main/java/com/erp/service/CascadingHierarchyService.java @@ -21,20 +21,20 @@ public class CascadingHierarchyService extends BaseService { public Map getCascadingHierarchyGroupList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_cascading_hierarchy_group_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_cascading_hierarchy_group_list", params); + int totalCount = sqlSession.selectOne(NS + "getCascadingHierarchyGroupListCnt", params); + List> list = sqlSession.selectList(NS + "getCascadingHierarchyGroupList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getCascadingHierarchyGroupDetail(Map params) { commonService.applyCompanyCodeFilter(params); - Map group = sqlSession.selectOne(NS + "get_cascading_hierarchy_group_by_code", params); + Map group = sqlSession.selectOne(NS + "getCascadingHierarchyGroupByCode", params); if (group == null) return null; Map levelParams = new HashMap<>(); levelParams.put("group_code", params.get("group_code")); levelParams.put("company_code", group.get("company_code")); - List> levels = sqlSession.selectList(NS + "get_cascading_hierarchy_level_list", levelParams); + List> levels = sqlSession.selectList(NS + "getCascadingHierarchyLevelList", levelParams); Map result = new HashMap<>(group); result.put("levels", levels); @@ -50,7 +50,7 @@ public class CascadingHierarchyService extends BaseService { // Generate group code: HG_{timestamp_base36}_{count:03d} Map countParams = new HashMap<>(); countParams.put("company_code", companyCode); - Number cntNum = sqlSession.selectOne(NS + "get_cascading_hierarchy_group_count", countParams); + Number cntNum = sqlSession.selectOne(NS + "getCascadingHierarchyGroupCount", countParams); int count = (cntNum != null ? cntNum.intValue() : 0) + 1; String timestamp = Long.toString(System.currentTimeMillis(), 36).toUpperCase(); String suffix = timestamp.substring(Math.max(0, timestamp.length() - 4)); @@ -65,7 +65,7 @@ public class CascadingHierarchyService extends BaseService { if (params.get("no_options_message") == null) params.put("no_options_message", "옵션이 없습니다"); if (params.get("loading_message") == null) params.put("loading_message", "로딩 중..."); - sqlSession.insert(NS + "insert_cascading_hierarchy_group", params); + sqlSession.insert(NS + "insertCascadingHierarchyGroup", params); // Insert levels for MULTI_TABLE type Object levelsObj = params.get("levels"); @@ -84,7 +84,7 @@ public class CascadingHierarchyService extends BaseService { if (lp.get("placeholder") == null && lp.get("level_name") != null) { lp.put("placeholder", lp.get("level_name") + " 선택"); } - sqlSession.insert(NS + "insert_cascading_hierarchy_level", lp); + sqlSession.insert(NS + "insertCascadingHierarchyLevel", lp); } } } @@ -96,18 +96,18 @@ public class CascadingHierarchyService extends BaseService { commonService.applyCompanyCodeFilter(params); params.put("updated_by", params.getOrDefault("user_id", "system")); - Map existing = sqlSession.selectOne(NS + "get_cascading_hierarchy_group_by_code", params); + Map existing = sqlSession.selectOne(NS + "getCascadingHierarchyGroupByCode", params); if (existing == null) return null; params.put("company_code", existing.get("company_code")); - sqlSession.update(NS + "update_cascading_hierarchy_group", params); + sqlSession.update(NS + "updateCascadingHierarchyGroup", params); return params; } @Transactional public boolean deleteCascadingHierarchyGroup(Map params) { commonService.applyCompanyCodeFilter(params); - Map existing = sqlSession.selectOne(NS + "get_cascading_hierarchy_group_by_code", params); + Map existing = sqlSession.selectOne(NS + "getCascadingHierarchyGroupByCode", params); if (existing == null) return false; String groupCode = (String) params.get("group_code"); @@ -116,8 +116,8 @@ public class CascadingHierarchyService extends BaseService { Map delParams = new HashMap<>(); delParams.put("group_code", groupCode); delParams.put("company_code", companyCode); - sqlSession.delete(NS + "delete_cascading_hierarchy_levels", delParams); - sqlSession.delete(NS + "delete_cascading_hierarchy_group", delParams); + sqlSession.delete(NS + "deleteCascadingHierarchyLevels", delParams); + sqlSession.delete(NS + "deleteCascadingHierarchyGroup", delParams); return true; } @@ -129,7 +129,7 @@ public class CascadingHierarchyService extends BaseService { Map groupParams = new HashMap<>(); groupParams.put("group_code", groupCode); groupParams.put("company_code", params.get("company_code")); - Map group = sqlSession.selectOne(NS + "get_cascading_hierarchy_group_by_code", groupParams); + Map group = sqlSession.selectOne(NS + "getCascadingHierarchyGroupByCode", groupParams); if (group == null) return null; params.put("company_code", group.get("company_code")); @@ -140,27 +140,27 @@ public class CascadingHierarchyService extends BaseService { params.put("placeholder", params.get("level_name") + " 선택"); } - sqlSession.insert(NS + "insert_cascading_hierarchy_level", params); + sqlSession.insert(NS + "insertCascadingHierarchyLevel", params); return params; } @Transactional public Map updateCascadingHierarchyLevel(Map params) { commonService.applyCompanyCodeFilter(params); - Map existing = sqlSession.selectOne(NS + "get_cascading_hierarchy_level_info", params); + Map existing = sqlSession.selectOne(NS + "getCascadingHierarchyLevelInfo", params); if (existing == null) return null; - sqlSession.update(NS + "update_cascading_hierarchy_level", params); + sqlSession.update(NS + "updateCascadingHierarchyLevel", params); return params; } @Transactional public boolean deleteCascadingHierarchyLevel(Map params) { commonService.applyCompanyCodeFilter(params); - Map existing = sqlSession.selectOne(NS + "get_cascading_hierarchy_level_info", params); + Map existing = sqlSession.selectOne(NS + "getCascadingHierarchyLevelInfo", params); if (existing == null) return false; - sqlSession.delete(NS + "delete_cascading_hierarchy_level", params); + sqlSession.delete(NS + "deleteCascadingHierarchyLevel", params); return true; } @@ -168,7 +168,7 @@ public class CascadingHierarchyService extends BaseService { commonService.applyCompanyCodeFilter(params); String companyCode = (String) params.get("company_code"); - Map level = sqlSession.selectOne(NS + "get_cascading_hierarchy_level_for_options", params); + Map level = sqlSession.selectOne(NS + "getCascadingHierarchyLevelForOptions", params); if (level == null) return null; String tableName = sanitizeIdentifier((String) level.get("table_name")); diff --git a/backend-spring/src/main/java/com/erp/service/CascadingMutualExclusionService.java b/backend-spring/src/main/java/com/erp/service/CascadingMutualExclusionService.java index bd38370b..c06c5bb9 100644 --- a/backend-spring/src/main/java/com/erp/service/CascadingMutualExclusionService.java +++ b/backend-spring/src/main/java/com/erp/service/CascadingMutualExclusionService.java @@ -21,14 +21,14 @@ public class CascadingMutualExclusionService extends BaseService { public Map getCascadingMutualExclusionList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_cascading_mutual_exclusion_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_cascading_mutual_exclusion_list", params); + int totalCount = sqlSession.selectOne(NS + "getCascadingMutualExclusionListCnt", params); + List> list = sqlSession.selectList(NS + "getCascadingMutualExclusionList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getCascadingMutualExclusionInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_cascading_mutual_exclusion_info", params); + return sqlSession.selectOne(NS + "getCascadingMutualExclusionInfo", params); } @Transactional @@ -41,26 +41,26 @@ public class CascadingMutualExclusionService extends BaseService { String companyCode = (String) params.get("company_code"); Map countParams = new LinkedHashMap<>(); countParams.put("company_code", companyCode); - int count = sqlSession.selectOne(NS + "get_cascading_mutual_exclusion_count", countParams); + int count = sqlSession.selectOne(NS + "getCascadingMutualExclusionCount", countParams); String ts = Long.toString(System.currentTimeMillis(), 36).toUpperCase(); ts = ts.substring(Math.max(0, ts.length() - 4)); params.put("exclusion_code", String.format("EX_%s_%03d", ts, count + 1)); - sqlSession.insert(NS + "insert_cascading_mutual_exclusion", params); + sqlSession.insert(NS + "insertCascadingMutualExclusion", params); return params; } @Transactional public Map updateCascadingMutualExclusion(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_cascading_mutual_exclusion", params); + sqlSession.update(NS + "updateCascadingMutualExclusion", params); return params; } @Transactional public Map deleteCascadingMutualExclusion(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_cascading_mutual_exclusion", params); + sqlSession.delete(NS + "deleteCascadingMutualExclusion", params); return params; } @@ -69,7 +69,7 @@ public class CascadingMutualExclusionService extends BaseService { */ public Map validateCascadingMutualExclusion(Map params) { commonService.applyCompanyCodeFilter(params); - Map exclusion = sqlSession.selectOne(NS + "get_cascading_mutual_exclusion_by_code", params); + Map exclusion = sqlSession.selectOne(NS + "getCascadingMutualExclusionByCode", params); if (exclusion == null) throw new NoSuchElementException("상호 배제 규칙을 찾을 수 없습니다."); @SuppressWarnings("unchecked") @@ -125,7 +125,7 @@ public class CascadingMutualExclusionService extends BaseService { commonService.applyCompanyCodeFilter(params); String companyCode = (String) params.get("company_code"); - Map exclusion = sqlSession.selectOne(NS + "get_cascading_mutual_exclusion_by_code", params); + Map exclusion = sqlSession.selectOne(NS + "getCascadingMutualExclusionByCode", params); if (exclusion == null) throw new NoSuchElementException("상호 배제 규칙을 찾을 수 없습니다."); String sourceTable = (String) exclusion.get("source_table"); diff --git a/backend-spring/src/main/java/com/erp/service/CascadingRelationService.java b/backend-spring/src/main/java/com/erp/service/CascadingRelationService.java index fed26ac4..7b340f30 100644 --- a/backend-spring/src/main/java/com/erp/service/CascadingRelationService.java +++ b/backend-spring/src/main/java/com/erp/service/CascadingRelationService.java @@ -22,19 +22,19 @@ public class CascadingRelationService extends BaseService { public Map getCascadingRelationList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_cascading_relation_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_cascading_relation_list", params); + int totalCount = sqlSession.selectOne(NS + "getCascadingRelationListCnt", params); + List> list = sqlSession.selectList(NS + "getCascadingRelationList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getCascadingRelationInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_cascading_relation_info", params); + return sqlSession.selectOne(NS + "getCascadingRelationInfo", params); } public Map getCascadingRelationByCode(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_cascading_relation_by_code", params); + return sqlSession.selectOne(NS + "getCascadingRelationByCode", params); } @Transactional @@ -55,7 +55,7 @@ public class CascadingRelationService extends BaseService { params.put("clear_on_parent_change", Boolean.TRUE.equals(clearOnParentChange) ? "Y" : "N"); } params.put("is_active", "Y"); - sqlSession.insert(NS + "insert_cascading_relation", params); + sqlSession.insert(NS + "insertCascadingRelation", params); return params; } @@ -70,14 +70,14 @@ public class CascadingRelationService extends BaseService { if (clearOnParentChange instanceof Boolean) { params.put("clear_on_parent_change", Boolean.TRUE.equals(clearOnParentChange) ? "Y" : "N"); } - sqlSession.update(NS + "update_cascading_relation", params); + sqlSession.update(NS + "updateCascadingRelation", params); return params; } @Transactional public Map deleteCascadingRelation(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "delete_cascading_relation", params); + sqlSession.update(NS + "deleteCascadingRelation", params); return params; } @@ -87,7 +87,7 @@ public class CascadingRelationService extends BaseService { public List> getParentOptions(Map params) { String companyCode = (String) params.get("company_code"); - Map relation = sqlSession.selectOne(NS + "get_cascading_relation_by_code", params); + Map relation = sqlSession.selectOne(NS + "getCascadingRelationByCode", params); if (relation == null) { throw new NoSuchElementException("연쇄 관계를 찾을 수 없습니다."); } @@ -145,7 +145,7 @@ public class CascadingRelationService extends BaseService { return Collections.emptyList(); } - Map relation = sqlSession.selectOne(NS + "get_cascading_relation_by_code", params); + Map relation = sqlSession.selectOne(NS + "getCascadingRelationByCode", params); if (relation == null) { throw new NoSuchElementException("연쇄 관계를 찾을 수 없습니다."); } diff --git a/backend-spring/src/main/java/com/erp/service/CategoryTreeService.java b/backend-spring/src/main/java/com/erp/service/CategoryTreeService.java index cb5beb83..c3025146 100644 --- a/backend-spring/src/main/java/com/erp/service/CategoryTreeService.java +++ b/backend-spring/src/main/java/com/erp/service/CategoryTreeService.java @@ -27,7 +27,7 @@ public class CategoryTreeService extends BaseService { params.put("company_code", companyCode); params.put("table_name", tableName); params.put("column_name", columnName); - List> flatList = sqlSession.selectList(NS + "get_category_tree_list", params); + List> flatList = sqlSession.selectList(NS + "getCategoryTreeList", params); return buildTree(flatList); } @@ -39,7 +39,7 @@ public class CategoryTreeService extends BaseService { params.put("company_code", companyCode); params.put("table_name", tableName); params.put("column_name", columnName); - return sqlSession.selectList(NS + "get_category_tree_list", params); + return sqlSession.selectList(NS + "getCategoryTreeList", params); } /** @@ -49,7 +49,7 @@ public class CategoryTreeService extends BaseService { Map params = new HashMap<>(); params.put("company_code", companyCode); params.put("value_id", valueId); - return sqlSession.selectOne(NS + "get_category_tree_info", params); + return sqlSession.selectOne(NS + "getCategoryTreeInfo", params); } /** @@ -75,7 +75,7 @@ public class CategoryTreeService extends BaseService { Map parentParams = new HashMap<>(); parentParams.put("company_code", companyCode); parentParams.put("value_id", ((Number) parentValueIdRaw).intValue()); - Map parent = sqlSession.selectOne(NS + "get_category_tree_info", parentParams); + Map parent = sqlSession.selectOne(NS + "getCategoryTreeInfo", parentParams); if (parent != null) { depth = ((Number) parent.get("depth")).intValue() + 1; if (depth > 3) { @@ -107,13 +107,13 @@ public class CategoryTreeService extends BaseService { params.put("company_code", companyCode); params.put("created_by", createdBy); - sqlSession.insert(NS + "insert_category_tree", params); + sqlSession.insert(NS + "insertCategoryTree", params); // useGeneratedKeys → params.get("value_id") 에 생성된 ID 저장 Map fetchParams = new HashMap<>(); fetchParams.put("company_code", companyCode); fetchParams.put("value_id", params.get("value_id")); - return sqlSession.selectOne(NS + "get_category_tree_info", fetchParams); + return sqlSession.selectOne(NS + "getCategoryTreeInfo", fetchParams); } /** @@ -125,7 +125,7 @@ public class CategoryTreeService extends BaseService { Map currentParams = new HashMap<>(); currentParams.put("company_code", companyCode); currentParams.put("value_id", valueId); - Map current = sqlSession.selectOne(NS + "get_category_tree_info", currentParams); + Map current = sqlSession.selectOne(NS + "getCategoryTreeInfo", currentParams); if (current == null) return null; String currentLabel = (String) current.get("value_label"); @@ -148,7 +148,7 @@ public class CategoryTreeService extends BaseService { Map newParentParams = new HashMap<>(); newParentParams.put("company_code", companyCode); newParentParams.put("value_id", ((Number) body.get("parent_value_id")).intValue()); - Map newParent = sqlSession.selectOne(NS + "get_category_tree_info", newParentParams); + Map newParent = sqlSession.selectOne(NS + "getCategoryTreeInfo", newParentParams); if (newParent != null) { newDepth = ((Number) newParent.get("depth")).intValue() + 1; if (newDepth > 3) { @@ -166,7 +166,7 @@ public class CategoryTreeService extends BaseService { Map parentParams = new HashMap<>(); parentParams.put("company_code", companyCode); parentParams.put("value_id", ((Number) currentParentId).intValue()); - Map parent = sqlSession.selectOne(NS + "get_category_tree_info", parentParams); + Map parent = sqlSession.selectOne(NS + "getCategoryTreeInfo", parentParams); String parentPath = parent != null ? (String) parent.get("path") : null; newPath = parentPath != null ? parentPath + "/" + newLabel : newLabel; } else { @@ -190,7 +190,7 @@ public class CategoryTreeService extends BaseService { updateParams.put("is_default", body.get("is_default")); updateParams.put("updated_by", updatedBy); - int affected = sqlSession.update(NS + "update_category_tree", updateParams); + int affected = sqlSession.update(NS + "updateCategoryTree", updateParams); if (affected == 0) return null; if (labelChanged || parentChanged) { @@ -200,7 +200,7 @@ public class CategoryTreeService extends BaseService { Map fetchParams = new HashMap<>(); fetchParams.put("company_code", companyCode); fetchParams.put("value_id", valueId); - return sqlSession.selectOne(NS + "get_category_tree_info", fetchParams); + return sqlSession.selectOne(NS + "getCategoryTreeInfo", fetchParams); } /** @@ -218,7 +218,7 @@ public class CategoryTreeService extends BaseService { Map childParams = new HashMap<>(); childParams.put("value_id", valueId); childParams.put("company_code", companyCode); - Integer childCountObj = sqlSession.selectOne(NS + "get_category_tree_children_cnt", childParams); + Integer childCountObj = sqlSession.selectOne(NS + "getCategoryTreeChildrenCnt", childParams); int childCount = childCountObj != null ? childCountObj : 0; if (childCount > 0) { Map res = new LinkedHashMap<>(); @@ -254,7 +254,7 @@ public class CategoryTreeService extends BaseService { Map childParams = new HashMap<>(); childParams.put("value_id", valueId); childParams.put("company_code", companyCode); - Integer childCountObj = sqlSession.selectOne(NS + "get_category_tree_children_cnt", childParams); + Integer childCountObj = sqlSession.selectOne(NS + "getCategoryTreeChildrenCnt", childParams); int childCount = childCountObj != null ? childCountObj : 0; if (childCount > 0) { throw new IllegalStateException( @@ -275,7 +275,7 @@ public class CategoryTreeService extends BaseService { Map deleteParams = new HashMap<>(); deleteParams.put("company_code", companyCode); deleteParams.put("value_id", valueId); - return sqlSession.delete(NS + "delete_category_tree", deleteParams) > 0; + return sqlSession.delete(NS + "deleteCategoryTree", deleteParams) > 0; } /** @@ -285,7 +285,7 @@ public class CategoryTreeService extends BaseService { Map params = new HashMap<>(); params.put("table_name", tableName); params.put("company_code", companyCode); - return sqlSession.selectList(NS + "get_category_tree_column_list", params); + return sqlSession.selectList(NS + "getCategoryTreeColumnList", params); } /** @@ -294,7 +294,7 @@ public class CategoryTreeService extends BaseService { public List> getCategoryTreeKeyList(String companyCode) { Map params = new HashMap<>(); params.put("company_code", companyCode); - return sqlSession.selectList(NS + "get_category_tree_key_list", params); + return sqlSession.selectList(NS + "getCategoryTreeKeyList", params); } // ─── private helpers ──────────────────────────────────────────────────────── @@ -336,7 +336,7 @@ public class CategoryTreeService extends BaseService { params.put("company_code", companyCode); params.put("parent_value_id", parentValueId); - List> children = sqlSession.selectList(NS + "get_category_tree_children_list", params); + List> children = sqlSession.selectList(NS + "getCategoryTreeChildrenList", params); for (Map child : children) { String valueLabel = (String) child.get("value_label"); String newPath = parentPath + "/" + valueLabel; @@ -344,7 +344,7 @@ public class CategoryTreeService extends BaseService { Map updateParams = new HashMap<>(); updateParams.put("value_id", child.get("value_id")); updateParams.put("path", newPath); - sqlSession.update(NS + "update_category_tree_child_path", updateParams); + sqlSession.update(NS + "updateCategoryTreeChildPath", updateParams); int childId = ((Number) child.get("value_id")).intValue(); updateChildrenPaths(companyCode, childId, newPath); @@ -366,21 +366,21 @@ public class CategoryTreeService extends BaseService { // 1. 테이블 존재 확인 Map tableParams = new HashMap<>(); tableParams.put("table_name", tableName); - Integer teObj = sqlSession.selectOne(NS + "check_table_exists", tableParams); + Integer teObj = sqlSession.selectOne(NS + "checkTableExists", tableParams); if (teObj == null || teObj == 0) return notInUse; // 2. 컬럼 존재 확인 Map colParams = new HashMap<>(); colParams.put("table_name", tableName); colParams.put("column_name", columnName); - Integer ceObj = sqlSession.selectOne(NS + "check_column_exists", colParams); + Integer ceObj = sqlSession.selectOne(NS + "checkColumnExists", colParams); if (ceObj == null || ceObj == 0) return notInUse; // 3. company_code 컬럼 존재 확인 Map companyColParams = new HashMap<>(); companyColParams.put("table_name", tableName); companyColParams.put("column_name", "company_code"); - Integer ccObj = sqlSession.selectOne(NS + "check_column_exists", companyColParams); + Integer ccObj = sqlSession.selectOne(NS + "checkColumnExists", companyColParams); boolean hasCompanyCode = ccObj != null && ccObj > 0; // 4. 사용 건수 조회 @@ -391,14 +391,14 @@ public class CategoryTreeService extends BaseService { countParams.put("column_name", columnName); countParams.put("company_code", companyCode); countParams.put("value_code", valueCode); - Integer cntObj = sqlSession.selectOne(NS + "count_category_usage_with_company", countParams); + Integer cntObj = sqlSession.selectOne(NS + "countCategoryUsageWithCompany", countParams); count = cntObj != null ? cntObj : 0; } else { Map countParams = new HashMap<>(); countParams.put("table_name", tableName); countParams.put("column_name", columnName); countParams.put("value_code", valueCode); - Integer cntObj = sqlSession.selectOne(NS + "count_category_usage", countParams); + Integer cntObj = sqlSession.selectOne(NS + "countCategoryUsage", countParams); count = cntObj != null ? cntObj : 0; } diff --git a/backend-spring/src/main/java/com/erp/service/CategoryValueCascadingService.java b/backend-spring/src/main/java/com/erp/service/CategoryValueCascadingService.java index a3288458..475ee5ca 100644 --- a/backend-spring/src/main/java/com/erp/service/CategoryValueCascadingService.java +++ b/backend-spring/src/main/java/com/erp/service/CategoryValueCascadingService.java @@ -23,17 +23,17 @@ public class CategoryValueCascadingService extends BaseService { public Map getCategoryValueCascadingGroupList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_category_value_cascading_group_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_category_value_cascading_group_list", params); + int totalCount = sqlSession.selectOne(NS + "getCategoryValueCascadingGroupListCnt", params); + List> list = sqlSession.selectList(NS + "getCategoryValueCascadingGroupList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getCategoryValueCascadingGroupInfo(Map params) { commonService.applyCompanyCodeFilter(params); - Map group = sqlSession.selectOne(NS + "get_category_value_cascading_group_info", params); + Map group = sqlSession.selectOne(NS + "getCategoryValueCascadingGroupInfo", params); if (group == null) return null; - List> mappings = sqlSession.selectList(NS + "get_category_value_cascading_mappings_by_group_id", params); + List> mappings = sqlSession.selectList(NS + "getCategoryValueCascadingMappingsByGroupId", params); Map>> mappingsByParent = new LinkedHashMap<>(); for (Map m : mappings) { @@ -53,27 +53,27 @@ public class CategoryValueCascadingService extends BaseService { public Map getCategoryValueCascadingGroupByCode(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_category_value_cascading_group_by_code", params); + return sqlSession.selectOne(NS + "getCategoryValueCascadingGroupByCode", params); } @Transactional public Map insertCategoryValueCascadingGroup(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_category_value_cascading_group", params); + sqlSession.insert(NS + "insertCategoryValueCascadingGroup", params); return params; } @Transactional public Map updateCategoryValueCascadingGroup(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_category_value_cascading_group", params); + sqlSession.update(NS + "updateCategoryValueCascadingGroup", params); return params; } @Transactional public Map deleteCategoryValueCascadingGroup(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "delete_category_value_cascading_group", params); + sqlSession.update(NS + "deleteCategoryValueCascadingGroup", params); return params; } @@ -84,7 +84,7 @@ public class CategoryValueCascadingService extends BaseService { String companyCode = (String) params.get("company_code"); Object groupId = params.get("group_id"); - sqlSession.delete(NS + "delete_category_value_cascading_mappings_by_group_id", params); + sqlSession.delete(NS + "deleteCategoryValueCascadingMappingsByGroupId", params); int savedCount = 0; Object mappingsObj = params.get("mappings"); @@ -94,7 +94,7 @@ public class CategoryValueCascadingService extends BaseService { Map mappingParams = new HashMap<>(mapping); mappingParams.put("group_id", groupId); mappingParams.put("company_code", companyCode); - sqlSession.insert(NS + "insert_category_value_cascading_mapping", mappingParams); + sqlSession.insert(NS + "insertCategoryValueCascadingMapping", mappingParams); savedCount++; } } @@ -109,7 +109,7 @@ public class CategoryValueCascadingService extends BaseService { commonService.applyCompanyCodeFilter(params); String companyCode = (String) params.get("company_code"); - Map group = sqlSession.selectOne(NS + "get_category_value_cascading_group_by_code", params); + Map group = sqlSession.selectOne(NS + "getCategoryValueCascadingGroupByCode", params); if (group == null) { Map result = new LinkedHashMap<>(); result.put("data", Collections.emptyList()); @@ -145,7 +145,7 @@ public class CategoryValueCascadingService extends BaseService { commonService.applyCompanyCodeFilter(params); String companyCode = (String) params.get("company_code"); - Map group = sqlSession.selectOne(NS + "get_category_value_cascading_group_by_code", params); + Map group = sqlSession.selectOne(NS + "getCategoryValueCascadingGroupByCode", params); if (group == null) { Map result = new LinkedHashMap<>(); result.put("data", Collections.emptyList()); @@ -199,7 +199,7 @@ public class CategoryValueCascadingService extends BaseService { return result; } - Map group = sqlSession.selectOne(NS + "get_category_value_cascading_group_by_code", params); + Map group = sqlSession.selectOne(NS + "getCategoryValueCascadingGroupByCode", params); if (group == null) { Map result = new LinkedHashMap<>(); result.put("data", Collections.emptyList()); diff --git a/backend-spring/src/main/java/com/erp/service/CodeMergeService.java b/backend-spring/src/main/java/com/erp/service/CodeMergeService.java index 4939c5a9..0b4f6bc8 100644 --- a/backend-spring/src/main/java/com/erp/service/CodeMergeService.java +++ b/backend-spring/src/main/java/com/erp/service/CodeMergeService.java @@ -28,7 +28,7 @@ public class CodeMergeService extends BaseService { public Map getTablesWithColumn(String columnName) { Map params = new HashMap<>(); params.put("column_name", columnName); - List> rows = sqlSession.selectList(NS + "get_tables_with_column", params); + List> rows = sqlSession.selectList(NS + "getTablesWithColumn", params); List tables = rows.stream() .map(r -> { @@ -64,7 +64,7 @@ public class CodeMergeService extends BaseService { Map params = new HashMap<>(); params.put("column_name", columnName); - List> tableRows = sqlSession.selectList(NS + "get_tables_with_column", params); + List> tableRows = sqlSession.selectList(NS + "getTablesWithColumn", params); List> preview = new ArrayList<>(); int totalRows = 0; diff --git a/backend-spring/src/main/java/com/erp/service/CommonCodeService.java b/backend-spring/src/main/java/com/erp/service/CommonCodeService.java index d30d4b84..99156036 100644 --- a/backend-spring/src/main/java/com/erp/service/CommonCodeService.java +++ b/backend-spring/src/main/java/com/erp/service/CommonCodeService.java @@ -34,8 +34,8 @@ public class CommonCodeService extends BaseService { Object isActiveRaw = params.get("is_active"); if (isActiveRaw != null) params.put("is_active", toActiveStr(isActiveRaw)); - List> categories = sqlSession.selectList(NS + "get_common_code_category_list", params); - Integer totalObj = sqlSession.selectOne(NS + "get_common_code_category_list_cnt", params); + List> categories = sqlSession.selectList(NS + "getCommonCodeCategoryList", params); + Integer totalObj = sqlSession.selectOne(NS + "getCommonCodeCategoryListCnt", params); int total = totalObj != null ? totalObj : 0; Map result = new LinkedHashMap<>(); @@ -62,7 +62,7 @@ public class CommonCodeService extends BaseService { params.put("value", value.trim()); params.put("exclude_code", excludeCode); params.put("company_code", companyCode); - Integer countObj = sqlSession.selectOne(NS + "get_common_code_category_duplicate_by_field", params); + Integer countObj = sqlSession.selectOne(NS + "getCommonCodeCategoryDuplicateByField", params); boolean isDuplicate = countObj != null && countObj > 0; Map result = new LinkedHashMap<>(); @@ -89,12 +89,12 @@ public class CommonCodeService extends BaseService { params.put("created_by", userId); params.put("updated_by", userId); - sqlSession.insert(NS + "insert_common_code_category", params); + sqlSession.insert(NS + "insertCommonCodeCategory", params); Map q = new HashMap<>(); q.put("category_code", params.get("category_code")); q.put("company_code", companyCode); - return sqlSession.selectOne(NS + "get_common_code_category_info", q); + return sqlSession.selectOne(NS + "getCommonCodeCategoryInfo", q); } // ══════════════════════════════════════════════════════════════ @@ -115,13 +115,13 @@ public class CommonCodeService extends BaseService { if (body.containsKey("sort_order")) params.put("sort_order", body.get("sort_order")); if (body.containsKey("is_active")) params.put("is_active", toActiveStr(body.get("is_active"))); - int updated = sqlSession.update(NS + "update_common_code_category", params); + int updated = sqlSession.update(NS + "updateCommonCodeCategory", params); if (updated == 0) return null; Map q = new HashMap<>(); q.put("category_code", categoryCode); q.put("company_code", companyCode); - return sqlSession.selectOne(NS + "get_common_code_category_info", q); + return sqlSession.selectOne(NS + "getCommonCodeCategoryInfo", q); } // ══════════════════════════════════════════════════════════════ @@ -133,7 +133,7 @@ public class CommonCodeService extends BaseService { Map params = new HashMap<>(); params.put("category_code", categoryCode); params.put("company_code", companyCode); - int deleted = sqlSession.delete(NS + "delete_common_code_category", params); + int deleted = sqlSession.delete(NS + "deleteCommonCodeCategory", params); if (deleted == 0) throw new IllegalArgumentException("카테고리를 찾을 수 없습니다."); } @@ -151,8 +151,8 @@ public class CommonCodeService extends BaseService { Object isActiveRaw = params.get("is_active"); if (isActiveRaw != null) params.put("is_active", toActiveStr(isActiveRaw)); - List> rawList = sqlSession.selectList(NS + "get_common_code_list", params); - Integer totalObj = sqlSession.selectOne(NS + "get_common_code_list_cnt", params); + List> rawList = sqlSession.selectList(NS + "getCommonCodeList", params); + Integer totalObj = sqlSession.selectOne(NS + "getCommonCodeListCnt", params); int total = totalObj != null ? totalObj : 0; List> codes = new ArrayList<>(); @@ -185,7 +185,7 @@ public class CommonCodeService extends BaseService { params.put("value", value.trim()); params.put("exclude_code", excludeCode); params.put("company_code", companyCode); - Integer countObj = sqlSession.selectOne(NS + "get_common_code_duplicate_by_field", params); + Integer countObj = sqlSession.selectOne(NS + "getCommonCodeDuplicateByField", params); boolean isDuplicate = countObj != null && countObj > 0; Map result = new LinkedHashMap<>(); @@ -209,7 +209,7 @@ public class CommonCodeService extends BaseService { parentParams.put("category_code", categoryCode); parentParams.put("code_value", parentCodeValueRaw.toString()); parentParams.put("company_code", companyCode); - Integer parentDepth = sqlSession.selectOne(NS + "get_common_code_parent_depth", parentParams); + Integer parentDepth = sqlSession.selectOne(NS + "getCommonCodeParentDepth", parentParams); depth = (parentDepth != null ? parentDepth : 0) + 1; } @@ -228,13 +228,13 @@ public class CommonCodeService extends BaseService { params.put("created_by", userId); params.put("updated_by", userId); - sqlSession.insert(NS + "insert_common_code", params); + sqlSession.insert(NS + "insertCommonCode", params); Map q = new HashMap<>(); q.put("category_code", categoryCode); q.put("code_value", params.get("code_value")); q.put("company_code", companyCode); - Map raw = sqlSession.selectOne(NS + "get_common_code_info", q); + Map raw = sqlSession.selectOne(NS + "getCommonCodeInfo", q); return raw != null ? transformCode(raw) : null; } @@ -250,7 +250,7 @@ public class CommonCodeService extends BaseService { params.put("code_value", code.get("code_value")); params.put("sort_order", code.get("sort_order")); params.put("company_code", companyCode); - sqlSession.update(NS + "update_common_code_sort_order", params); + sqlSession.update(NS + "updateCommonCodeSortOrder", params); } } @@ -267,7 +267,7 @@ public class CommonCodeService extends BaseService { // parentCodeValue, depth 필터는 params에 그대로 전달 (XML에서 처리) - List> rawList = sqlSession.selectList(NS + "get_common_code_hierarchical_list", params); + List> rawList = sqlSession.selectList(NS + "getCommonCodeHierarchicalList", params); List> result = new ArrayList<>(); for (Map raw : rawList) { result.add(transformCode(raw)); @@ -284,7 +284,7 @@ public class CommonCodeService extends BaseService { params.put("category_code", categoryCode); params.put("company_code", companyCode); - List> flatList = sqlSession.selectList(NS + "get_common_code_tree_list", params); + List> flatList = sqlSession.selectList(NS + "getCommonCodeTreeList", params); List> flatTransformed = new ArrayList<>(); for (Map raw : flatList) { @@ -306,7 +306,7 @@ public class CommonCodeService extends BaseService { params.put("category_code", categoryCode); params.put("code_value", codeValue); params.put("company_code", companyCode); - Integer countObj = sqlSession.selectOne(NS + "get_common_code_children_cnt", params); + Integer countObj = sqlSession.selectOne(NS + "getCommonCodeChildrenCnt", params); int count = countObj != null ? countObj : 0; Map result = new LinkedHashMap<>(); @@ -342,7 +342,7 @@ public class CommonCodeService extends BaseService { parentParams.put("category_code", categoryCode); parentParams.put("code_value", newParent.toString()); parentParams.put("company_code", companyCode); - Integer parentDepth = sqlSession.selectOne(NS + "get_common_code_parent_depth", parentParams); + Integer parentDepth = sqlSession.selectOne(NS + "getCommonCodeParentDepth", parentParams); params.put("depth", (parentDepth != null ? parentDepth : 0) + 1); } else { params.put("depth", 1); @@ -351,14 +351,14 @@ public class CommonCodeService extends BaseService { params.put("depth", body.get("depth")); } - int updated = sqlSession.update(NS + "update_common_code", params); + int updated = sqlSession.update(NS + "updateCommonCode", params); if (updated == 0) return null; Map q = new HashMap<>(); q.put("category_code", categoryCode); q.put("code_value", codeValue); q.put("company_code", companyCode); - Map raw = sqlSession.selectOne(NS + "get_common_code_info", q); + Map raw = sqlSession.selectOne(NS + "getCommonCodeInfo", q); return raw != null ? transformCode(raw) : null; } @@ -372,7 +372,7 @@ public class CommonCodeService extends BaseService { params.put("category_code", categoryCode); params.put("code_value", codeValue); params.put("company_code", companyCode); - int deleted = sqlSession.delete(NS + "delete_common_code", params); + int deleted = sqlSession.delete(NS + "deleteCommonCode", params); if (deleted == 0) throw new IllegalArgumentException("코드를 찾을 수 없습니다."); } @@ -387,7 +387,7 @@ public class CommonCodeService extends BaseService { // 미지정 시 활성 코드만 반환 (드롭다운 기본 동작) params.put("is_active", isActiveRaw != null ? toActiveStr(isActiveRaw) : "Y"); - List> rawList = sqlSession.selectList(NS + "get_common_code_option_list", params); + List> rawList = sqlSession.selectList(NS + "getCommonCodeOptionList", params); List> options = new ArrayList<>(); for (Map raw : rawList) { Map opt = new LinkedHashMap<>(); diff --git a/backend-spring/src/main/java/com/erp/service/CommonService.java b/backend-spring/src/main/java/com/erp/service/CommonService.java index 2631fdc8..61a85060 100644 --- a/backend-spring/src/main/java/com/erp/service/CommonService.java +++ b/backend-spring/src/main/java/com/erp/service/CommonService.java @@ -95,6 +95,6 @@ public class CommonService extends BaseService { */ public List> getCodeList(Map params) { applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "select_code_list", params); + return sqlSession.selectList(NS + "selectCodeList", params); } } diff --git a/backend-spring/src/main/java/com/erp/service/ComponentStandardService.java b/backend-spring/src/main/java/com/erp/service/ComponentStandardService.java index dddd43da..be33d228 100644 --- a/backend-spring/src/main/java/com/erp/service/ComponentStandardService.java +++ b/backend-spring/src/main/java/com/erp/service/ComponentStandardService.java @@ -56,8 +56,8 @@ public class ComponentStandardService extends BaseService { // 페이지네이션 commonService.applyPagination(params); - List> components = sqlSession.selectList(NS + "select_component_list", params); - Integer totalObj = sqlSession.selectOne(NS + "count_components", params); + List> components = sqlSession.selectList(NS + "selectComponentList", params); + Integer totalObj = sqlSession.selectOne(NS + "countComponents", params); int total = totalObj != null ? totalObj : 0; Map result = new LinkedHashMap<>(); @@ -74,7 +74,7 @@ public class ComponentStandardService extends BaseService { public Map getComponent(String componentCode) { Map params = Map.of("component_code", componentCode); - Map component = sqlSession.selectOne(NS + "select_component", params); + Map component = sqlSession.selectOne(NS + "selectComponent", params); if (component == null) { throw new RuntimeException("컴포넌트를 찾을 수 없습니다: " + componentCode); } @@ -88,7 +88,7 @@ public class ComponentStandardService extends BaseService { @Transactional public Map createComponent(Map params) { // 중복 코드 확인 - if (sqlSession.selectOne(NS + "check_duplicate", params) != null) { + if (sqlSession.selectOne(NS + "checkDuplicate", params) != null) { throw new RuntimeException("이미 존재하는 컴포넌트 코드입니다: " + params.get("component_code")); } @@ -105,8 +105,8 @@ public class ComponentStandardService extends BaseService { // JSONB 필드 직렬화 serializeJsonFields(params); - sqlSession.insert(NS + "insert_component", params); - return sqlSession.selectOne(NS + "select_component", Map.of("component_code", params.get("component_code"))); + sqlSession.insert(NS + "insertComponent", params); + return sqlSession.selectOne(NS + "selectComponent", Map.of("component_code", params.get("component_code"))); } // ══════════════════════════════════════════════════════════ @@ -126,8 +126,8 @@ public class ComponentStandardService extends BaseService { data.put("component_code", componentCode); serializeJsonFields(data); - sqlSession.update(NS + "update_component", data); - return sqlSession.selectOne(NS + "select_component", Map.of("component_code", componentCode)); + sqlSession.update(NS + "updateComponent", data); + return sqlSession.selectOne(NS + "selectComponent", Map.of("component_code", componentCode)); } // ══════════════════════════════════════════════════════════ @@ -137,7 +137,7 @@ public class ComponentStandardService extends BaseService { @Transactional public Map deleteComponent(String componentCode) { getComponent(componentCode); // 존재 확인 - sqlSession.delete(NS + "delete_component", Map.of("component_code", componentCode)); + sqlSession.delete(NS + "deleteComponent", Map.of("component_code", componentCode)); return Map.of("message", "컴포넌트가 삭제되었습니다: " + componentCode); } @@ -148,7 +148,7 @@ public class ComponentStandardService extends BaseService { @Transactional public Map updateSortOrder(List> updates) { for (Map item : updates) { - sqlSession.update(NS + "update_sort_order", item); + sqlSession.update(NS + "updateSortOrder", item); } return Map.of("message", "정렬 순서가 업데이트되었습니다."); } @@ -164,7 +164,7 @@ public class ComponentStandardService extends BaseService { // 새 코드 중복 확인 Map dupCheck = new HashMap<>(); dupCheck.put("component_code", newCode); - if (sqlSession.selectOne(NS + "check_duplicate", dupCheck) != null) { + if (sqlSession.selectOne(NS + "checkDuplicate", dupCheck) != null) { throw new RuntimeException("이미 존재하는 컴포넌트 코드입니다: " + newCode); } @@ -173,8 +173,8 @@ public class ComponentStandardService extends BaseService { newComponent.put("component_name", newName); serializeJsonFields(newComponent); - sqlSession.insert(NS + "insert_component", newComponent); - return sqlSession.selectOne(NS + "select_component", Map.of("component_code", newCode)); + sqlSession.insert(NS + "insertComponent", newComponent); + return sqlSession.selectOne(NS + "selectComponent", Map.of("component_code", newCode)); } // ══════════════════════════════════════════════════════════ @@ -182,7 +182,7 @@ public class ComponentStandardService extends BaseService { // ══════════════════════════════════════════════════════════ public List getCategories(Map params) { - List> rows = sqlSession.selectList(NS + "select_categories", params); + List> rows = sqlSession.selectList(NS + "selectCategories", params); List categories = new ArrayList<>(); for (Map row : rows) { Object cat = row.get("category"); @@ -196,10 +196,10 @@ public class ComponentStandardService extends BaseService { // ══════════════════════════════════════════════════════════ public Map getStatistics(Map params) { - Integer totalObj = sqlSession.selectOne(NS + "count_statistics_total", params); + Integer totalObj = sqlSession.selectOne(NS + "countStatisticsTotal", params); int total = totalObj != null ? totalObj : 0; - List> byCategoryRaw = sqlSession.selectList(NS + "select_statistics_by_category", params); + List> byCategoryRaw = sqlSession.selectList(NS + "selectStatisticsByCategory", params); List> byCategory = new ArrayList<>(); for (Map row : byCategoryRaw) { Map item = new LinkedHashMap<>(); @@ -208,7 +208,7 @@ public class ComponentStandardService extends BaseService { byCategory.add(item); } - List> byStatusRaw = sqlSession.selectList(NS + "select_statistics_by_status"); + List> byStatusRaw = sqlSession.selectList(NS + "selectStatisticsByStatus"); List> byStatus = new ArrayList<>(); for (Map row : byStatusRaw) { Map item = new LinkedHashMap<>(); @@ -229,7 +229,7 @@ public class ComponentStandardService extends BaseService { // ══════════════════════════════════════════════════════════ public boolean checkDuplicate(Map params) { - return sqlSession.selectOne(NS + "check_duplicate", params) != null; + return sqlSession.selectOne(NS + "checkDuplicate", params) != null; } // ══ private helpers ═══════════════════════════════════════ diff --git a/backend-spring/src/main/java/com/erp/service/DashboardService.java b/backend-spring/src/main/java/com/erp/service/DashboardService.java index 38cd4d86..3cc31316 100644 --- a/backend-spring/src/main/java/com/erp/service/DashboardService.java +++ b/backend-spring/src/main/java/com/erp/service/DashboardService.java @@ -27,7 +27,7 @@ public class DashboardService extends BaseService { int offset = (page - 1) * limit; List args = new ArrayList<>(); - StringBuilder where = new StringBuilder("d.deleted_at IS NULL"); + StringBuilder where = new StringBuilder("d.deleted_date IS NULL"); if (!"*".equals(companyCode)) { where.append(" AND d.company_code = ?"); @@ -47,7 +47,7 @@ public class DashboardService extends BaseService { int total = jdbcTemplate.queryForObject(countSql, Integer.class, args.toArray()); String listSql = "SELECT d.id, d.title, d.description, d.thumbnail_url, d.is_public," + - " d.created_by, d.created_at, d.updated_at, d.tags, d.category, d.view_count, d.company_code," + + " d.created_by, d.created_date, d.updated_date, d.tags, d.category, d.view_count, d.company_code," + " u.user_name as created_by_name," + " COUNT(de.id) as elements_count" + " FROM dashboards d" + @@ -55,8 +55,8 @@ public class DashboardService extends BaseService { " LEFT JOIN user_info u ON d.created_by = u.user_id" + " WHERE " + where + " GROUP BY d.id, d.title, d.description, d.thumbnail_url, d.is_public," + - " d.created_by, d.created_at, d.updated_at, d.tags, d.category, d.view_count, d.company_code, u.user_name" + - " ORDER BY d.updated_at DESC LIMIT ? OFFSET ?"; + " d.created_by, d.created_date, d.updated_date, d.tags, d.category, d.view_count, d.company_code, u.user_name" + + " ORDER BY d.updated_date DESC LIMIT ? OFFSET ?"; List listArgs = new ArrayList<>(args); listArgs.add(limit); listArgs.add(offset); @@ -82,7 +82,7 @@ public class DashboardService extends BaseService { public Map getDashboardById(String dashboardId, String companyCode) { List args = new ArrayList<>(); args.add(dashboardId); - String where = "id = ? AND deleted_at IS NULL"; + String where = "id = ? AND deleted_date IS NULL"; if (companyCode != null && !"*".equals(companyCode)) { where += " AND company_code = ?"; args.add(companyCode); @@ -113,7 +113,7 @@ public class DashboardService extends BaseService { String settingsJson = toJson(params.getOrDefault("settings", new HashMap<>())); jdbcTemplate.update( - "INSERT INTO dashboards (id, title, description, is_public, created_by, created_at, updated_at, tags, category, view_count, settings, company_code)" + + "INSERT INTO dashboards (id, title, description, is_public, created_by, created_date, updated_date, tags, category, view_count, settings, company_code)" + " VALUES (?, ?, ?, ?, ?, NOW(), NOW(), ?::jsonb, ?, 0, ?::jsonb, ?)", dashboardId, title, description, isPublic, userId, tagsJson, category, settingsJson, companyCode != null ? companyCode : "DEFAULT"); @@ -136,14 +136,14 @@ public class DashboardService extends BaseService { if (params.containsKey("tags")) { sets.add("tags = ?::jsonb"); args.add(toJson(params.get("tags"))); } if (params.containsKey("category")) { sets.add("category = ?"); args.add(params.get("category")); } if (params.containsKey("settings")) { sets.add("settings = ?::jsonb"); args.add(toJson(params.get("settings"))); } - sets.add("updated_at = NOW()"); + sets.add("updated_date = NOW()"); args.add(dashboardId); args.add(userId); int updated = jdbcTemplate.update( "UPDATE dashboards SET " + String.join(", ", sets) + - " WHERE id = ? AND created_by = ? AND deleted_at IS NULL", + " WHERE id = ? AND created_by = ? AND deleted_date IS NULL", args.toArray()); if (updated == 0) return null; @@ -158,14 +158,14 @@ public class DashboardService extends BaseService { @Transactional public boolean deleteDashboard(String dashboardId, String userId) { int deleted = jdbcTemplate.update( - "UPDATE dashboards SET deleted_at = NOW(), updated_at = NOW() WHERE id = ? AND created_by = ? AND deleted_at IS NULL", + "UPDATE dashboards SET deleted_date = NOW(), updated_date = NOW() WHERE id = ? AND created_by = ? AND deleted_date IS NULL", dashboardId, userId); return deleted > 0; } // ── 조회수 증가 ─────────────────────────────────────────────────────────────── public void incrementViewCount(String dashboardId) { - jdbcTemplate.update("UPDATE dashboards SET view_count = view_count + 1 WHERE id = ? AND deleted_at IS NULL", dashboardId); + jdbcTemplate.update("UPDATE dashboards SET view_count = view_count + 1 WHERE id = ? AND deleted_date IS NULL", dashboardId); } // ── execute-query (SELECT만) ────────────────────────────────────────────────── @@ -254,7 +254,7 @@ public class DashboardService extends BaseService { "INSERT INTO dashboard_elements (id, dashboard_id, element_type, element_subtype," + " position_x, position_y, width, height, title, custom_title, show_header, content," + " data_source_config, chart_config, list_config, yard_config, custom_metric_config," + - " display_order, created_at, updated_at)" + + " display_order, created_date, updated_date)" + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?::jsonb,?::jsonb,?::jsonb,?::jsonb,?::jsonb,?,NOW(),NOW())", elementId, dashboardId, el.get("type"), el.get("subtype"), @@ -281,8 +281,8 @@ public class DashboardService extends BaseService { d.put("is_public", row.get("is_public")); d.put("created_by", row.get("created_by")); d.put("created_by_name", row.get("created_by_name") != null ? row.get("created_by_name") : row.get("created_by")); - d.put("created_at", row.get("created_at")); - d.put("updated_at", row.get("updated_at")); + d.put("created_date", row.get("created_date")); + d.put("updated_date", row.get("updated_date")); d.put("tags", parseJson(row.get("tags"), new ArrayList<>())); d.put("category", row.get("category")); d.put("view_count", toInt(row.get("view_count"), 0)); diff --git a/backend-spring/src/main/java/com/erp/service/DbTypeCategoryService.java b/backend-spring/src/main/java/com/erp/service/DbTypeCategoryService.java index a7a8fbe4..065b2176 100644 --- a/backend-spring/src/main/java/com/erp/service/DbTypeCategoryService.java +++ b/backend-spring/src/main/java/com/erp/service/DbTypeCategoryService.java @@ -16,13 +16,13 @@ public class DbTypeCategoryService extends BaseService { private static final String NS = "dbTypeCategory."; public List> getAllCategories() { - return sqlSession.selectList(NS + "select_all_categories"); + return sqlSession.selectList(NS + "selectAllCategories"); } public Map getCategoryByTypeCode(String typeCode) { Map params = new HashMap<>(); params.put("type_code", typeCode); - return sqlSession.selectOne(NS + "select_category_by_type_code", params); + return sqlSession.selectOne(NS + "selectCategoryByTypeCode", params); } @Transactional @@ -31,23 +31,23 @@ public class DbTypeCategoryService extends BaseService { Map checkParams = new HashMap<>(); checkParams.put("type_code", typeCode); - Integer existing = sqlSession.selectOne(NS + "count_by_type_code", checkParams); + Integer existing = sqlSession.selectOne(NS + "countByTypeCode", checkParams); if (existing != null && existing > 0) { throw new IllegalArgumentException("이미 존재하는 DB 타입 코드입니다."); } - sqlSession.insert(NS + "insert_category", params); - return sqlSession.selectOne(NS + "select_category_by_type_code", checkParams); + sqlSession.insert(NS + "insertCategory", params); + return sqlSession.selectOne(NS + "selectCategoryByTypeCode", checkParams); } @Transactional public Map updateCategory(String typeCode, Map params) { params.put("type_code", typeCode); - sqlSession.update(NS + "update_category", params); + sqlSession.update(NS + "updateCategory", params); Map checkParams = new HashMap<>(); checkParams.put("type_code", typeCode); - return sqlSession.selectOne(NS + "select_category_by_type_code", checkParams); + return sqlSession.selectOne(NS + "selectCategoryByTypeCode", checkParams); } @Transactional @@ -55,21 +55,21 @@ public class DbTypeCategoryService extends BaseService { Map params = new HashMap<>(); params.put("type_code", typeCode); - Integer connectionCount = sqlSession.selectOne(NS + "count_connections_by_type", params); + Integer connectionCount = sqlSession.selectOne(NS + "countConnectionsByType", params); if (connectionCount != null && connectionCount > 0) { throw new IllegalStateException( "해당 DB 타입을 사용하는 연결이 " + connectionCount + "개 있어 삭제할 수 없습니다."); } - sqlSession.update(NS + "deactivate_category", params); + sqlSession.update(NS + "deactivateCategory", params); } public List> getConnectionStatsByType() { - return sqlSession.selectList(NS + "select_connection_stats_by_type"); + return sqlSession.selectList(NS + "selectConnectionStatsByType"); } @Transactional public void initializeDefaultCategories() { - sqlSession.insert(NS + "insert_default_categories", null); + sqlSession.insert(NS + "insertDefaultCategories", null); } } diff --git a/backend-spring/src/main/java/com/erp/service/DdlService.java b/backend-spring/src/main/java/com/erp/service/DdlService.java index 7fa3c0ac..182174d5 100644 --- a/backend-spring/src/main/java/com/erp/service/DdlService.java +++ b/backend-spring/src/main/java/com/erp/service/DdlService.java @@ -265,7 +265,7 @@ public class DdlService extends BaseService { params.put("limit", Math.min(limit, 200)); params.put("user_id", userId); params.put("ddl_type", ddlType); - return sqlSession.selectList(NS + "select_ddl_logs", params); + return sqlSession.selectList(NS + "selectDdlLogs", params); } public Map getDdlStatistics(String fromDate, String toDate) { @@ -273,10 +273,10 @@ public class DdlService extends BaseService { params.put("from_date", fromDate); params.put("to_date", toDate); - Map totalStats = sqlSession.selectOne(NS + "select_ddl_total_stats", params); - List> byType = sqlSession.selectList(NS + "select_ddl_stats_by_type", params); - List> byUser = sqlSession.selectList(NS + "select_ddl_stats_by_user", params); - List> recentFailures = sqlSession.selectList(NS + "select_recent_failures", params); + Map totalStats = sqlSession.selectOne(NS + "selectDdlTotalStats", params); + List> byType = sqlSession.selectList(NS + "selectDdlStatsByType", params); + List> byUser = sqlSession.selectList(NS + "selectDdlStatsByUser", params); + List> recentFailures = sqlSession.selectList(NS + "selectRecentFailures", params); Map byDdlType = new LinkedHashMap<>(); for (Map row : byType) { @@ -300,15 +300,15 @@ public class DdlService extends BaseService { public List> getTableDdlHistory(String tableName) { Map params = new HashMap<>(); params.put("table_name", tableName); - return sqlSession.selectList(NS + "select_table_ddl_history", params); + return sqlSession.selectList(NS + "selectTableDdlHistory", params); } public Map getTableInfo(String tableName) { Map params = new HashMap<>(); params.put("table_name", tableName); - Map tableInfo = sqlSession.selectOne(NS + "select_table_info", params); + Map tableInfo = sqlSession.selectOne(NS + "selectTableInfo", params); if (tableInfo == null) return null; - List> columns = sqlSession.selectList(NS + "select_table_columns", params); + List> columns = sqlSession.selectList(NS + "selectTableColumns", params); return Map.of("table_info", tableInfo, "columns", columns); } @@ -316,7 +316,7 @@ public class DdlService extends BaseService { LocalDateTime cutoff = LocalDateTime.now().minusDays(retentionDays); Map params = new HashMap<>(); params.put("cutoff_date", cutoff.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); - int deleted = sqlSession.delete(NS + "delete_old_ddl_logs", params); + int deleted = sqlSession.delete(NS + "deleteOldDdlLogs", params); log.info("DDL 로그 정리 완료: {}개 삭제, 보존 기간: {}일", deleted, retentionDays); return deleted; } @@ -528,7 +528,7 @@ public class DdlService extends BaseService { params.put("ddl_query", ddlQuery); params.put("success", success); params.put("error_message", errorMessage); - sqlSession.insert(NS + "insert_ddl_log", params); + sqlSession.insert(NS + "insertDdlLog", params); } catch (Exception e) { log.error("DDL 로그 기록 실패: userId={}, ddlType={}, tableName={}", userId, ddlType, tableName, e); } diff --git a/backend-spring/src/main/java/com/erp/service/DeliveryService.java b/backend-spring/src/main/java/com/erp/service/DeliveryService.java index 213298a2..efbf9e75 100644 --- a/backend-spring/src/main/java/com/erp/service/DeliveryService.java +++ b/backend-spring/src/main/java/com/erp/service/DeliveryService.java @@ -20,9 +20,9 @@ public class DeliveryService extends BaseService { public Map getDeliveryStatus(Map params) { commonService.applyCompanyCodeFilter(params); - List> deliveries = sqlSession.selectList(NS + "get_delivery_list", params); - List> issues = sqlSession.selectList(NS + "get_customer_issue_list", params); - Map todayStats = sqlSession.selectOne(NS + "get_delivery_today_stats", params); + List> deliveries = sqlSession.selectList(NS + "getDeliveryList", params); + List> issues = sqlSession.selectList(NS + "getCustomerIssueList", params); + Map todayStats = sqlSession.selectOne(NS + "getDeliveryTodayStats", params); Map result = new HashMap<>(); result.put("deliveries", deliveries); @@ -33,18 +33,18 @@ public class DeliveryService extends BaseService { public List> getDelayedDeliveries(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_delayed_delivery_list", params); + return sqlSession.selectList(NS + "getDelayedDeliveryList", params); } public List> getCustomerIssues(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_customer_issue_list", params); + return sqlSession.selectList(NS + "getCustomerIssueList", params); } @Transactional public void updateDeliveryStatus(Map params) { commonService.applyCompanyCodeFilter(params); - int rows = sqlSession.update(NS + "update_delivery_status", params); + int rows = sqlSession.update(NS + "updateDeliveryStatus", params); if (rows == 0) { throw new IllegalArgumentException("Delivery not found: " + params.get("id")); } @@ -53,7 +53,7 @@ public class DeliveryService extends BaseService { @Transactional public void updateIssueStatus(Map params) { commonService.applyCompanyCodeFilter(params); - int rows = sqlSession.update(NS + "update_customer_issue_status", params); + int rows = sqlSession.update(NS + "updateCustomerIssueStatus", params); if (rows == 0) { throw new IllegalArgumentException("Customer issue not found: " + params.get("id")); } diff --git a/backend-spring/src/main/java/com/erp/service/DynamicFormService.java b/backend-spring/src/main/java/com/erp/service/DynamicFormService.java index ab4b1de0..1613ad54 100644 --- a/backend-spring/src/main/java/com/erp/service/DynamicFormService.java +++ b/backend-spring/src/main/java/com/erp/service/DynamicFormService.java @@ -42,13 +42,13 @@ public class DynamicFormService extends BaseService { public String resolveBaseTable(String tableName) { try { Map params = Map.of("table_name", tableName); - Map tableInfo = sqlSession.selectOne(NS + "select_table_type", params); + Map tableInfo = sqlSession.selectOne(NS + "selectTableType", params); if (tableInfo == null || !"VIEW".equals(tableInfo.get("table_type"))) { return tableName; } - Map viewDef = sqlSession.selectOne(NS + "select_view_definition", params); + Map viewDef = sqlSession.selectOne(NS + "selectViewDefinition", params); if (viewDef != null) { String definition = (String) viewDef.get("view_definition"); if (definition != null) { @@ -71,7 +71,7 @@ public class DynamicFormService extends BaseService { */ private List getColumnNames(String tableName) { Map params = Map.of("table_name", tableName); - List> rows = sqlSession.selectList(NS + "select_column_names", params); + List> rows = sqlSession.selectList(NS + "selectColumnNames", params); return rows.stream() .map(r -> (String) r.get("column_name")) .collect(Collectors.toList()); @@ -82,7 +82,7 @@ public class DynamicFormService extends BaseService { */ private Map getColumnTypeMap(String tableName) { Map params = Map.of("table_name", tableName); - List> rows = sqlSession.selectList(NS + "select_column_types", params); + List> rows = sqlSession.selectList(NS + "selectColumnTypes", params); Map result = new LinkedHashMap<>(); for (Map row : rows) { result.put((String) row.get("column_name"), (String) row.get("data_type")); @@ -95,7 +95,7 @@ public class DynamicFormService extends BaseService { */ private List getPrimaryKeyList(String tableName) { Map params = Map.of("table_name", tableName); - List> rows = sqlSession.selectList(NS + "select_primary_keys", params); + List> rows = sqlSession.selectList(NS + "selectPrimaryKeys", params); return rows.stream() .map(r -> (String) r.get("column_name")) .collect(Collectors.toList()); @@ -533,7 +533,7 @@ public class DynamicFormService extends BaseService { String actualTable = resolveBaseTable(tableName); validateName(actualTable); - Map pkInfo = sqlSession.selectOne(NS + "select_primary_key_with_type", Map.of("table_name", actualTable)); + Map pkInfo = sqlSession.selectOne(NS + "selectPrimaryKeyWithType", Map.of("table_name", actualTable)); if (pkInfo == null) { throw new IllegalStateException("테이블 " + actualTable + "의 기본키를 찾을 수 없습니다."); } @@ -556,7 +556,7 @@ public class DynamicFormService extends BaseService { public Map getFormData(int id) { Map params = Map.of("id", id); - Map row = sqlSession.selectOne(NS + "select_form_data", params); + Map row = sqlSession.selectOne(NS + "selectFormData", params); if (row == null) return null; // form_data jsonb를 Map으로 파싱 @@ -599,8 +599,8 @@ public class DynamicFormService extends BaseService { params.put("size", size); params.put("offset", offset); - List> rows = sqlSession.selectList(NS + "select_form_data_list", params); - Integer totalObj = sqlSession.selectOne(NS + "count_form_data_list", params); + List> rows = sqlSession.selectList(NS + "selectFormDataList", params); + Integer totalObj = sqlSession.selectOne(NS + "countFormDataList", params); int total = totalObj != null ? totalObj : 0; // form_data 파싱 @@ -648,8 +648,8 @@ public class DynamicFormService extends BaseService { public List> getTableColumns(String tableName) { Map params = Map.of("table_name", tableName); - List> columns = sqlSession.selectList(NS + "select_table_columns", params); - List> pks = sqlSession.selectList(NS + "select_primary_keys", params); + List> columns = sqlSession.selectList(NS + "selectTableColumns", params); + List> pks = sqlSession.selectList(NS + "selectPrimaryKeys", params); Set pkSet = pks.stream().map(r -> (String) r.get("column_name")).collect(Collectors.toSet()); return columns.stream().map(col -> { @@ -732,7 +732,7 @@ public class DynamicFormService extends BaseService { } if (!params.containsKey("trip_status")) params.put("trip_status", "active"); - sqlSession.insert(NS + "insert_location_history", params); + sqlSession.insert(NS + "insertLocationHistory", params); Map result = new LinkedHashMap<>(); result.put("id", params.get("id")); @@ -744,7 +744,7 @@ public class DynamicFormService extends BaseService { // startDate / endDate String → Date if present convertDateParam(params, "start_date"); convertDateParam(params, "end_date"); - return sqlSession.selectList(NS + "select_location_history", params); + return sqlSession.selectList(NS + "selectLocationHistory", params); } private void convertDateParam(Map params, String key) { diff --git a/backend-spring/src/main/java/com/erp/service/EntityJoinService.java b/backend-spring/src/main/java/com/erp/service/EntityJoinService.java index fbaaf0ea..834459fe 100644 --- a/backend-spring/src/main/java/com/erp/service/EntityJoinService.java +++ b/backend-spring/src/main/java/com/erp/service/EntityJoinService.java @@ -107,13 +107,13 @@ public class EntityJoinService extends BaseService { params.put("table_name", tableName); params.put("company_code", companyCode); - List> entityColumns = sqlSession.selectList(NS + "select_entity_columns", params); + List> entityColumns = sqlSession.selectList(NS + "selectEntityColumns", params); List> joinConfigs = new ArrayList<>(); Map writerCheck = new HashMap<>(); writerCheck.put("table_name", tableName); writerCheck.put("column_name", "writer"); - if (sqlSession.selectOne(NS + "select_column_exists", writerCheck) != null) { + if (sqlSession.selectOne(NS + "selectColumnExists", writerCheck) != null) { Map writerConfig = new LinkedHashMap<>(); writerConfig.put("source_table", tableName); writerConfig.put("source_column", "writer"); @@ -174,12 +174,12 @@ public class EntityJoinService extends BaseService { public List> getReferenceTableColumns(String tableName, String companyCode) { Map schemaParams = new HashMap<>(); schemaParams.put("table_name", tableName); - List> schemaCols = sqlSession.selectList(NS + "select_table_schema_columns", schemaParams); + List> schemaCols = sqlSession.selectList(NS + "selectTableSchemaColumns", schemaParams); Map metaParams = new HashMap<>(); metaParams.put("table_name", tableName); metaParams.put("company_code", companyCode); - List> metaCols = sqlSession.selectList(NS + "select_column_metadata", metaParams); + List> metaCols = sqlSession.selectList(NS + "selectColumnMetadata", metaParams); Map> metaByCol = metaCols.stream() .collect(Collectors.toMap( m -> (String) m.get("column_name"), @@ -210,7 +210,7 @@ public class EntityJoinService extends BaseService { params.put("table_name", tableName); params.put("column_name", columnName); params.put("company_code", companyCode); - sqlSession.update(NS + "upsert_column_entity_settings", params); + sqlSession.update(NS + "upsertColumnEntitySettings", params); log.info("Entity 설정 업데이트: {}.{}", tableName, columnName); } @@ -376,7 +376,7 @@ public class EntityJoinService extends BaseService { Map p = new HashMap<>(); p.put("table_name", refTable); - if (sqlSession.selectOne(NS + "select_table_exists", p) == null) { + if (sqlSession.selectOne(NS + "selectTableExists", p) == null) { log.warn("참조 테이블 없음: {}", refTable); return false; } @@ -384,9 +384,9 @@ public class EntityJoinService extends BaseService { Map cp = new HashMap<>(); cp.put("table_name", refTable); cp.put("column_name", refCol); - if (sqlSession.selectOne(NS + "select_column_exists", cp) == null) { + if (sqlSession.selectOne(NS + "selectColumnExists", cp) == null) { cp.put("column_name", "id"); - if (sqlSession.selectOne(NS + "select_column_exists", cp) != null) { + if (sqlSession.selectOne(NS + "selectColumnExists", cp) != null) { config.put("reference_column", "id"); } else { log.warn("참조 컬럼 없음: {}.{}", refTable, refCol); @@ -398,7 +398,7 @@ public class EntityJoinService extends BaseService { Map dp = new HashMap<>(); dp.put("table_name", refTable); dp.put("column_name", displayCol); - if (sqlSession.selectOne(NS + "select_column_exists", dp) == null) { + if (sqlSession.selectOne(NS + "selectColumnExists", dp) == null) { log.warn("표시 컬럼 없음: {}.{}", refTable, displayCol); return false; } @@ -409,7 +409,7 @@ public class EntityJoinService extends BaseService { private String autoDetectDisplayColumn(String refTable, String refCol) { Map p = new HashMap<>(); p.put("table_name", refTable); - List> cols = sqlSession.selectList(NS + "select_table_schema_columns", p); + List> cols = sqlSession.selectList(NS + "selectTableSchemaColumns", p); List colNames = cols.stream() .map(c -> (String) c.get("column_name")) .collect(Collectors.toList()); diff --git a/backend-spring/src/main/java/com/erp/service/EntityReferenceService.java b/backend-spring/src/main/java/com/erp/service/EntityReferenceService.java index ab97ef56..337f137d 100644 --- a/backend-spring/src/main/java/com/erp/service/EntityReferenceService.java +++ b/backend-spring/src/main/java/com/erp/service/EntityReferenceService.java @@ -19,7 +19,7 @@ public class EntityReferenceService extends BaseService { int limit = toInt(params.getOrDefault("limit", 100)); Object search = params.get("search"); - Map columnInfo = sqlSession.selectOne(NS + "select_column_info", + Map columnInfo = sqlSession.selectOne(NS + "selectColumnInfo", Map.of("table_name", tableName, "column_name", columnName)); if (columnInfo == null) { @@ -52,14 +52,14 @@ public class EntityReferenceService extends BaseService { throw new IllegalArgumentException("잘못된 참조 테이블/컬럼 이름입니다."); } - Integer tableExistsObj = sqlSession.selectOne(NS + "check_table_exists_in_schema", + Integer tableExistsObj = sqlSession.selectOne(NS + "checkTableExistsInSchema", Map.of("table_name", safeTable)); int tableExists = tableExistsObj != null ? tableExistsObj : 0; if (tableExists == 0) { throw new IllegalStateException("참조 테이블 '" + safeTable + "'이 존재하지 않습니다."); } - Integer hasCompanyCodeObj = sqlSession.selectOne(NS + "check_table_has_company_code", + Integer hasCompanyCodeObj = sqlSession.selectOne(NS + "checkTableHasCompanyCode", Map.of("table_name", safeTable)); int hasCompanyCode = hasCompanyCodeObj != null ? hasCompanyCodeObj : 0; @@ -77,7 +77,7 @@ public class EntityReferenceService extends BaseService { log.info("엔티티 참조 데이터 조회: {}.{} -> {}.{} (display: {}), company={}", tableName, columnName, safeTable, safeRefCol, safeDispCol, companyCode); - List> rows = sqlSession.selectList(NS + "select_reference_data", queryParams); + List> rows = sqlSession.selectList(NS + "selectReferenceData", queryParams); List> options = new ArrayList<>(); for (Map row : rows) { @@ -116,7 +116,7 @@ public class EntityReferenceService extends BaseService { log.info("공통 코드 데이터 조회: category={}, company={}", codeCategory, companyCode); - List> rows = sqlSession.selectList(NS + "select_code_data", queryParams); + List> rows = sqlSession.selectList(NS + "selectCodeData", queryParams); List> options = new ArrayList<>(); for (Map row : rows) { diff --git a/backend-spring/src/main/java/com/erp/service/EntitySearchService.java b/backend-spring/src/main/java/com/erp/service/EntitySearchService.java index 84fde89b..e6c328ad 100644 --- a/backend-spring/src/main/java/com/erp/service/EntitySearchService.java +++ b/backend-spring/src/main/java/com/erp/service/EntitySearchService.java @@ -32,7 +32,7 @@ public class EntitySearchService extends BaseService { private Set fetchColumns(String tableName) { Map p = new HashMap<>(); p.put("table_name", tableName); - List> rows = sqlSession.selectList(NS + "get_table_column_list", p); + List> rows = sqlSession.selectList(NS + "getTableColumnList", p); return rows.stream() .map(r -> (String) r.get("column_name")) .filter(Objects::nonNull) @@ -238,7 +238,7 @@ public class EntitySearchService extends BaseService { try { Map pkp = new HashMap<>(); pkp.put("table_name", tableName); - Map pk = sqlSession.selectOne(NS + "get_primary_key_info", pkp); + Map pk = sqlSession.selectOne(NS + "getPrimaryKeyInfo", pkp); if (pk != null && pk.get("column_name") != null) { orderByColumn = "\"" + sanitize((String) pk.get("column_name")) + "\""; } @@ -257,8 +257,8 @@ public class EntitySearchService extends BaseService { qp.put("page_limit", limit); qp.put("page_offset", offset); - List> data = sqlSession.selectList(NS + "get_entity_search_list", qp); - Integer totalObj = sqlSession.selectOne(NS + "get_entity_search_list_cnt", qp); + List> data = sqlSession.selectList(NS + "getEntitySearchList", qp); + Integer totalObj = sqlSession.selectOne(NS + "getEntitySearchListCnt", qp); int total = totalObj != null ? totalObj : 0; Map result = new LinkedHashMap<>(); @@ -325,7 +325,7 @@ public class EntitySearchService extends BaseService { qp.put("where_clause", whereClause.toString()); qp.put("label_column", "\"" + labelCol + "\""); - return sqlSession.selectList(NS + "get_entity_option_list", qp); + return sqlSession.selectList(NS + "getEntityOptionList", qp); } public List> getDistinctColumnValues(Map params) { @@ -366,7 +366,7 @@ public class EntitySearchService extends BaseService { qp.put("label_column", "\"" + effectiveLabelCol + "\""); qp.put("where_clause", whereClause.toString()); - List> rows = sqlSession.selectList(NS + "get_distinct_value_list", qp); + List> rows = sqlSession.selectList(NS + "getDistinctValueList", qp); if (rows.isEmpty()) return rows; @@ -382,7 +382,7 @@ public class EntitySearchService extends BaseService { cvp.put("column_name", columnName); cvp.put("raw_values", rawValues); cvp.put("company_code", companyCode); - List> cvRows = sqlSession.selectList(NS + "get_category_value_list", cvp); + List> cvRows = sqlSession.selectList(NS + "getCategoryValueList", cvp); for (Map r : cvRows) { labelMap.put((String) r.get("value_code"), (String) r.get("value_label")); } @@ -394,7 +394,7 @@ public class EntitySearchService extends BaseService { Map ttcp = new HashMap<>(); ttcp.put("table_name", tableName); ttcp.put("column_name", columnName); - Map ttcRow = sqlSession.selectOne(NS + "get_code_category_info", ttcp); + Map ttcRow = sqlSession.selectOne(NS + "getCodeCategoryInfo", ttcp); String codeCategory = ttcRow != null ? (String) ttcRow.get("code_category") : null; if (codeCategory != null) { @@ -402,7 +402,7 @@ public class EntitySearchService extends BaseService { cip.put("code_category", codeCategory); cip.put("raw_values", rawValues); cip.put("company_code", companyCode); - List> ciRows = sqlSession.selectList(NS + "get_code_info_list", cip); + List> ciRows = sqlSession.selectList(NS + "getCodeInfoList", cip); for (Map r : ciRows) { String codeValue = (String) r.get("code_value"); if (!labelMap.containsKey(codeValue)) { diff --git a/backend-spring/src/main/java/com/erp/service/FileService.java b/backend-spring/src/main/java/com/erp/service/FileService.java index b426af35..1e2f4a7e 100644 --- a/backend-spring/src/main/java/com/erp/service/FileService.java +++ b/backend-spring/src/main/java/com/erp/service/FileService.java @@ -35,9 +35,9 @@ public class FileService extends BaseService { public Map getFileList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - Integer totalObj = sqlSession.selectOne(NS + "get_file_list_cnt", params); + Integer totalObj = sqlSession.selectOne(NS + "getFileListCnt", params); int totalCount = totalObj != null ? totalObj : 0; - List> list = sqlSession.selectList(NS + "get_file_list", params); + List> list = sqlSession.selectList(NS + "getFileList", params); return commonService.buildListResponse(list, totalCount, params); } @@ -45,19 +45,19 @@ public class FileService extends BaseService { public Map getFileInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_file_info", params); + return sqlSession.selectOne(NS + "getFileInfo", params); } public Map getFileInfoPublic(Map params) { // public 접근 — company_code 필터 없음 - return sqlSession.selectOne(NS + "get_file_info", params); + return sqlSession.selectOne(NS + "getFileInfo", params); } // ── 타겟별 파일 목록 ──────────────────────────────────────────────────── public List> getFilesByTarget(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_files_by_target", params); + return sqlSession.selectList(NS + "getFilesByTarget", params); } // ── 업로드 ──────────────────────────────────────────────────────────────── @@ -118,7 +118,7 @@ public class FileService extends BaseService { fileParams.put("status", "ACTIVE"); fileParams.put("is_representative", false); - sqlSession.insert(NS + "insert_file", fileParams); + sqlSession.insert(NS + "insertFile", fileParams); Map result = new HashMap<>(); result.put("objid", objid); @@ -149,6 +149,6 @@ public class FileService extends BaseService { @Transactional public void deleteFile(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "soft_delete_file", params); + sqlSession.update(NS + "softDeleteFile", params); } } diff --git a/backend-spring/src/main/java/com/erp/service/MailAccountFileService.java b/backend-spring/src/main/java/com/erp/service/MailAccountFileService.java index ceaa4374..5c9540b3 100644 --- a/backend-spring/src/main/java/com/erp/service/MailAccountFileService.java +++ b/backend-spring/src/main/java/com/erp/service/MailAccountFileService.java @@ -19,34 +19,34 @@ public class MailAccountFileService extends BaseService { public Map getMailAccountFileList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_mail_account_file_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_mail_account_file_list", params); + int totalCount = sqlSession.selectOne(NS + "getMailAccountFileListCnt", params); + List> list = sqlSession.selectList(NS + "getMailAccountFileList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getMailAccountFileInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_mail_account_file_info", params); + return sqlSession.selectOne(NS + "getMailAccountFileInfo", params); } @Transactional public Map insertMailAccountFile(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_mail_account_file", params); + sqlSession.insert(NS + "insertMailAccountFile", params); return params; } @Transactional public Map updateMailAccountFile(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_mail_account_file", params); + sqlSession.update(NS + "updateMailAccountFile", params); return params; } @Transactional public Map deleteMailAccountFile(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_mail_account_file", params); + sqlSession.delete(NS + "deleteMailAccountFile", params); return params; } } diff --git a/backend-spring/src/main/java/com/erp/service/MailReceiveBasicService.java b/backend-spring/src/main/java/com/erp/service/MailReceiveBasicService.java index bee72b28..8df81a63 100644 --- a/backend-spring/src/main/java/com/erp/service/MailReceiveBasicService.java +++ b/backend-spring/src/main/java/com/erp/service/MailReceiveBasicService.java @@ -22,43 +22,43 @@ public class MailReceiveBasicService extends BaseService { public Map getMailReceiveBasicList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_mail_receive_basic_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_mail_receive_basic_list", params); + int totalCount = sqlSession.selectOne(NS + "getMailReceiveBasicListCnt", params); + List> list = sqlSession.selectList(NS + "getMailReceiveBasicList", params); return commonService.buildListResponse(list, totalCount, params); } public int getMailReceiveBasicTodayCount(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_mail_receive_basic_today_count", params); + return sqlSession.selectOne(NS + "getMailReceiveBasicTodayCount", params); } public Map getMailReceiveBasicInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_mail_receive_basic_info", params); + return sqlSession.selectOne(NS + "getMailReceiveBasicInfo", params); } @Transactional public Map markMailReceiveBasicAsRead(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_mail_receive_basic_as_read", params); + sqlSession.update(NS + "updateMailReceiveBasicAsRead", params); return params; } @Transactional public Map deleteMailReceiveBasic(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "delete_mail_receive_basic", params); + sqlSession.update(NS + "deleteMailReceiveBasic", params); return params; } public Map getMailReceiveBasicAttachment(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_mail_receive_basic_attachment", params); + return sqlSession.selectOne(NS + "getMailReceiveBasicAttachment", params); } public Map testMailReceiveBasicImapConnection(Map params) { commonService.applyCompanyCodeFilter(params); - Map account = sqlSession.selectOne(NS + "get_mail_receive_basic_account_info", params); + Map account = sqlSession.selectOne(NS + "getMailReceiveBasicAccountInfo", params); if (account == null) { Map result = new HashMap<>(); result.put("success", false); diff --git a/backend-spring/src/main/java/com/erp/service/MailSentHistoryService.java b/backend-spring/src/main/java/com/erp/service/MailSentHistoryService.java index d98f60b3..c512ea22 100644 --- a/backend-spring/src/main/java/com/erp/service/MailSentHistoryService.java +++ b/backend-spring/src/main/java/com/erp/service/MailSentHistoryService.java @@ -37,14 +37,14 @@ public class MailSentHistoryService extends BaseService { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_mail_sent_history_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_mail_sent_history_list", params); + int totalCount = sqlSession.selectOne(NS + "getMailSentHistoryListCnt", params); + List> list = sqlSession.selectList(NS + "getMailSentHistoryList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getMailSentHistoryInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_mail_sent_history_info", params); + return sqlSession.selectOne(NS + "getMailSentHistoryInfo", params); } @Transactional @@ -63,41 +63,41 @@ public class MailSentHistoryService extends BaseService { Map lookupParams = new HashMap<>(); lookupParams.put("id", id); lookupParams.put("company_code", params.get("company_code")); - Map existing = sqlSession.selectOne(NS + "get_mail_sent_history_info", lookupParams); + Map existing = sqlSession.selectOne(NS + "getMailSentHistoryInfo", lookupParams); if (existing != null) { - sqlSession.update(NS + "update_mail_sent_history", params); + sqlSession.update(NS + "updateMailSentHistory", params); } else { - sqlSession.insert(NS + "insert_mail_sent_history", params); + sqlSession.insert(NS + "insertMailSentHistory", params); } - return sqlSession.selectOne(NS + "get_mail_sent_history_info", lookupParams); + return sqlSession.selectOne(NS + "getMailSentHistoryInfo", lookupParams); } @Transactional public Map updateMailSentHistoryDraft(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_mail_sent_history", params); - return sqlSession.selectOne(NS + "get_mail_sent_history_info", params); + sqlSession.update(NS + "updateMailSentHistory", params); + return sqlSession.selectOne(NS + "getMailSentHistoryInfo", params); } @Transactional public Map deleteMailSentHistory(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "soft_delete_mail_sent_history", params); + sqlSession.update(NS + "softDeleteMailSentHistory", params); return params; } @Transactional public Map permanentlyDeleteMailSentHistory(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "permanent_delete_mail_sent_history", params); + sqlSession.delete(NS + "permanentDeleteMailSentHistory", params); return params; } @Transactional public Map restoreMailSentHistory(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "restore_mail_sent_history", params); + sqlSession.update(NS + "restoreMailSentHistory", params); return params; } @@ -108,7 +108,7 @@ public class MailSentHistoryService extends BaseService { if (ids == null || ids.isEmpty()) { return Map.of("success_count", 0, "fail_count", 0); } - int successCount = sqlSession.update(NS + "bulk_soft_delete_mail_sent_history", params); + int successCount = sqlSession.update(NS + "bulkSoftDeleteMailSentHistory", params); return Map.of("success_count", successCount, "fail_count", Math.max(0, ids.size() - successCount)); } @@ -119,7 +119,7 @@ public class MailSentHistoryService extends BaseService { if (ids == null || ids.isEmpty()) { return Map.of("success_count", 0, "fail_count", 0); } - int successCount = sqlSession.delete(NS + "bulk_permanent_delete_mail_sent_history", params); + int successCount = sqlSession.delete(NS + "bulkPermanentDeleteMailSentHistory", params); return Map.of("success_count", successCount, "fail_count", Math.max(0, ids.size() - successCount)); } @@ -130,13 +130,13 @@ public class MailSentHistoryService extends BaseService { if (ids == null || ids.isEmpty()) { return Map.of("success_count", 0, "fail_count", 0); } - int successCount = sqlSession.update(NS + "bulk_restore_mail_sent_history", params); + int successCount = sqlSession.update(NS + "bulkRestoreMailSentHistory", params); return Map.of("success_count", successCount, "fail_count", Math.max(0, ids.size() - successCount)); } public Map getMailSentHistoryStatistics(Map params) { commonService.applyCompanyCodeFilter(params); - Map stats = sqlSession.selectOne(NS + "get_mail_sent_history_statistics", params); + Map stats = sqlSession.selectOne(NS + "getMailSentHistoryStatistics", params); if (stats == null) stats = new HashMap<>(); long totalSent = toLong(stats.get("total_sent")); @@ -155,7 +155,7 @@ public class MailSentHistoryService extends BaseService { if (params.get("sent_at") == null) { params.put("sent_at", new Timestamp(System.currentTimeMillis())); } - sqlSession.insert(NS + "insert_mail_sent_history", params); + sqlSession.insert(NS + "insertMailSentHistory", params); return params; } diff --git a/backend-spring/src/main/java/com/erp/service/MailTemplateFileService.java b/backend-spring/src/main/java/com/erp/service/MailTemplateFileService.java index b60843ba..adfdd64d 100644 --- a/backend-spring/src/main/java/com/erp/service/MailTemplateFileService.java +++ b/backend-spring/src/main/java/com/erp/service/MailTemplateFileService.java @@ -24,21 +24,21 @@ public class MailTemplateFileService extends BaseService { public Map getMailTemplateFileList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_mail_template_file_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_mail_template_file_list", params); + int totalCount = sqlSession.selectOne(NS + "getMailTemplateFileListCnt", params); + List> list = sqlSession.selectList(NS + "getMailTemplateFileList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getMailTemplateFileInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_mail_template_file_info", params); + return sqlSession.selectOne(NS + "getMailTemplateFileInfo", params); } @Transactional public Map insertMailTemplateFile(Map params) { commonService.applyCompanyCodeFilter(params); serializeJsonFields(params); - sqlSession.insert(NS + "insert_mail_template_file", params); + sqlSession.insert(NS + "insertMailTemplateFile", params); return params; } @@ -46,21 +46,21 @@ public class MailTemplateFileService extends BaseService { public Map updateMailTemplateFile(Map params) { commonService.applyCompanyCodeFilter(params); serializeJsonFields(params); - sqlSession.update(NS + "update_mail_template_file", params); + sqlSession.update(NS + "updateMailTemplateFile", params); return params; } @Transactional public Map deleteMailTemplateFile(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_mail_template_file", params); + sqlSession.delete(NS + "deleteMailTemplateFile", params); return params; } @SuppressWarnings("unchecked") public Map previewMailTemplateFile(Map params) { commonService.applyCompanyCodeFilter(params); - Map template = sqlSession.selectOne(NS + "get_mail_template_file_info", params); + Map template = sqlSession.selectOne(NS + "getMailTemplateFileInfo", params); if (template == null) { return Collections.emptyMap(); } diff --git a/backend-spring/src/main/java/com/erp/service/MultilangService.java b/backend-spring/src/main/java/com/erp/service/MultilangService.java index ea8b6753..6c4b6738 100644 --- a/backend-spring/src/main/java/com/erp/service/MultilangService.java +++ b/backend-spring/src/main/java/com/erp/service/MultilangService.java @@ -14,34 +14,34 @@ public class MultilangService extends BaseService { private static final String NS = "multilang."; public List> getLanguages() { - return sqlSession.selectList(NS + "get_multilang_language_list", new HashMap<>()); + return sqlSession.selectList(NS + "getMultilangLanguageList", new HashMap<>()); } public Map createLanguage(Map params) { String langCode = str(params.get("lang_code")); Map 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 updateLanguage(String langCode, Map params) { params.put("lang_code", langCode); Map 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 check = Map.of("lang_code", langCode); - Map current = sqlSession.selectOne(NS + "get_multilang_language_info", check); + Map 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 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 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> getLangKeys(Map 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> 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 params) { String companyCode = str(params.get("company_code")); String langKey = str(params.get("lang_key")); Map 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 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 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 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 current = sqlSession.selectOne(NS + "get_multilang_key_info", Map.of("key_id", keyId)); + Map 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> 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 text : texts) { Map 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 params = Map.of( "company_code", companyCode, "menu_code", menuCode, "lang_key", langKey, "user_lang", userLang); - Map result = sqlSession.selectOne(NS + "get_multilang_user_text", params); + Map 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 params = Map.of( "company_code", companyCode, "lang_key", langKey, "lang_code", langCode); - Map result = sqlSession.selectOne(NS + "get_multilang_single_text", params); + Map 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> translations = sqlSession.selectList(NS + "get_multilang_batch_translation_list", params); + List> translations = sqlSession.selectList(NS + "getMultilangBatchTranslationList", params); Map result = new LinkedHashMap<>(); Set processed = new HashSet<>(); for (Map t : translations) { @@ -180,7 +180,7 @@ public class MultilangService extends BaseService { Map fallbackParams = new HashMap<>(); fallbackParams.put("company_code", companyCode); fallbackParams.put("missing_keys", missingKeys); - List> fallback = sqlSession.selectList(NS + "get_multilang_fallback_translation_list", fallbackParams); + List> fallback = sqlSession.selectList(NS + "getMultilangFallbackTranslationList", fallbackParams); Set fbProcessed = new HashSet<>(); for (Map t : fallback) { String key = str(t.get("lang_key")); @@ -195,16 +195,16 @@ public class MultilangService extends BaseService { } public List> getCategories() { - List> flat = sqlSession.selectList(NS + "get_multilang_category_list", new HashMap<>()); + List> flat = sqlSession.selectList(NS + "getMultilangCategoryList", new HashMap<>()); return buildCategoryTree(flat); } public Map 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> 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> buildCategoryTree(List> flat) { @@ -242,7 +242,7 @@ public class MultilangService extends BaseService { List> 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 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> texts = (List>) 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> categoryPath = getCategoryPath(categoryId); if (categoryPath.isEmpty()) throw new IllegalArgumentException("존재하지 않는 카테고리입니다"); String langKey = buildLangKey(categoryPath, keyMeaning); - Map commonKey = sqlSession.selectOne(NS + "get_multilang_key_by_company_and_key", Map.of("company_code", "*", "lang_key", langKey)); - Map companyKey = sqlSession.selectOne(NS + "get_multilang_key_by_company_and_key", Map.of("company_code", companyCode, "lang_key", langKey)); + Map commonKey = sqlSession.selectOne(NS + "getMultilangKeyByCompanyAndKey", Map.of("company_code", "*", "lang_key", langKey)); + Map companyKey = sqlSession.selectOne(NS + "getMultilangKeyByCompanyAndKey", Map.of("company_code", companyCode, "lang_key", langKey)); Map 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 params) { int baseKeyId = toInt(params.get("base_key_id")); String companyCode = str(params.get("company_code")); - Map baseKey = sqlSession.selectOne(NS + "get_multilang_base_key_info", Map.of("key_id", baseKeyId)); + Map 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 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> texts = (List>) 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> 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> generateScreenLabelKeys(Map params) { int screenId = toInt(params.get("screen_id")); - Map screenInfo = sqlSession.selectOne(NS + "get_multilang_screen_company_code", Map.of("screen_id", screenId)); + Map 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 companyInfo = sqlSession.selectOne(NS + "get_multilang_company_name", Map.of("company_code", companyCode)); + Map companyInfo = sqlSession.selectOne(NS + "getMultilangCompanyName", Map.of("company_code", companyCode)); companyName = (companyInfo != null) ? str(companyInfo.get("company_name")) : companyCode; } List groupPath = getScreenGroupPath(screenId); @@ -351,7 +351,7 @@ public class MultilangService extends BaseService { List parts = new ArrayList<>(keyPrefixParts); parts.add(keyMeaning); String langKey = String.join(".", parts); - Map existing = sqlSession.selectOne(NS + "get_multilang_key_by_company_and_key", Map.of("company_code", companyCode, "lang_key", langKey)); + Map 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 entry = new LinkedHashMap<>(); entry.put("component_id", componentId); @@ -377,10 +377,10 @@ public class MultilangService extends BaseService { } private List getScreenGroupPath(int screenId) { - Map groupRow = sqlSession.selectOne(NS + "get_multilang_screen_group_id", Map.of("screen_id", screenId)); + Map groupRow = sqlSession.selectOne(NS + "getMultilangScreenGroupId", Map.of("screen_id", screenId)); if (groupRow == null) return Collections.emptyList(); int groupId = toInt(groupRow.get("group_id")); - List> groups = sqlSession.selectList(NS + "get_multilang_screen_group_path", Map.of("group_id", groupId)); + List> groups = sqlSession.selectList(NS + "getMultilangScreenGroupPath", Map.of("group_id", groupId)); List path = new ArrayList<>(); for (Map 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 existing = sqlSession.selectOne(NS + "get_multilang_category_by_name_and_parent", Map.of("category_name", groupName, "parent_id", parentId)); + Map 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 existing = sqlSession.selectOne(NS + "get_multilang_category_by_code_and_parent", Map.of("category_code", companyCode, "parent_id", screenRootId)); + Map 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 existing = sqlSession.selectOne(NS + "get_multilang_root_category_by_code", Map.of("category_code", "screen")); + Map existing = sqlSession.selectOne(NS + "getMultilangRootCategoryByCode", Map.of("category_code", "screen")); if (existing != null) return toInt(existing.get("category_id")); Map 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")); } diff --git a/backend-spring/src/main/java/com/erp/service/NumberingRuleService.java b/backend-spring/src/main/java/com/erp/service/NumberingRuleService.java index b9fb1f7b..ac895d28 100644 --- a/backend-spring/src/main/java/com/erp/service/NumberingRuleService.java +++ b/backend-spring/src/main/java/com/erp/service/NumberingRuleService.java @@ -30,7 +30,7 @@ public class NumberingRuleService extends BaseService { public List> getRuleList(String companyCode) { Map params = new HashMap<>(); params.put("company_code", companyCode); - List> rules = sqlSession.selectList(NS + "get_rule_list", params); + List> rules = sqlSession.selectList(NS + "getRuleList", params); loadPartsForRules(rules, companyCode); return rules; } @@ -40,7 +40,7 @@ public class NumberingRuleService extends BaseService { Map params = new HashMap<>(); params.put("rule_id", ruleId); params.put("company_code", companyCode); - Map rule = sqlSession.selectOne(NS + "get_rule_by_id", params); + Map rule = sqlSession.selectOne(NS + "getRuleById", params); if (rule == null) return null; loadPartsForRule(rule, companyCode); return rule; @@ -63,7 +63,7 @@ public class NumberingRuleService extends BaseService { params.put("category_value_id", body.get("category_value_id")); params.put("created_by", body.get("user_id")); - sqlSession.insert(NS + "insert_rule", params); + sqlSession.insert(NS + "insertRule", params); // parts 삽입 Object partsObj = body.get("parts"); @@ -82,7 +82,7 @@ public class NumberingRuleService extends BaseService { Map params = new HashMap<>(body); params.put("rule_id", ruleId); params.put("company_code", companyCode); - int updated = sqlSession.update(NS + "update_rule", params); + int updated = sqlSession.update(NS + "updateRule", params); if (updated == 0) throw new RuntimeException("규칙을 찾을 수 없거나 권한이 없습니다"); // parts 교체 (있는 경우) @@ -91,7 +91,7 @@ public class NumberingRuleService extends BaseService { Map delParams = new HashMap<>(); delParams.put("rule_id", ruleId); delParams.put("company_code", companyCode); - sqlSession.delete(NS + "delete_rule_parts_by_rule_id", delParams); + sqlSession.delete(NS + "deleteRulePartsByRuleId", delParams); @SuppressWarnings("unchecked") List> parts = (List>) partsObj; @@ -108,9 +108,9 @@ public class NumberingRuleService extends BaseService { Map params = new HashMap<>(); params.put("rule_id", ruleId); params.put("company_code", companyCode); - sqlSession.delete(NS + "delete_rule_parts_by_rule_id", params); - sqlSession.delete(NS + "delete_sequences_by_rule_id", params); - int deleted = sqlSession.delete(NS + "delete_rule", params); + sqlSession.delete(NS + "deleteRulePartsByRuleId", params); + sqlSession.delete(NS + "deleteSequencesByRuleId", params); + int deleted = sqlSession.delete(NS + "deleteRule", params); if (deleted == 0) throw new RuntimeException("규칙을 찾을 수 없거나 권한이 없습니다"); } @@ -172,7 +172,7 @@ public class NumberingRuleService extends BaseService { seqParams.put("rule_id", ruleId); seqParams.put("company_code", companyCode); seqParams.put("current_sequence", allocatedSequence); - sqlSession.update(NS + "update_current_sequence_in_rule", seqParams); + sqlSession.update(NS + "updateCurrentSequenceInRule", seqParams); } // 수동 파트 값 적용 @@ -196,8 +196,8 @@ public class NumberingRuleService extends BaseService { params.put("rule_id", ruleId); params.put("company_code", companyCode); params.put("current_sequence", 0); - sqlSession.delete(NS + "delete_sequences_by_rule_id", params); - sqlSession.update(NS + "update_current_sequence_in_rule", params); + sqlSession.delete(NS + "deleteSequencesByRuleId", params); + sqlSession.update(NS + "updateCurrentSequenceInRule", params); log.info("시퀀스 초기화 완료: ruleId={}, companyCode={}", ruleId, companyCode); } @@ -206,11 +206,11 @@ public class NumberingRuleService extends BaseService { // ================================================================ /** GET /available/:menuObjid? → 메뉴별 사용 가능한 규칙 목록 */ - public List> getAvailableRulesForMenu(String companyCode, Integer menuObjid) { + public List> getAvailableRulesForMenu(String companyCode, String menuObjid) { Map params = new HashMap<>(); params.put("company_code", companyCode); if (menuObjid != null) params.put("menu_objid", menuObjid); - List> rules = sqlSession.selectList(NS + "get_available_rules_for_menu", params); + List> rules = sqlSession.selectList(NS + "getAvailableRulesForMenu", params); loadPartsForRules(rules, companyCode); return rules; } @@ -220,7 +220,7 @@ public class NumberingRuleService extends BaseService { Map params = new HashMap<>(); params.put("company_code", companyCode); params.put("table_name", tableName); - List> rules = sqlSession.selectList(NS + "get_available_rules_for_screen", params); + List> rules = sqlSession.selectList(NS + "getAvailableRulesForScreen", params); loadPartsForRules(rules, companyCode); return rules; } @@ -238,18 +238,18 @@ public class NumberingRuleService extends BaseService { params.put("table_name", tableName); params.put("column_name", columnName); - Map rule = sqlSession.selectOne(NS + "get_rule_by_column", params); + Map rule = sqlSession.selectOne(NS + "getRuleByColumn", params); // fallback: column_name이 비어있는 레거시 규칙 if (rule == null) { - rule = sqlSession.selectOne(NS + "get_rule_by_column_fallback", params); + rule = sqlSession.selectOne(NS + "getRuleByColumnFallback", params); if (rule != null) { // column_name 자동 업데이트 (레거시 마이그레이션) Map upParams = new HashMap<>(); upParams.put("rule_id", rule.get("rule_id")); upParams.put("company_code", companyCode); upParams.put("column_name", columnName); - sqlSession.update(NS + "update_rule_column_name", upParams); + sqlSession.update(NS + "updateRuleColumnName", upParams); rule.put("column_name", columnName); } } @@ -265,7 +265,7 @@ public class NumberingRuleService extends BaseService { // ================================================================ /** GET /test/list/:menuObjid? → 테스트용 규칙 목록 */ - public List> getRulesFromTest(String companyCode, Integer menuObjid) { + public List> getRulesFromTest(String companyCode, String menuObjid) { return getAvailableRulesForMenu(companyCode, menuObjid); } @@ -277,17 +277,17 @@ public class NumberingRuleService extends BaseService { Map lookupParams = new HashMap<>(); lookupParams.put("rule_id", ruleId); lookupParams.put("company_code", companyCode); - Map existing = sqlSession.selectOne(NS + "get_rule_by_id", lookupParams); + Map existing = sqlSession.selectOne(NS + "getRuleById", lookupParams); if (existing != null) { // 업데이트 Map upParams = new HashMap<>(body); upParams.put("rule_id", ruleId); upParams.put("company_code", companyCode); - sqlSession.update(NS + "update_rule", upParams); + sqlSession.update(NS + "updateRule", upParams); // parts 교체 - sqlSession.delete(NS + "delete_rule_parts_by_rule_id", lookupParams); + sqlSession.delete(NS + "deleteRulePartsByRuleId", lookupParams); } else { // 신규 등록 createRule(body, companyCode); @@ -320,7 +320,7 @@ public class NumberingRuleService extends BaseService { String targetCompanyCode) { Map srcParams = new HashMap<>(); srcParams.put("company_code", sourceCompanyCode); - List> sourceRules = sqlSession.selectList(NS + "get_rules_for_copy", srcParams); + List> sourceRules = sqlSession.selectList(NS + "getRulesForCopy", srcParams); int copied = 0; int skipped = 0; @@ -332,7 +332,7 @@ public class NumberingRuleService extends BaseService { Map checkParams = new HashMap<>(); checkParams.put("rule_id", ruleId); checkParams.put("company_code", targetCompanyCode); - Map existing = sqlSession.selectOne(NS + "get_rule_by_id", checkParams); + Map existing = sqlSession.selectOne(NS + "getRuleById", checkParams); if (existing != null) { skipped++; @@ -344,13 +344,13 @@ public class NumberingRuleService extends BaseService { insertParams.put("company_code", targetCompanyCode); insertParams.put("current_sequence", 0); insertParams.put("created_by", "system"); - sqlSession.insert(NS + "insert_rule", insertParams); + sqlSession.insert(NS + "insertRule", insertParams); // parts 복사 Map partsParams = new HashMap<>(); partsParams.put("rule_id", ruleId); partsParams.put("company_code", sourceCompanyCode); - List> parts = sqlSession.selectList(NS + "get_rule_parts_for_copy", partsParams); + List> parts = sqlSession.selectList(NS + "getRulePartsForCopy", partsParams); insertParts(parts, ruleId, targetCompanyCode); copied++; @@ -382,7 +382,7 @@ public class NumberingRuleService extends BaseService { Map manualConfig = parseAutoConfig(part.get("manual_config")); partParams.put("manual_config", toJsonString(manualConfig)); - sqlSession.insert(NS + "insert_rule_part", partParams); + sqlSession.insert(NS + "insertRulePart", partParams); } } @@ -397,7 +397,7 @@ public class NumberingRuleService extends BaseService { Map params = new HashMap<>(); params.put("rule_id", ruleId); params.put("company_code", companyCode); - List> parts = sqlSession.selectList(NS + "get_rule_parts_by_rule_id", params); + List> parts = sqlSession.selectList(NS + "getRulePartsByRuleId", params); // autoConfig에서 separatorAfter 추출 for (Map part : parts) { Map ac = parseAutoConfig(part.get("auto_config")); @@ -420,7 +420,7 @@ public class NumberingRuleService extends BaseService { params.put("rule_id", ruleId); params.put("company_code", companyCode); params.put("prefix_key", prefixKey); - Map row = sqlSession.selectOne(NS + "get_sequence_for_prefix", params); + Map row = sqlSession.selectOne(NS + "getSequenceForPrefix", params); if (row == null) return 0L; Object seq = row.get("current_sequence"); return seq == null ? 0L : ((Number) seq).longValue(); diff --git a/backend-spring/src/main/java/com/erp/service/PackagingService.java b/backend-spring/src/main/java/com/erp/service/PackagingService.java index 3a3bda43..95429a2a 100644 --- a/backend-spring/src/main/java/com/erp/service/PackagingService.java +++ b/backend-spring/src/main/java/com/erp/service/PackagingService.java @@ -22,28 +22,28 @@ public class PackagingService extends BaseService { public List> getPkgUnits(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_pkg_units", params); + return sqlSession.selectList(NS + "getPkgUnits", params); } @Transactional public Map createPkgUnit(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_pkg_unit", params); + sqlSession.insert(NS + "insertPkgUnit", params); return params; } @Transactional public Map updatePkgUnit(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_pkg_unit", params); + sqlSession.update(NS + "updatePkgUnit", params); return params; } @Transactional public Map deletePkgUnit(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_pkg_unit_items_by_unit_id", params); - sqlSession.delete(NS + "delete_pkg_unit", params); + sqlSession.delete(NS + "deletePkgUnitItemsByUnitId", params); + sqlSession.delete(NS + "deletePkgUnit", params); return params; } @@ -51,20 +51,20 @@ public class PackagingService extends BaseService { public List> getPkgUnitItems(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_pkg_unit_items", params); + return sqlSession.selectList(NS + "getPkgUnitItems", params); } @Transactional public Map createPkgUnitItem(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_pkg_unit_item", params); + sqlSession.insert(NS + "insertPkgUnitItem", params); return params; } @Transactional public Map deletePkgUnitItem(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_pkg_unit_item", params); + sqlSession.delete(NS + "deletePkgUnitItem", params); return params; } @@ -72,28 +72,28 @@ public class PackagingService extends BaseService { public List> getLoadingUnits(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_loading_units", params); + return sqlSession.selectList(NS + "getLoadingUnits", params); } @Transactional public Map createLoadingUnit(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_loading_unit", params); + sqlSession.insert(NS + "insertLoadingUnit", params); return params; } @Transactional public Map updateLoadingUnit(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_loading_unit", params); + sqlSession.update(NS + "updateLoadingUnit", params); return params; } @Transactional public Map deleteLoadingUnit(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_loading_unit_pkgs_by_unit_id", params); - sqlSession.delete(NS + "delete_loading_unit", params); + sqlSession.delete(NS + "deleteLoadingUnitPkgsByUnitId", params); + sqlSession.delete(NS + "deleteLoadingUnit", params); return params; } @@ -101,20 +101,20 @@ public class PackagingService extends BaseService { public List> getLoadingUnitPkgs(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_loading_unit_pkgs", params); + return sqlSession.selectList(NS + "getLoadingUnitPkgs", params); } @Transactional public Map createLoadingUnitPkg(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_loading_unit_pkg", params); + sqlSession.insert(NS + "insertLoadingUnitPkg", params); return params; } @Transactional public Map deleteLoadingUnitPkg(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_loading_unit_pkg", params); + sqlSession.delete(NS + "deleteLoadingUnitPkg", params); return params; } } diff --git a/backend-spring/src/main/java/com/erp/service/ProcessWorkStandardService.java b/backend-spring/src/main/java/com/erp/service/ProcessWorkStandardService.java index 65ae366d..1a473677 100644 --- a/backend-spring/src/main/java/com/erp/service/ProcessWorkStandardService.java +++ b/backend-spring/src/main/java/com/erp/service/ProcessWorkStandardService.java @@ -19,80 +19,80 @@ public class ProcessWorkStandardService extends BaseService { public Map getProcessWorkStandardItemList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - Integer totalObj = sqlSession.selectOne(NS + "get_process_work_standard_item_list_cnt", params); + Integer totalObj = sqlSession.selectOne(NS + "getProcessWorkStandardItemListCnt", params); int totalCount = totalObj != null ? totalObj : 0; - List> list = sqlSession.selectList(NS + "get_process_work_standard_item_list", params); + List> list = sqlSession.selectList(NS + "getProcessWorkStandardItemList", params); return commonService.buildListResponse(list, totalCount, params); } public List> getProcessWorkStandardRoutingList(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_process_work_standard_routing_list", params); + return sqlSession.selectList(NS + "getProcessWorkStandardRoutingList", params); } @Transactional public Map setProcessWorkStandardDefaultVersion(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "set_process_work_standard_default_version", params); + sqlSession.update(NS + "setProcessWorkStandardDefaultVersion", params); return params; } @Transactional public Map unsetProcessWorkStandardDefaultVersion(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "unset_process_work_standard_default_version", params); + sqlSession.update(NS + "unsetProcessWorkStandardDefaultVersion", params); return params; } public List> getProcessWorkStandardWorkItemList(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_process_work_standard_work_item_list", params); + return sqlSession.selectList(NS + "getProcessWorkStandardWorkItemList", params); } @Transactional public Map insertProcessWorkStandardWorkItem(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_process_work_standard_work_item", params); + sqlSession.insert(NS + "insertProcessWorkStandardWorkItem", params); return params; } @Transactional public Map updateProcessWorkStandardWorkItem(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_process_work_standard_work_item", params); + sqlSession.update(NS + "updateProcessWorkStandardWorkItem", params); return params; } @Transactional public Map deleteProcessWorkStandardWorkItem(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_process_work_standard_work_item", params); + sqlSession.delete(NS + "deleteProcessWorkStandardWorkItem", params); return params; } public List> getProcessWorkStandardWorkItemDetailList(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_process_work_standard_work_item_detail_list", params); + return sqlSession.selectList(NS + "getProcessWorkStandardWorkItemDetailList", params); } @Transactional public Map insertProcessWorkStandardWorkItemDetail(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_process_work_standard_work_item_detail", params); + sqlSession.insert(NS + "insertProcessWorkStandardWorkItemDetail", params); return params; } @Transactional public Map updateProcessWorkStandardWorkItemDetail(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.update(NS + "update_process_work_standard_work_item_detail", params); + sqlSession.update(NS + "updateProcessWorkStandardWorkItemDetail", params); return params; } @Transactional public Map deleteProcessWorkStandardWorkItemDetail(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_process_work_standard_work_item_detail", params); + sqlSession.delete(NS + "deleteProcessWorkStandardWorkItemDetail", params); return params; } @@ -105,9 +105,9 @@ public class ProcessWorkStandardService extends BaseService { for (Map workItem : workItems) { workItem.put("company_code", params.get("company_code")); if (workItem.get("id") != null) { - sqlSession.update(NS + "update_process_work_standard_work_item", workItem); + sqlSession.update(NS + "updateProcessWorkStandardWorkItem", workItem); } else { - sqlSession.insert(NS + "insert_process_work_standard_work_item", workItem); + sqlSession.insert(NS + "insertProcessWorkStandardWorkItem", workItem); } List> details = (List>) workItem.get("details"); if (details != null) { @@ -115,9 +115,9 @@ public class ProcessWorkStandardService extends BaseService { detail.put("company_code", params.get("company_code")); detail.put("work_item_id", workItem.get("id")); if (detail.get("id") != null) { - sqlSession.update(NS + "update_process_work_standard_work_item_detail", detail); + sqlSession.update(NS + "updateProcessWorkStandardWorkItemDetail", detail); } else { - sqlSession.insert(NS + "insert_process_work_standard_work_item_detail", detail); + sqlSession.insert(NS + "insertProcessWorkStandardWorkItemDetail", detail); } } } @@ -128,13 +128,13 @@ public class ProcessWorkStandardService extends BaseService { public List> getProcessWorkStandardRegisteredItemList(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_process_work_standard_registered_item_list", params); + return sqlSession.selectList(NS + "getProcessWorkStandardRegisteredItemList", params); } @Transactional public Map insertProcessWorkStandardRegisteredItem(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.insert(NS + "insert_process_work_standard_registered_item", params); + sqlSession.insert(NS + "insertProcessWorkStandardRegisteredItem", params); return params; } @@ -148,14 +148,14 @@ public class ProcessWorkStandardService extends BaseService { item.put("company_code", params.get("company_code")); } } - sqlSession.insert(NS + "insert_process_work_standard_registered_item_batch", params); + sqlSession.insert(NS + "insertProcessWorkStandardRegisteredItemBatch", params); return params; } @Transactional public Map deleteProcessWorkStandardRegisteredItem(Map params) { commonService.applyCompanyCodeFilter(params); - sqlSession.delete(NS + "delete_process_work_standard_registered_item", params); + sqlSession.delete(NS + "deleteProcessWorkStandardRegisteredItem", params); return params; } } diff --git a/backend-spring/src/main/java/com/erp/service/RoleService.java b/backend-spring/src/main/java/com/erp/service/RoleService.java index 2390a008..1b4004ad 100644 --- a/backend-spring/src/main/java/com/erp/service/RoleService.java +++ b/backend-spring/src/main/java/com/erp/service/RoleService.java @@ -50,10 +50,6 @@ public class RoleService extends BaseService { memberParams.put("master_objid", objid); sqlSession.delete("role.deleteAllRoleMembers", memberParams); - Map menuParams = new HashMap<>(); - menuParams.put("auth_objid", objid); - sqlSession.delete("role.deleteMenuPermissions", menuParams); - sqlSession.delete("role.deleteRoleGroup", params); log.info("권한 그룹 삭제 완료: objid={}", objid); } diff --git a/backend-spring/src/main/java/com/erp/service/SalesReportService.java b/backend-spring/src/main/java/com/erp/service/SalesReportService.java index d9c01eb7..a9322831 100644 --- a/backend-spring/src/main/java/com/erp/service/SalesReportService.java +++ b/backend-spring/src/main/java/com/erp/service/SalesReportService.java @@ -23,8 +23,8 @@ public class SalesReportService extends BaseService { public Map getSalesReportList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_sales_report_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_sales_report_list", params); + int totalCount = sqlSession.selectOne(NS + "getSalesReportListCnt", params); + List> list = sqlSession.selectList(NS + "getSalesReportList", params); for (Map row : list) { row.put("unit_price", DecimalUtils.toBigDecimal(row.get("unit_price"))); row.put("order_amt", DecimalUtils.toBigDecimal(row.get("order_amt"))); @@ -36,7 +36,7 @@ public class SalesReportService extends BaseService { public Map getSalesReportSummary(Map params) { commonService.applyCompanyCodeFilter(params); - Map summary = sqlSession.selectOne(NS + "get_sales_report_summary", params); + Map summary = sqlSession.selectOne(NS + "getSalesReportSummary", params); if (summary != null) { summary.put("total_amount", DecimalUtils.toBigDecimal(summary.get("total_amount"))); summary.put("avg_unit_price", DecimalUtils.toBigDecimal(summary.get("avg_unit_price"))); @@ -48,15 +48,15 @@ public class SalesReportService extends BaseService { public Map getSalesReportData(Map params) { commonService.applyCompanyCodeFilter(params); - List> rows = sqlSession.selectList(NS + "get_sales_report_data_rows", params); + List> rows = sqlSession.selectList(NS + "getSalesReportDataRows", params); for (Map row : rows) { row.put("unit_price", DecimalUtils.toBigDecimal(row.get("unit_price"))); row.put("order_amt", DecimalUtils.toBigDecimal(row.get("order_amt"))); row.put("order_qty", DecimalUtils.toBigDecimal(row.get("order_qty"))); row.put("ship_qty", DecimalUtils.toBigDecimal(row.get("ship_qty"))); } - List> customers = sqlSession.selectList(NS + "get_sales_report_customers", params); - List> statuses = sqlSession.selectList(NS + "get_sales_report_statuses", params); + List> customers = sqlSession.selectList(NS + "getSalesReportCustomers", params); + List> statuses = sqlSession.selectList(NS + "getSalesReportStatuses", params); // 데이터에서 품목 목록 추출 (중복 제거) Map itemSet = new LinkedHashMap<>(); diff --git a/backend-spring/src/main/java/com/erp/service/ScheduleService.java b/backend-spring/src/main/java/com/erp/service/ScheduleService.java index 800c1ac6..8d8cb2d3 100644 --- a/backend-spring/src/main/java/com/erp/service/ScheduleService.java +++ b/backend-spring/src/main/java/com/erp/service/ScheduleService.java @@ -21,12 +21,12 @@ public class ScheduleService extends BaseService { public List> getScheduleList(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList(NS + "get_schedule_list", params); + return sqlSession.selectList(NS + "getScheduleList", params); } public Map getScheduleInfo(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectOne(NS + "get_schedule_info", params); + return sqlSession.selectOne(NS + "getScheduleInfo", params); } /** @@ -150,7 +150,7 @@ public class ScheduleService extends BaseService { existParams.put("period_start", period.get("start")); existParams.put("period_end", period.get("end")); try { - toDelete = sqlSession.selectList(NS + "get_existing_schedule_list", existParams); + toDelete = sqlSession.selectList(NS + "getExistingScheduleList", existParams); } catch (Exception e) { log.warn("기존 스케줄 조회 실패: {}", e.getMessage()); } @@ -201,7 +201,7 @@ public class ScheduleService extends BaseService { Map deleteParams = new HashMap<>(); deleteParams.put("company_code", companyCode); deleteParams.put("id_list", deleteIds); - sqlSession.delete(NS + "delete_schedules_by_id_list", deleteParams); + sqlSession.delete(NS + "deleteSchedulesByIdList", deleteParams); deleted = deleteIds.size(); } } @@ -213,7 +213,7 @@ public class ScheduleService extends BaseService { insertParams.put("generated_by", userId); insertParams.put("created_by", userId); insertParams.put("updated_by", userId); - sqlSession.insert(NS + "insert_schedule", insertParams); + sqlSession.insert(NS + "insertSchedule", insertParams); created++; } @@ -226,19 +226,19 @@ public class ScheduleService extends BaseService { @Transactional public int insertSchedule(Map params) { - return sqlSession.insert(NS + "insert_schedule", params); + return sqlSession.insert(NS + "insertSchedule", params); } @Transactional public int updateSchedule(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.update(NS + "update_schedule", params); + return sqlSession.update(NS + "updateSchedule", params); } @Transactional public Map deleteSchedule(Map params) { commonService.applyCompanyCodeFilter(params); - int affected = sqlSession.delete(NS + "delete_schedule", params); + int affected = sqlSession.delete(NS + "deleteSchedule", params); if (affected == 0) { Map result = new HashMap<>(); result.put("success", false); @@ -251,7 +251,7 @@ public class ScheduleService extends BaseService { historyParams.put("schedule_id", params.get("schedule_id")); historyParams.put("action", "DELETE"); historyParams.put("changed_by", params.getOrDefault("user_id", "system")); - sqlSession.insert(NS + "insert_schedule_history", historyParams); + sqlSession.insert(NS + "insertScheduleHistory", historyParams); } catch (Exception e) { log.warn("스케줄 이력 저장 실패 (무시): {}", e.getMessage()); } diff --git a/backend-spring/src/main/java/com/erp/service/ScreenGroupService.java b/backend-spring/src/main/java/com/erp/service/ScreenGroupService.java index 0930f521..5b3a7186 100644 --- a/backend-spring/src/main/java/com/erp/service/ScreenGroupService.java +++ b/backend-spring/src/main/java/com/erp/service/ScreenGroupService.java @@ -26,8 +26,8 @@ public class ScreenGroupService extends BaseService { params.put("limit", size); params.put("offset", (page - 1) * size); - int total = sqlSession.selectOne(NS + "count_screen_groups", params); - List> groups = sqlSession.selectList(NS + "select_screen_groups", params); + int total = sqlSession.selectOne(NS + "countScreenGroups", params); + List> groups = sqlSession.selectList(NS + "selectScreenGroups", params); // screens 조립 (별도 쿼리) if (!groups.isEmpty()) { @@ -36,7 +36,7 @@ public class ScreenGroupService extends BaseService { .collect(Collectors.toList()); Map screenParams = new HashMap<>(); screenParams.put("group_ids", groupIds); - List> allScreens = sqlSession.selectList(NS + "select_group_screens_by_group_ids", screenParams); + List> allScreens = sqlSession.selectList(NS + "selectGroupScreensByGroupIds", screenParams); Map>> byGroup = allScreens.stream() .collect(Collectors.groupingBy(s -> s.get("group_id"))); for (Map g : groups) { @@ -55,13 +55,13 @@ public class ScreenGroupService extends BaseService { } public Map getScreenGroup(Map params) { - Map group = sqlSession.selectOne(NS + "select_screen_group_by_id", params); + Map group = sqlSession.selectOne(NS + "selectScreenGroupById", params); if (group == null) return null; List groupIds = Collections.singletonList(group.get("id")); Map sp = new HashMap<>(); sp.put("group_ids", groupIds); - List> screens = sqlSession.selectList(NS + "select_group_screens_by_group_ids", sp); + List> screens = sqlSession.selectList(NS + "selectGroupScreensByGroupIds", sp); group.put("screens", screens); return group; } @@ -75,7 +75,7 @@ public class ScreenGroupService extends BaseService { if (parentGroupId != null) { Map pp = new HashMap<>(); pp.put("parent_group_id", parentGroupId); - Map parent = sqlSession.selectOne(NS + "select_parent_group_by_id", pp); + Map parent = sqlSession.selectOne(NS + "selectParentGroupById", pp); if (parent != null) { groupLevel = toInt(parent.getOrDefault("group_level", 0)) + 1; parentHierarchyPath = (String) parent.getOrDefault("hierarchy_path", @@ -84,7 +84,7 @@ public class ScreenGroupService extends BaseService { } params.put("group_level", groupLevel); - sqlSession.insert(NS + "insert_screen_group", params); + sqlSession.insert(NS + "insertScreenGroup", params); Object newId = params.get("id"); // hierarchy_path 업데이트 @@ -97,11 +97,11 @@ public class ScreenGroupService extends BaseService { Map hp = new HashMap<>(); hp.put("id", newId); hp.put("hierarchy_path", hierarchyPath); - sqlSession.update(NS + "update_screen_group_hierarchy_path", hp); + sqlSession.update(NS + "updateScreenGroupHierarchyPath", hp); Map sp = new HashMap<>(); sp.put("id", newId); - return sqlSession.selectOne(NS + "select_screen_group_by_id", sp); + return sqlSession.selectOne(NS + "selectScreenGroupById", sp); } @Transactional @@ -121,7 +121,7 @@ public class ScreenGroupService extends BaseService { if (parentGroupId != null) { Map pp = new HashMap<>(); pp.put("parent_group_id", parentGroupId); - Map parent = sqlSession.selectOne(NS + "select_parent_group_by_id", pp); + Map parent = sqlSession.selectOne(NS + "selectParentGroupById", pp); if (parent != null) { String parentPath = (String) parent.getOrDefault("hierarchy_path", "/" + parentGroupId + "/"); @@ -140,16 +140,16 @@ public class ScreenGroupService extends BaseService { Object targetCompanyCode = params.get("target_company_code"); int rows; if ("*".equals(userCompanyCode) && targetCompanyCode != null) { - rows = sqlSession.update(NS + "update_screen_group_with_company", params); + rows = sqlSession.update(NS + "updateScreenGroupWithCompany", params); } else { - rows = sqlSession.update(NS + "update_screen_group", params); + rows = sqlSession.update(NS + "updateScreenGroup", params); } if (rows == 0) { throw new NoSuchElementException("화면 그룹을 찾을 수 없거나 권한이 없습니다."); } Map sp = new HashMap<>(); sp.put("id", id); - return sqlSession.selectOne(NS + "select_screen_group_by_id", sp); + return sqlSession.selectOne(NS + "selectScreenGroupById", sp); } @Transactional @@ -159,7 +159,7 @@ public class ScreenGroupService extends BaseService { boolean deleteNumberingRules = Boolean.TRUE.equals(params.get("delete_numbering_rules")); // 대상 그룹의 company_code 확인 - Map target = sqlSession.selectOne(NS + "select_screen_group_for_delete", params); + Map target = sqlSession.selectOne(NS + "selectScreenGroupForDelete", params); if (target == null) { throw new NoSuchElementException("화면 그룹을 찾을 수 없습니다."); } @@ -174,7 +174,7 @@ public class ScreenGroupService extends BaseService { Map cp = new HashMap<>(); cp.put("id", id); cp.put("target_company_code", targetCompanyCode); - List> children = sqlSession.selectList(NS + "select_all_child_group_ids", cp); + List> children = sqlSession.selectList(NS + "selectAllChildGroupIds", cp); List groupIds = children.stream().map(c -> c.get("id")).collect(Collectors.toList()); if (!groupIds.isEmpty()) { @@ -182,33 +182,33 @@ public class ScreenGroupService extends BaseService { Map mp = new HashMap<>(); mp.put("group_ids", groupIds); mp.put("target_company_code", targetCompanyCode); - List> menus = sqlSession.selectList(NS + "select_menus_by_group_ids", mp); + List> menus = sqlSession.selectList(NS + "selectMenusByGroupIds", mp); List menuObjids = menus.stream().map(m -> m.get("objid")).collect(Collectors.toList()); if (!menuObjids.isEmpty()) { Map delp = new HashMap<>(); delp.put("menu_objids", menuObjids); delp.put("target_company_code", targetCompanyCode); - sqlSession.delete(NS + "delete_screen_menu_assignments_by_menu_objids", delp); - sqlSession.delete(NS + "delete_menus_by_group_ids", mp); + sqlSession.delete(NS + "deleteScreenMenuAssignmentsByMenuObjids", delp); + sqlSession.delete(NS + "deleteMenusByGroupIds", mp); } // 채번 규칙 삭제 (최상위 그룹 + 명시 요청) if (deleteNumberingRules) { Map rp = new HashMap<>(); rp.put("id", id); - int isRoot = sqlSession.selectOne(NS + "is_root_group_by_id", rp); + int isRoot = sqlSession.selectOne(NS + "isRootGroupById", rp); if (isRoot > 0) { Map nrp = new HashMap<>(); nrp.put("target_company_code", targetCompanyCode); - sqlSession.delete(NS + "delete_numbering_rule_parts", nrp); - sqlSession.delete(NS + "delete_numbering_rules", nrp); + sqlSession.delete(NS + "deleteNumberingRuleParts", nrp); + sqlSession.delete(NS + "deleteNumberingRules", nrp); } } } // 그룹 삭제 - int deleted = sqlSession.delete(NS + "delete_screen_group_by_id", cp); + int deleted = sqlSession.delete(NS + "deleteScreenGroupById", cp); if (deleted == 0) { throw new NoSuchElementException("화면 그룹을 찾을 수 없거나 권한이 없습니다."); } @@ -220,12 +220,12 @@ public class ScreenGroupService extends BaseService { @Transactional public Map addScreenToGroup(Map params) { - sqlSession.insert(NS + "insert_group_screen", params); + sqlSession.insert(NS + "insertGroupScreen", params); // 삽입 후 조회 List ids = Collections.singletonList(params.get("group_id")); Map sp = new HashMap<>(); sp.put("group_ids", ids); - List> screens = sqlSession.selectList(NS + "select_group_screens_by_group_ids", sp); + List> screens = sqlSession.selectList(NS + "selectGroupScreensByGroupIds", sp); return screens.stream() .filter(s -> Objects.equals(s.get("screen_id"), params.get("screen_id"))) .findFirst() @@ -234,14 +234,14 @@ public class ScreenGroupService extends BaseService { @Transactional public Map updateScreenInGroup(Map params) { - int rows = sqlSession.update(NS + "update_group_screen", params); + int rows = sqlSession.update(NS + "updateGroupScreen", params); if (rows == 0) throw new NoSuchElementException("연결을 찾을 수 없거나 권한이 없습니다."); return params; } @Transactional public void removeScreenFromGroup(Map params) { - int rows = sqlSession.delete(NS + "delete_group_screen", params); + int rows = sqlSession.delete(NS + "deleteGroupScreen", params); if (rows == 0) throw new NoSuchElementException("연결을 찾을 수 없거나 권한이 없습니다."); } @@ -250,25 +250,25 @@ public class ScreenGroupService extends BaseService { // ══════════════════════════════════════════════════════════════ public List> getFieldJoins(Map params) { - return sqlSession.selectList(NS + "select_field_joins", params); + return sqlSession.selectList(NS + "selectFieldJoins", params); } @Transactional public Map createFieldJoin(Map params) { - sqlSession.insert(NS + "insert_field_join", params); + sqlSession.insert(NS + "insertFieldJoin", params); return params; } @Transactional public Map updateFieldJoin(Map params) { - int rows = sqlSession.update(NS + "update_field_join", params); + int rows = sqlSession.update(NS + "updateFieldJoin", params); if (rows == 0) throw new NoSuchElementException("필드 조인을 찾을 수 없거나 권한이 없습니다."); return params; } @Transactional public void deleteFieldJoin(Map params) { - int rows = sqlSession.delete(NS + "delete_field_join", params); + int rows = sqlSession.delete(NS + "deleteFieldJoin", params); if (rows == 0) throw new NoSuchElementException("필드 조인을 찾을 수 없거나 권한이 없습니다."); } @@ -277,28 +277,28 @@ public class ScreenGroupService extends BaseService { // ══════════════════════════════════════════════════════════════ public List> getDataFlows(Map params) { - return sqlSession.selectList(NS + "select_data_flows", params); + return sqlSession.selectList(NS + "selectDataFlows", params); } @Transactional public Map createDataFlow(Map params) { // data_mapping을 JSON 문자열로 변환 convertToJsonString(params, "data_mapping"); - sqlSession.insert(NS + "insert_data_flow", params); + sqlSession.insert(NS + "insertDataFlow", params); return params; } @Transactional public Map updateDataFlow(Map params) { convertToJsonString(params, "data_mapping"); - int rows = sqlSession.update(NS + "update_data_flow", params); + int rows = sqlSession.update(NS + "updateDataFlow", params); if (rows == 0) throw new NoSuchElementException("데이터 흐름을 찾을 수 없거나 권한이 없습니다."); return params; } @Transactional public void deleteDataFlow(Map params) { - int rows = sqlSession.delete(NS + "delete_data_flow", params); + int rows = sqlSession.delete(NS + "deleteDataFlow", params); if (rows == 0) throw new NoSuchElementException("데이터 흐름을 찾을 수 없거나 권한이 없습니다."); } @@ -307,25 +307,25 @@ public class ScreenGroupService extends BaseService { // ══════════════════════════════════════════════════════════════ public List> getTableRelations(Map params) { - return sqlSession.selectList(NS + "select_table_relations", params); + return sqlSession.selectList(NS + "selectTableRelations", params); } @Transactional public Map createTableRelation(Map params) { - sqlSession.insert(NS + "insert_table_relation", params); + sqlSession.insert(NS + "insertTableRelation", params); return params; } @Transactional public Map updateTableRelation(Map params) { - int rows = sqlSession.update(NS + "update_table_relation", params); + int rows = sqlSession.update(NS + "updateTableRelation", params); if (rows == 0) throw new NoSuchElementException("화면-테이블 관계를 찾을 수 없거나 권한이 없습니다."); return params; } @Transactional public void deleteTableRelation(Map params) { - int rows = sqlSession.delete(NS + "delete_table_relation", params); + int rows = sqlSession.delete(NS + "deleteTableRelation", params); if (rows == 0) throw new NoSuchElementException("화면-테이블 관계를 찾을 수 없거나 권한이 없습니다."); } @@ -334,7 +334,7 @@ public class ScreenGroupService extends BaseService { // ══════════════════════════════════════════════════════════════ public Map getScreenLayoutSummary(Map params) { - List> rows = sqlSession.selectList(NS + "select_layout_components", params); + List> rows = sqlSession.selectList(NS + "selectLayoutComponents", params); Map widgetCounts = new LinkedHashMap<>(); List labels = new ArrayList<>(); @@ -380,7 +380,7 @@ public class ScreenGroupService extends BaseService { Map params = new HashMap<>(); params.put("screen_ids", screenIds); - List> rows = sqlSession.selectList(NS + "select_multiple_layout_components", params); + List> rows = sqlSession.selectList(NS + "selectMultipleLayoutComponents", params); // 화면별 summary 초기화 Map> summaryMap = new LinkedHashMap<>(); @@ -462,7 +462,7 @@ public class ScreenGroupService extends BaseService { p.put("screen_ids", screenIds); // ── 1. 컴포넌트 config 기반 서브 테이블 수집 ───────────────── - List> compRows = sqlSession.selectList(NS + "select_sub_table_component_configs", p); + List> compRows = sqlSession.selectList(NS + "selectSubTableComponentConfigs", p); // column label lookup 수집 List> columnPairs = new ArrayList<>(); @@ -489,7 +489,7 @@ public class ScreenGroupService extends BaseService { if (!columnPairs.isEmpty()) { Map lp = new HashMap<>(); lp.put("pairs", columnPairs); - sqlSession.>selectList(NS + "select_column_labels_by_pairs", lp) + sqlSession.>selectList(NS + "selectColumnLabelsByPairs", lp) .forEach(r -> colLabelMap.put(r.get("table_name") + "." + r.get("column_name"), (String) r.get("column_label"))); } @@ -523,7 +523,7 @@ public class ScreenGroupService extends BaseService { }); // ── 2. reference_table 기반 참조 서브 테이블 ────────────────── - sqlSession.>selectList(NS + "select_reference_columns", p).forEach(row -> { + sqlSession.>selectList(NS + "selectReferenceColumns", p).forEach(row -> { int sid = toInt(row.get("screen_id")); String mainTable = (String) row.get("main_table"); String refTable = (String) row.get("reference_table"); @@ -562,7 +562,7 @@ public class ScreenGroupService extends BaseService { }); // ── 3. parentDataMapping ─────────────────────────────────── - sqlSession.>selectList(NS + "select_parent_data_mapping_configs", p).forEach(row -> { + sqlSession.>selectList(NS + "selectParentDataMappingConfigs", p).forEach(row -> { int sid = toInt(row.get("screen_id")); String mainTable = (String) row.get("main_table"); String compType = (String) row.get("component_type"); @@ -611,7 +611,7 @@ public class ScreenGroupService extends BaseService { }); // ── 4. rightPanel.relation ───────────────────────────────── - List> rpRows = sqlSession.selectList(NS + "select_right_panel_relations", p); + List> rpRows = sqlSession.selectList(NS + "selectRightPanelRelations", p); // rightPanel columns에서 dot-notation 참조 테이블 수집 Map> rpJoinedTables = new HashMap<>(); rpRows.forEach(row -> { @@ -734,7 +734,7 @@ public class ScreenGroupService extends BaseService { fkp.put("sub_table_names", new ArrayList<>(subTableNamesSet)); fkp.put("ref_table_names", new ArrayList<>(refTableNamesSet)); Map>> joinColRefs = new HashMap<>(); - sqlSession.>selectList(NS + "select_fk_columns_for_joined_tables", fkp).forEach(row -> { + sqlSession.>selectList(NS + "selectFkColumnsForJoinedTables", fkp).forEach(row -> { String tbl = (String) row.get("table_name"); joinColRefs.computeIfAbsent(tbl, k -> new ArrayList<>()); String col = (String) row.get("column_name"); @@ -823,7 +823,7 @@ public class ScreenGroupService extends BaseService { }); // ── 8. Save Tables ──────────────────────────────────────── - sqlSession.>selectList(NS + "select_save_table_actions", p).forEach(row -> { + sqlSession.>selectList(NS + "selectSaveTableActions", p).forEach(row -> { int sid = toInt(row.get("screen_id")); String mainTable = (String) row.get("main_table"); String actionType = (String) row.get("action_type"); @@ -853,7 +853,7 @@ public class ScreenGroupService extends BaseService { }); // ── 9. 전역 메인 테이블 목록 ────────────────────────────── - List globalMainTables = sqlSession.>selectList(NS + "select_global_main_tables", p).stream() + List globalMainTables = sqlSession.>selectList(NS + "selectGlobalMainTables", p).stream() .map(r -> (String) r.get("main_table")) .filter(t -> t != null && !t.isEmpty()) .collect(Collectors.toList()); @@ -869,12 +869,12 @@ public class ScreenGroupService extends BaseService { // ══════════════════════════════════════════════════════════════ public List> getPopScreenGroups(Map params) { - List> groups = sqlSession.selectList(NS + "select_pop_screen_groups", params); + List> groups = sqlSession.selectList(NS + "selectPopScreenGroups", params); if (!groups.isEmpty()) { List groupIds = groups.stream().map(g -> g.get("id")).collect(Collectors.toList()); Map sp = new HashMap<>(); sp.put("group_ids", groupIds); - List> allScreens = sqlSession.selectList(NS + "select_pop_group_screens", sp); + List> allScreens = sqlSession.selectList(NS + "selectPopGroupScreens", sp); Map>> byGroup = allScreens.stream() .collect(Collectors.groupingBy(s -> s.get("group_id"))); groups.forEach(g -> g.put("screens", byGroup.getOrDefault(g.get("id"), Collections.emptyList()))); @@ -897,7 +897,7 @@ public class ScreenGroupService extends BaseService { if (parentGroupId != null) { Map pp = new HashMap<>(); pp.put("parent_group_id", parentGroupId); - Map parent = sqlSession.selectOne(NS + "select_parent_group_by_id", pp); + Map parent = sqlSession.selectOne(NS + "selectParentGroupById", pp); if (parent != null) { hierarchyPath = parent.get("hierarchy_path") + "/" + params.get("group_code"); } else { @@ -909,37 +909,37 @@ public class ScreenGroupService extends BaseService { params.put("hierarchy_path", hierarchyPath); // 중복 체크 - int dupCount = sqlSession.selectOne(NS + "count_group_by_code", params); + int dupCount = sqlSession.selectOne(NS + "countGroupByCode", params); if (dupCount > 0) { throw new IllegalArgumentException("동일한 그룹코드가 이미 존재합니다."); } - sqlSession.insert(NS + "insert_pop_screen_group", params); + sqlSession.insert(NS + "insertPopScreenGroup", params); Map sp = new HashMap<>(); sp.put("id", params.get("id")); - return sqlSession.selectOne(NS + "select_screen_group_by_id", sp); + return sqlSession.selectOne(NS + "selectScreenGroupById", sp); } @Transactional public Map updatePopScreenGroup(Map params) { - Map existing = sqlSession.selectOne(NS + "select_screen_group_for_update", params); + Map existing = sqlSession.selectOne(NS + "selectScreenGroupForUpdate", params); if (existing == null) throw new NoSuchElementException("그룹을 찾을 수 없습니다."); String hierarchyPath = (String) existing.get("hierarchy_path"); if (hierarchyPath == null || !hierarchyPath.startsWith("POP")) { throw new IllegalArgumentException("POP 그룹만 수정할 수 있습니다."); } - sqlSession.update(NS + "update_pop_screen_group", params); + sqlSession.update(NS + "updatePopScreenGroup", params); Map sp = new HashMap<>(); sp.put("id", params.get("id")); - return sqlSession.selectOne(NS + "select_screen_group_by_id", sp); + return sqlSession.selectOne(NS + "selectScreenGroupById", sp); } @Transactional public void deletePopScreenGroup(Map params) { - Map existing = sqlSession.selectOne(NS + "select_screen_group_for_update", params); + Map existing = sqlSession.selectOne(NS + "selectScreenGroupForUpdate", params); if (existing == null) { - Map any = sqlSession.selectOne(NS + "select_any_screen_group_by_id", params); + Map any = sqlSession.selectOne(NS + "selectAnyScreenGroupById", params); if (any != null) { String ownerCode = (String) any.get("company_code"); throw new SecurityException("이 그룹은 " + ("*".equals(ownerCode) ? "최고관리자" : ownerCode) @@ -951,26 +951,26 @@ public class ScreenGroupService extends BaseService { if (hierarchyPath == null || !hierarchyPath.startsWith("POP")) { throw new IllegalArgumentException("POP 그룹만 삭제할 수 있습니다."); } - int childCount = sqlSession.selectOne(NS + "count_child_groups_by_parent_id", params); + int childCount = sqlSession.selectOne(NS + "countChildGroupsByParentId", params); if (childCount > 0) throw new IllegalArgumentException("하위 그룹이 " + childCount + "개 있어 삭제할 수 없습니다. 하위 그룹을 먼저 삭제해주세요."); - int screenCount = sqlSession.selectOne(NS + "count_group_screens_by_group_id", params); + int screenCount = sqlSession.selectOne(NS + "countGroupScreensByGroupId", params); if (screenCount > 0) throw new IllegalArgumentException("그룹에 연결된 화면이 " + screenCount + "개 있어 삭제할 수 없습니다. 화면을 먼저 제거해주세요."); Map dp = new HashMap<>(); dp.put("id", params.get("id")); dp.put("target_company_code", existing.get("company_code")); - sqlSession.delete(NS + "delete_screen_group_by_id", dp); + sqlSession.delete(NS + "deleteScreenGroupById", dp); } public Map ensurePopRootGroup(Map params) { String companyCode = (String) params.get("company_code"); - Map existing = sqlSession.selectOne(NS + "select_pop_root_group", params); + Map existing = sqlSession.selectOne(NS + "selectPopRootGroup", params); if (existing != null) return existing; if (!"*".equals(companyCode)) return null; - sqlSession.insert(NS + "insert_pop_root_group", params); - return sqlSession.selectOne(NS + "select_pop_root_group", params); + sqlSession.insert(NS + "insertPopRootGroup", params); + return sqlSession.selectOne(NS + "selectPopRootGroup", params); } // ══════════════════════════════════════════════════════════════ @@ -986,8 +986,8 @@ public class ScreenGroupService extends BaseService { try { Map p = new HashMap<>(); p.put("company_code", companyCode); - List> groups = sqlSession.selectList(NS + "select_screen_groups_for_sync", p); - List> existingMenus = sqlSession.selectList(NS + "select_existing_menus_for_sync", p); + List> groups = sqlSession.selectList(NS + "selectScreenGroupsForSync", p); + List> existingMenus = sqlSession.selectList(NS + "selectExistingMenusForSync", p); // path/name → menu 매핑 (screen_group_id 없는 것만) Map> menuByPath = new LinkedHashMap<>(); @@ -1005,7 +1005,7 @@ public class ScreenGroupService extends BaseService { }); // 사용자 메뉴 루트 확보 - Map rootMenu = sqlSession.selectOne(NS + "select_user_menu_root", p); + Map rootMenu = sqlSession.selectOne(NS + "selectUserMenuRoot", p); long userMenuRootObjid; if (rootMenu != null) { userMenuRootObjid = toLong(rootMenu.get("objid")); @@ -1015,7 +1015,7 @@ public class ScreenGroupService extends BaseService { rp.put("objid", rootObjid); rp.put("company_code", companyCode); rp.put("user_id", userId); - sqlSession.insert(NS + "insert_user_menu_root", rp); + sqlSession.insert(NS + "insertUserMenuRoot", rp); userMenuRootObjid = rootObjid; } @@ -1053,7 +1053,7 @@ public class ScreenGroupService extends BaseService { continue; } else { Map cp = new HashMap<>(); cp.put("id", gid); - sqlSession.update(NS + "clear_screen_group_menu_objid", cp); + sqlSession.update(NS + "clearScreenGroupMenuObjid", cp); } } @@ -1068,18 +1068,18 @@ public class ScreenGroupService extends BaseService { if (matchedMenu != null) { long mObjid = toLong(matchedMenu.get("objid")); Map up = new HashMap<>(); up.put("menu_objid", mObjid); up.put("id", gid); - sqlSession.update(NS + "update_screen_group_menu_objid", up); + sqlSession.update(NS + "updateScreenGroupMenuObjid", up); Map up2 = new HashMap<>(); up2.put("group_id", gid); up2.put("objid", mObjid); - sqlSession.update(NS + "update_menu_screen_group_id", up2); + sqlSession.update(NS + "updateMenuScreenGroupId", up2); // URL 업데이트 Map dp = new HashMap<>(); dp.put("group_id", gid); dp.put("company_code", companyCode); - Map defaultScreen = sqlSession.selectOne(NS + "select_default_screen_for_group", dp); + Map defaultScreen = sqlSession.selectOne(NS + "selectDefaultScreenForGroup", dp); if (defaultScreen != null) { Map urlp = new HashMap<>(); urlp.put("menu_url", "/screens/" + defaultScreen.get("screen_id")); urlp.put("screen_code", defaultScreen.get("screen_code")); urlp.put("objid", mObjid); - sqlSession.update(NS + "update_menu_url_and_screen_code", urlp); + sqlSession.update(NS + "updateMenuUrlAndScreenCode", urlp); } groupToMenuMap.put(gid, mObjid); linked++; @@ -1101,10 +1101,10 @@ public class ScreenGroupService extends BaseService { Map seqp = new HashMap<>(); seqp.put("parent_objid", parentMenuObjid); seqp.put("company_code", companyCode); - int seq = sqlSession.selectOne(NS + "get_next_menu_seq_under_parent", seqp); + int seq = sqlSession.selectOne(NS + "getNextMenuSeqUnderParent", seqp); Map dp = new HashMap<>(); dp.put("group_id", gid); dp.put("company_code", companyCode); - Map defScreen = sqlSession.selectOne(NS + "select_default_screen_for_group", dp); + Map defScreen = sqlSession.selectOne(NS + "selectDefaultScreenForGroup", dp); String menuUrl = defScreen != null ? "/screens/" + defScreen.get("screen_id") : null; String screenCode = defScreen != null ? (String) defScreen.get("screen_code") : null; @@ -1114,10 +1114,10 @@ public class ScreenGroupService extends BaseService { ins.put("seq", seq); ins.put("company_code", companyCode); ins.put("user_id", userId); ins.put("group_id", gid); ins.put("description", group.get("description")); ins.put("menu_url", menuUrl); ins.put("screen_code", screenCode); ins.put("icon", group.get("icon")); - sqlSession.insert(NS + "insert_menu_for_group", ins); + sqlSession.insert(NS + "insertMenuForGroup", ins); Map up = new HashMap<>(); up.put("menu_objid", newObjid); up.put("id", gid); - sqlSession.update(NS + "update_screen_group_menu_objid", up); + sqlSession.update(NS + "updateScreenGroupMenuObjid", up); groupToMenuMap.put(gid, newObjid); created++; @@ -1154,11 +1154,11 @@ public class ScreenGroupService extends BaseService { p.put("company_code", companyCode); // 회사명 조회 - Map companyRow = sqlSession.selectOne(NS + "select_company_name", p); + Map companyRow = sqlSession.selectOne(NS + "selectCompanyName", p); String companyName = companyRow != null ? toStr(companyRow.get("company_name")) : companyCode; - List> menus = sqlSession.selectList(NS + "select_menus_for_sync", p); - List> groups = sqlSession.selectList(NS + "select_groups_for_sync", p); + List> menus = sqlSession.selectList(NS + "selectMenusForSync", p); + List> groups = sqlSession.selectList(NS + "selectGroupsForSync", p); // path/name → group 매핑 (menu_objid 없는 것만) Map> groupByPath = new LinkedHashMap<>(); @@ -1176,24 +1176,24 @@ public class ScreenGroupService extends BaseService { }); // 회사 폴더 확보 - Map folderRow = sqlSession.selectOne(NS + "select_root_company_folder", p); + Map folderRow = sqlSession.selectOne(NS + "selectRootCompanyFolder", p); int companyFolderId; if (folderRow != null) { companyFolderId = toInt(folderRow.get("id")); } else { - int maxOrder = sqlSession.selectOne(NS + "get_max_root_display_order", null); + int maxOrder = sqlSession.selectOne(NS + "getMaxRootDisplayOrder", null); Map fp = new HashMap<>(); fp.put("company_name", companyName); fp.put("group_code", companyCode.toLowerCase()); fp.put("display_order", maxOrder); fp.put("company_code", companyCode); fp.put("user_id", userId); - sqlSession.insert(NS + "insert_company_folder", fp); + sqlSession.insert(NS + "insertCompanyFolder", fp); companyFolderId = toInt(fp.get("id")); Map hp = new HashMap<>(); hp.put("id", companyFolderId); hp.put("hierarchy_path", "/" + companyFolderId + "/"); - sqlSession.update(NS + "update_group_hierarchy_path_by_id", hp); + sqlSession.update(NS + "updateGroupHierarchyPathById", hp); } Map menuToGroupMap = new LinkedHashMap<>(); @@ -1221,9 +1221,9 @@ public class ScreenGroupService extends BaseService { if (matchedGroup != null) { int gid = toInt(matchedGroup.get("id")); Map up = new HashMap<>(); up.put("menu_objid", mObjid); up.put("id", gid); - sqlSession.update(NS + "update_screen_group_for_menu_sync", up); + sqlSession.update(NS + "updateScreenGroupForMenuSync", up); Map up2 = new HashMap<>(); up2.put("group_id", gid); up2.put("objid", mObjid); - sqlSession.update(NS + "update_menu_screen_group_id", up2); + sqlSession.update(NS + "updateMenuScreenGroupId", up2); menuToGroupMap.put(mObjid, gid); linked++; details.add(detail("linked", mName, mObjid, gid, null)); @@ -1236,7 +1236,7 @@ public class ScreenGroupService extends BaseService { // 부모 그룹 level + hierarchy_path 조회 Map pp = new HashMap<>(); pp.put("parent_group_id", parentGid); - Map parentGroup = sqlSession.selectOne(NS + "select_parent_group_by_id", pp); + Map parentGroup = sqlSession.selectOne(NS + "selectParentGroupById", pp); int parentLevel = parentGroup != null ? toInt(parentGroup.getOrDefault("group_level", 0)) : 0; String parentPath = parentGroup != null ? toStr(parentGroup.get("hierarchy_path")) : "/" + parentGid + "/"; @@ -1251,17 +1251,17 @@ public class ScreenGroupService extends BaseService { ins.put("hierarchy_path", parentPath + "0/"); ins.put("menu_objid", mObjid); ins.put("description", menu.get("menu_desc")); - sqlSession.insert(NS + "insert_screen_group_for_sync", ins); + sqlSession.insert(NS + "insertScreenGroupForSync", ins); int newGid = toInt(ins.get("id")); String hp = (parentPath + newGid + "/").replace("//", "/"); Map hpu = new HashMap<>(); hpu.put("id", newGid); hpu.put("hierarchy_path", hp); - sqlSession.update(NS + "update_group_hierarchy_path_by_id", hpu); + sqlSession.update(NS + "updateGroupHierarchyPathById", hpu); Map up2 = new HashMap<>(); up2.put("group_id", newGid); up2.put("objid", mObjid); - sqlSession.update(NS + "update_menu_screen_group_id", up2); + sqlSession.update(NS + "updateMenuScreenGroupId", up2); menuToGroupMap.put(mObjid, newGid); existingGroupIds.add(newGid); @@ -1291,8 +1291,8 @@ public class ScreenGroupService extends BaseService { public Map getSyncStatus(String companyCode) { Map p = new HashMap<>(); p.put("company_code", companyCode); - List> groupStats = sqlSession.selectList(NS + "select_sync_status_groups", p); - List> menuStats = sqlSession.selectList(NS + "select_sync_status_menus", p); + List> groupStats = sqlSession.selectList(NS + "selectSyncStatusGroups", p); + List> menuStats = sqlSession.selectList(NS + "selectSyncStatusMenus", p); Map status = new LinkedHashMap<>(); status.put("company_code", companyCode); status.put("groups", groupStats); @@ -1305,7 +1305,7 @@ public class ScreenGroupService extends BaseService { // ══════════════════════════════════════════════════════════════ public Map syncAllCompanies(String userId) { - List> companies = sqlSession.selectList(NS + "select_all_company_codes", null); + List> companies = sqlSession.selectList(NS + "selectAllCompanyCodes", null); List> results = new ArrayList<>(); int successCount = 0, failedCount = 0; diff --git a/backend-spring/src/main/java/com/erp/service/ScreenManagementService.java b/backend-spring/src/main/java/com/erp/service/ScreenManagementService.java index 8754b77f..7426b016 100644 --- a/backend-spring/src/main/java/com/erp/service/ScreenManagementService.java +++ b/backend-spring/src/main/java/com/erp/service/ScreenManagementService.java @@ -49,8 +49,8 @@ public class ScreenManagementService extends BaseService { params.put("exclude_pop", "true".equalsIgnoreCase(epRaw.toString())); } - List> data = sqlSession.selectList(NS + "select_screen_list", params); - int total = sqlSession.selectOne(NS + "count_screen_list", params); + List> data = sqlSession.selectList(NS + "selectScreenList", params); + int total = sqlSession.selectOne(NS + "countScreenList", params); // 테이블 레이블 병합 enrichWithTableLabels(data); @@ -68,7 +68,7 @@ public class ScreenManagementService extends BaseService { public Map getScreenById(Integer screenId) { Map params = new HashMap<>(); params.put("screen_id", screenId); - return sqlSession.selectOne(NS + "select_screen_by_id", params); + return sqlSession.selectOne(NS + "selectScreenById", params); } /** 화면에 할당된 메뉴 조회 */ @@ -76,38 +76,38 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_id", screenId); params.put("company_code", companyCode); - return sqlSession.selectOne(NS + "select_menu_by_screen", params); + return sqlSession.selectOne(NS + "selectMenuByScreen", params); } /** 화면 생성 */ @Transactional public Map createScreen(Map body, String companyCode, String userId) { // 화면 코드 중복 체크 - String screenCode = (String) body.get("screen_code"); + String screenCode = (String) bp(body, "screen_code", "screenCode"); if (screenCode != null) { Map ckParams = new HashMap<>(); ckParams.put("screen_code", screenCode); - int cnt = sqlSession.selectOne(NS + "check_screen_code_exists", ckParams); + int cnt = sqlSession.selectOne(NS + "checkScreenCodeExists", ckParams); if (cnt > 0) { throw new IllegalStateException("DUPLICATE_SCREEN_CODE"); } } Map params = new HashMap<>(); - params.put("screen_name", body.get("screen_name")); + params.put("screen_name", bp(body, "screen_name", "screenName")); params.put("screen_code", screenCode); - params.put("table_name", body.get("table_name")); + params.put("table_name", bp(body, "table_name", "tableName")); params.put("company_code", companyCode); params.put("description", body.get("description")); params.put("created_by", userId); - params.put("db_source_type", body.get("db_source_type")); - params.put("db_connection_id", body.get("db_connection_id")); - params.put("data_source_type", body.get("data_source_type")); - params.put("rest_api_connection_id", body.get("rest_api_connection_id")); - params.put("rest_api_endpoint", body.get("rest_api_endpoint")); - params.put("rest_api_json_path", body.get("rest_api_json_path")); + params.put("db_source_type", bp(body, "db_source_type", "dbSourceType")); + params.put("db_connection_id", bp(body, "db_connection_id", "dbConnectionId")); + params.put("data_source_type", bp(body, "data_source_type", "dataSourceType")); + params.put("rest_api_connection_id", bp(body, "rest_api_connection_id", "restApiConnectionId")); + params.put("rest_api_endpoint", bp(body, "rest_api_endpoint", "restApiEndpoint")); + params.put("rest_api_json_path", bp(body, "rest_api_json_path", "restApiJsonPath")); - return sqlSession.selectOne(NS + "insert_screen", params); + return sqlSession.selectOne(NS + "insertScreen", params); } /** 화면 수정 */ @@ -121,7 +121,7 @@ public class ScreenManagementService extends BaseService { params.put("is_active", body.getOrDefault("is_active", "Y")); params.put("updated_by", userId); - int updated = sqlSession.update(NS + "update_screen", params); + int updated = sqlSession.update(NS + "updateScreen", params); if (updated == 0) return null; return getScreenById(screenId); } @@ -143,7 +143,7 @@ public class ScreenManagementService extends BaseService { params.put("rest_api_endpoint", body.get("rest_api_endpoint")); params.put("rest_api_json_path", body.get("rest_api_json_path")); - int updated = sqlSession.update(NS + "update_screen_info", params); + int updated = sqlSession.update(NS + "updateScreenInfo", params); if (updated == 0) return null; return getScreenById(screenId); } @@ -154,7 +154,7 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_id", screenId); params.put("table_name", tableName); - int updated = sqlSession.update(NS + "update_screen_table_name", params); + int updated = sqlSession.update(NS + "updateScreenTableName", params); if (updated == 0) return null; return getScreenById(screenId); } @@ -165,8 +165,8 @@ public class ScreenManagementService extends BaseService { params.put("screen_id", screenId); params.put("company_code", companyCode); - List> menuDeps = sqlSession.selectList(NS + "select_menu_assignment_deps", params); - List> layoutDeps = sqlSession.selectList(NS + "select_screens_with_layouts", params); + List> menuDeps = sqlSession.selectList(NS + "selectMenuAssignmentDeps", params); + List> layoutDeps = sqlSession.selectList(NS + "selectScreensWithLayouts", params); // 이 화면을 모달로 사용하는 레이아웃 탐색 List> linkedScreens = detectLinkedScreensInternal(screenId, companyCode); @@ -205,15 +205,15 @@ public class ScreenManagementService extends BaseService { usageParams.put("screen_id", screenId); usageParams.put("company_code", companyCode); usageParams.put("flow_id", flowId); - int usageCount = sqlSession.selectOne(NS + "count_flow_usage_in_other_screens", usageParams); + int usageCount = sqlSession.selectOne(NS + "countFlowUsageInOtherScreens", usageParams); if (usageCount == 0) { Map fp = new HashMap<>(); fp.put("flow_id", flowId); fp.put("company_code", companyCode); - sqlSession.delete(NS + "delete_flow_step_connections", fp); - sqlSession.delete(NS + "delete_flow_steps", fp); - sqlSession.delete(NS + "delete_flow_definition", fp); - sqlSession.delete(NS + "delete_node_flows_by_flow_id", fp); + sqlSession.delete(NS + "deleteFlowStepConnections", fp); + sqlSession.delete(NS + "deleteFlowSteps", fp); + sqlSession.delete(NS + "deleteFlowDefinition", fp); + sqlSession.delete(NS + "deleteNodeFlowsByFlowId", fp); log.info("화면 삭제 시 플로우 삭제: screenId={}, flowId={}", screenId, flowId); } } @@ -223,9 +223,9 @@ public class ScreenManagementService extends BaseService { params.put("screen_id", screenId); params.put("deleted_by", userId); params.put("delete_reason", deleteReason); - sqlSession.update(NS + "soft_delete_screen", params); - sqlSession.update(NS + "deactivate_menu_assignments_by_screen", params); - sqlSession.delete(NS + "delete_screen_group_links", params); + sqlSession.update(NS + "softDeleteScreen", params); + sqlSession.update(NS + "deactivateMenuAssignmentsByScreen", params); + sqlSession.delete(NS + "deleteScreenGroupLinks", params); } /** 화면 일괄 소프트 삭제 */ @@ -241,7 +241,7 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_name", screenName); params.put("company_code", companyCode); - int cnt = sqlSession.selectOne(NS + "check_duplicate_screen_name", params); + int cnt = sqlSession.selectOne(NS + "checkDuplicateScreenName", params); return cnt > 0; } @@ -256,9 +256,9 @@ public class ScreenManagementService extends BaseService { params.put("size", size); params.put("offset", (page - 1) * size); - List> data = sqlSession.selectList(NS + "select_deleted_screen_list", params); - int total = sqlSession.selectOne(NS + "count_deleted_screen_list", params); - data = commonService.toCamelCaseKeysList(data); + List> data = sqlSession.selectList(NS + "selectDeletedScreenList", params); + int total = sqlSession.selectOne(NS + "countDeletedScreenList", params); + // snake_case 통일: camelCase 변환 제거 Map result = new LinkedHashMap<>(); result.put("data", data); @@ -281,7 +281,7 @@ public class ScreenManagementService extends BaseService { Map ckParams = new HashMap<>(); ckParams.put("screen_code", screenCode); ckParams.put("screen_id", screenId); - int cnt = sqlSession.selectOne(NS + "check_screen_code_for_restore", ckParams); + int cnt = sqlSession.selectOne(NS + "checkScreenCodeForRestore", ckParams); if (cnt > 0) { throw new IllegalStateException("SCREEN_CODE_CONFLICT"); } @@ -290,8 +290,8 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_id", screenId); params.put("restored_by", userId); - sqlSession.update(NS + "restore_screen", params); - sqlSession.update(NS + "reactivate_menu_assignments_by_screen", params); + sqlSession.update(NS + "restoreScreen", params); + sqlSession.update(NS + "reactivateMenuAssignmentsByScreen", params); return getScreenById(screenId); } @@ -301,8 +301,8 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_id", screenId); sqlSession.delete(NS + "permanentDeleteLayoutV1", params); - sqlSession.delete(NS + "permanent_delete_menu_assignments_by_screen", params); - sqlSession.delete(NS + "permanent_delete_screen", params); + sqlSession.delete(NS + "permanentDeleteMenuAssignmentsByScreen", params); + sqlSession.delete(NS + "permanentDeleteScreen", params); } /** 영구 삭제 (일괄) */ @@ -324,7 +324,7 @@ public class ScreenManagementService extends BaseService { int lockId = companyCode.chars().sum(); Map lockParams = new HashMap<>(); lockParams.put("lock_id", (long) lockId); - sqlSession.selectOne(NS + "pg_advisory_xact_lock", lockParams); + sqlSession.selectOne(NS + "pgAdvisoryXactLock", lockParams); return calcNextScreenCode(companyCode); } @@ -335,11 +335,11 @@ public class ScreenManagementService extends BaseService { int lockId = companyCode.chars().sum(); Map lockParams = new HashMap<>(); lockParams.put("lock_id", (long) lockId); - sqlSession.selectOne(NS + "pg_advisory_xact_lock", lockParams); + sqlSession.selectOne(NS + "pgAdvisoryXactLock", lockParams); Map params = new HashMap<>(); params.put("pattern", companyCode + "_%"); - List> existing = sqlSession.selectList(NS + "select_screen_codes_by_pattern", params); + List> existing = sqlSession.selectList(NS + "selectScreenCodesByPattern", params); Pattern numPattern = Pattern.compile("^" + Pattern.quote(companyCode) + "_(\\d+)$"); int maxNumber = existing.stream() @@ -366,7 +366,7 @@ public class ScreenManagementService extends BaseService { @Transactional public Map copyScreen(Integer screenId, String newName, String companyCode, String userId) { - Map original = sqlSession.selectOne(NS + "select_screen_for_copy", Map.of("screen_id", screenId)); + Map original = sqlSession.selectOne(NS + "selectScreenForCopy", Map.of("screen_id", screenId)); if (original == null) throw new IllegalArgumentException("복사할 화면을 찾을 수 없습니다."); String newCode = generateScreenCode(companyCode); @@ -385,7 +385,7 @@ public class ScreenManagementService extends BaseService { insertParams.put("rest_api_endpoint", original.get("rest_api_endpoint")); insertParams.put("rest_api_json_path", original.get("rest_api_json_path")); - Map newScreen = sqlSession.selectOne(NS + "insert_screen_copy", insertParams); + Map newScreen = sqlSession.selectOne(NS + "insertScreenCopy", insertParams); Integer newScreenId = toInteger(newScreen.get("screen_id")); // Layout V1 복사 @@ -449,13 +449,13 @@ public class ScreenManagementService extends BaseService { // ═══════════════════════════════════════════════════════════ public List> getTables() { - return sqlSession.selectList(NS + "select_public_tables", new HashMap<>()); + return sqlSession.selectList(NS + "selectPublicTables", new HashMap<>()); } public Map getTableInfo(String tableName) { Map params = new HashMap<>(); params.put("table_name", tableName); - return sqlSession.selectOne(NS + "select_table_info_by_name", params); + return sqlSession.selectOne(NS + "selectTableInfoByName", params); } public Map getTableColumns(String tableName, String companyCode) { @@ -463,8 +463,8 @@ public class ScreenManagementService extends BaseService { params.put("table_name", tableName); params.put("company_code", companyCode); - List> columns = sqlSession.selectList(NS + "select_table_columns_info", params); - List> typeColumns = sqlSession.selectList(NS + "select_table_type_columns_info", params); + List> columns = sqlSession.selectList(NS + "selectTableColumnsInfo", params); + List> typeColumns = sqlSession.selectList(NS + "selectTableTypeColumnsInfo", params); Map result = new LinkedHashMap<>(); result.put("columns", columns); @@ -704,7 +704,7 @@ public class ScreenManagementService extends BaseService { Map tp = new HashMap<>(); tp.put("screen_id", screenId); tp.put("table_name", tableName); - sqlSession.update(NS + "update_screen_main_table", tp); + sqlSession.update(NS + "updateScreenMainTable", tp); } } @@ -716,7 +716,7 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_id", screenId); params.put("company_code", companyCode); - return sqlSession.selectOne(NS + "select_layout_pop", params); + return sqlSession.selectOne(NS + "selectLayoutPop", params); } @Transactional @@ -728,7 +728,7 @@ public class ScreenManagementService extends BaseService { params.put("company_code", companyCode); params.put("layout_data", layoutData); params.put("user_id", userId); - sqlSession.insert(NS + "upsert_layout_pop", params); + sqlSession.insert(NS + "upsertLayoutPop", params); } @Transactional @@ -736,13 +736,13 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_id", screenId); params.put("company_code", companyCode); - sqlSession.delete(NS + "delete_layout_pop_by_screen", params); + sqlSession.delete(NS + "deleteLayoutPopByScreen", params); } public List> getScreenIdsWithPopLayout(String companyCode) { Map params = new HashMap<>(); params.put("company_code", companyCode); - return sqlSession.selectList(NS + "select_screen_ids_with_pop_layout", params); + return sqlSession.selectList(NS + "selectScreenIdsWithPopLayout", params); } // ═══════════════════════════════════════════════════════════ @@ -753,7 +753,7 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_id", screenId); params.put("company_code", companyCode); - return sqlSession.selectList(NS + "select_layers_by_screen", params); + return sqlSession.selectList(NS + "selectLayersByScreen", params); } public Map getLayerLayout(Integer screenId, Integer layerId, String companyCode) { @@ -761,7 +761,7 @@ public class ScreenManagementService extends BaseService { params.put("screen_id", screenId); params.put("layer_id", layerId); params.put("company_code", companyCode); - return sqlSession.selectOne(NS + "select_layer_layout", params); + return sqlSession.selectOne(NS + "selectLayerLayout", params); } @Transactional @@ -770,7 +770,7 @@ public class ScreenManagementService extends BaseService { params.put("screen_id", screenId); params.put("layer_id", layerId); params.put("company_code", companyCode); - return sqlSession.delete(NS + "delete_layer_by_id", params) > 0; + return sqlSession.delete(NS + "deleteLayerById", params) > 0; } @Transactional @@ -782,7 +782,7 @@ public class ScreenManagementService extends BaseService { params.put("company_code", companyCode); params.put("condition_config", toJsonString(body.get("condition_config"))); if (body.containsKey("layer_name")) params.put("layer_name", body.get("layer_name")); - sqlSession.update(NS + "update_layer_condition", params); + sqlSession.update(NS + "updateLayerCondition", params); } // ═══════════════════════════════════════════════════════════ @@ -793,7 +793,7 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_id", screenId); params.put("company_code", companyCode); - return sqlSession.selectList(NS + "select_zones_by_screen", params); + return sqlSession.selectList(NS + "selectZonesByScreen", params); } @Transactional @@ -809,7 +809,7 @@ public class ScreenManagementService extends BaseService { params.put("trigger_component_id", body.get("trigger_component_id")); params.put("trigger_operator", body.get("trigger_operator")); - Map zone = sqlSession.selectOne(NS + "insert_zone", params); + Map zone = sqlSession.selectOne(NS + "insertZone", params); // 새 레이어 생성 (zone에 연결) Integer newLayerId = calcNextLayerId(screenId, companyCode); @@ -820,7 +820,7 @@ public class ScreenManagementService extends BaseService { layerParams.put("layer_name", body.getOrDefault("zone_name", "새 레이어")); layerParams.put("layout_data", "{\"components\":[]}"); layerParams.put("condition_config", "{}"); - sqlSession.insert(NS + "insert_layer_for_zone", layerParams); + sqlSession.insert(NS + "insertLayerForZone", layerParams); Map result = new LinkedHashMap<>(); result.put("zone", zone); @@ -833,7 +833,7 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(body); params.put("zone_id", zoneId); params.put("company_code", companyCode); - return sqlSession.update(NS + "update_zone", params) > 0; + return sqlSession.update(NS + "updateZone", params) > 0; } @Transactional @@ -842,12 +842,12 @@ public class ScreenManagementService extends BaseService { Map clearParams = new HashMap<>(); clearParams.put("zone_id_str", String.valueOf(zoneId)); clearParams.put("company_code", companyCode); - sqlSession.update(NS + "clear_zone_condition_configs", clearParams); + sqlSession.update(NS + "clearZoneConditionConfigs", clearParams); Map params = new HashMap<>(); params.put("zone_id", zoneId); params.put("company_code", companyCode); - return sqlSession.delete(NS + "delete_zone_by_id", params) > 0; + return sqlSession.delete(NS + "deleteZoneById", params) > 0; } @Transactional @@ -861,7 +861,7 @@ public class ScreenManagementService extends BaseService { params.put("layer_name", body.getOrDefault("layer_name", "새 레이어")); params.put("layout_data", "{\"components\":[]}"); params.put("condition_config", toJsonString(body.getOrDefault("condition_config", new HashMap<>()))); - sqlSession.insert(NS + "insert_layer_for_zone", params); + sqlSession.insert(NS + "insertLayerForZone", params); Map result = new LinkedHashMap<>(); result.put("layer_id", newLayerId); @@ -876,14 +876,14 @@ public class ScreenManagementService extends BaseService { @Transactional public Map assignScreenToMenu(Integer screenId, Map body, String companyCode, String userId) { - Integer menuObjid = toInteger(body.get("menu_objid")); + String menuObjid = String.valueOf(body.get("menu_objid")); // 기존 할당 체크 Map ckParams = new HashMap<>(); ckParams.put("screen_id", screenId); ckParams.put("menu_objid", menuObjid); ckParams.put("company_code", companyCode); - Map existing = sqlSession.selectOne(NS + "check_menu_assignment_exists", ckParams); + Map existing = sqlSession.selectOne(NS + "checkMenuAssignmentExists", ckParams); if (existing != null) throw new IllegalStateException("ALREADY_ASSIGNED"); Map params = new HashMap<>(); @@ -892,13 +892,13 @@ public class ScreenManagementService extends BaseService { params.put("company_code", companyCode); params.put("display_order", body.getOrDefault("display_order", 0)); params.put("created_by", userId); - sqlSession.insert(NS + "insert_menu_assignment", params); + sqlSession.insert(NS + "insertMenuAssignment", params); // screen_code 조회 → menu_info 업데이트 - Map screenCodeRow = sqlSession.selectOne(NS + "select_screen_code", Map.of("screen_id", screenId)); + Map screenCodeRow = sqlSession.selectOne(NS + "selectScreenCode", Map.of("screen_id", screenId)); String screenCode = screenCodeRow != null ? (String) screenCodeRow.get("screen_code") : null; - Map menuTypeRow = sqlSession.selectOne(NS + "select_menu_type", Map.of("menu_objid", menuObjid)); + Map menuTypeRow = sqlSession.selectOne(NS + "selectMenuType", Map.of("menu_objid", menuObjid)); String menuType = menuTypeRow != null ? (String) menuTypeRow.get("menu_type") : null; if (screenCode != null) { @@ -907,7 +907,7 @@ public class ScreenManagementService extends BaseService { updateParams.put("menu_objid", menuObjid); updateParams.put("menu_url", menuUrl); updateParams.put("screen_code", screenCode); - sqlSession.update(NS + "update_menu_info_assign", updateParams); + sqlSession.update(NS + "updateMenuInfoAssign", updateParams); } Map result = new LinkedHashMap<>(); @@ -918,26 +918,26 @@ public class ScreenManagementService extends BaseService { return result; } - public List> getScreensByMenu(Integer menuObjid, String companyCode) { + public List> getScreensByMenu(String menuObjid, String companyCode) { Map params = new HashMap<>(); params.put("menu_objid", menuObjid); params.put("company_code", companyCode); - return sqlSession.selectList(NS + "select_screens_by_menu", params); + return sqlSession.selectList(NS + "selectScreensByMenu", params); } @Transactional - public void unassignScreenFromMenu(Integer screenId, Integer menuObjid, String companyCode) { + public void unassignScreenFromMenu(Integer screenId, String menuObjid, String companyCode) { Map params = new HashMap<>(); params.put("screen_id", screenId); params.put("menu_objid", menuObjid); params.put("company_code", companyCode); - sqlSession.delete(NS + "delete_menu_assignment", params); - sqlSession.update(NS + "update_menu_info_unassign", Map.of("menu_objid", menuObjid)); + sqlSession.delete(NS + "deleteMenuAssignment", params); + sqlSession.update(NS + "updateMenuInfoUnassign", Map.of("menu_objid", menuObjid)); } @Transactional public int cleanupDeletedMenuAssignments() { - return sqlSession.update(NS + "cleanup_deleted_menu_assignments", new HashMap<>()); + return sqlSession.update(NS + "cleanupDeletedMenuAssignments", new HashMap<>()); } // ═══════════════════════════════════════════════════════════ @@ -977,7 +977,7 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_ids", screenIds); params.put("source_company_code", sourceCompanyCode); - List> assignments = sqlSession.selectList(NS + "select_menu_assignments_for_copy", params); + List> assignments = sqlSession.selectList(NS + "selectMenuAssignmentsForCopy", params); int count = 0; for (Map a : assignments) { @@ -987,7 +987,7 @@ public class ScreenManagementService extends BaseService { ip.put("company_code", targetCompanyCode); ip.put("display_order", a.get("display_order")); ip.put("created_by", userId); - sqlSession.insert(NS + "insert_menu_assignment_copy", ip); + sqlSession.insert(NS + "insertMenuAssignmentCopy", ip); count++; } return count; @@ -1002,21 +1002,21 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("source_company_code", sourceCompanyCode); - List> categories = sqlSession.selectList(NS + "select_code_category_for_copy", params); + List> categories = sqlSession.selectList(NS + "selectCodeCategoryForCopy", params); int count = 0; for (Map cat : categories) { Map cp = new HashMap<>(cat); cp.put("target_company_code", targetCompanyCode); - sqlSession.insert(NS + "upsert_code_category", cp); + sqlSession.insert(NS + "upsertCodeCategory", cp); Map codeParams = new HashMap<>(); codeParams.put("source_company_code", sourceCompanyCode); codeParams.put("code_category", cat.get("category_code")); - List> codes = sqlSession.selectList(NS + "select_code_info_for_copy", codeParams); + List> codes = sqlSession.selectList(NS + "selectCodeInfoForCopy", codeParams); for (Map code : codes) { Map cop = new HashMap<>(code); cop.put("target_company_code", targetCompanyCode); - sqlSession.insert(NS + "upsert_code_info", cop); + sqlSession.insert(NS + "upsertCodeInfo", cop); count++; } } @@ -1031,18 +1031,18 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("source_company_code", sourceCompanyCode); - List> trees = sqlSession.selectList(NS + "select_category_tree_for_copy", params); + List> trees = sqlSession.selectList(NS + "selectCategoryTreeForCopy", params); for (Map t : trees) { Map tp = new HashMap<>(t); tp.put("target_company_code", targetCompanyCode); - sqlSession.insert(NS + "upsert_category_tree", tp); + sqlSession.insert(NS + "upsertCategoryTree", tp); } - List> values = sqlSession.selectList(NS + "select_category_value_for_copy", params); + List> values = sqlSession.selectList(NS + "selectCategoryValueForCopy", params); for (Map v : values) { Map vp = new HashMap<>(v); vp.put("target_company_code", targetCompanyCode); - sqlSession.insert(NS + "upsert_category_value", vp); + sqlSession.insert(NS + "upsertCategoryValue", vp); } return trees.size() + values.size(); } @@ -1055,11 +1055,11 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("source_company_code", sourceCompanyCode); - List> cols = sqlSession.selectList(NS + "select_table_type_columns_for_copy", params); + List> cols = sqlSession.selectList(NS + "selectTableTypeColumnsForCopy", params); for (Map col : cols) { Map cp = new HashMap<>(col); cp.put("target_company_code", targetCompanyCode); - sqlSession.insert(NS + "upsert_table_type_column", cp); + sqlSession.insert(NS + "upsertTableTypeColumn", cp); } return cols.size(); } @@ -1072,11 +1072,11 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("source_company_code", sourceCompanyCode); - List> rels = sqlSession.selectList(NS + "select_cascading_relation_for_copy", params); + List> rels = sqlSession.selectList(NS + "selectCascadingRelationForCopy", params); for (Map rel : rels) { Map rp = new HashMap<>(rel); rp.put("target_company_code", targetCompanyCode); - sqlSession.insert(NS + "upsert_cascading_relation", rp); + sqlSession.insert(NS + "upsertCascadingRelation", rp); } return rels.size(); } @@ -1089,7 +1089,7 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_id", screenId); params.put("company_code", companyCode); - Map popLayout = sqlSession.selectOne(NS + "select_layout_pop", params); + Map popLayout = sqlSession.selectOne(NS + "selectLayoutPop", params); List linkedScreenIds = new ArrayList<>(); if (popLayout != null) { @@ -1101,7 +1101,7 @@ public class ScreenManagementService extends BaseService { if (!linkedScreenIds.isEmpty()) { Map idsParams = new HashMap<>(); idsParams.put("ids", linkedScreenIds); - linkedScreens = sqlSession.selectList(NS + "select_screens_by_ids", idsParams); + linkedScreens = sqlSession.selectList(NS + "selectScreensByIds", idsParams); } Map result = new LinkedHashMap<>(); @@ -1125,7 +1125,7 @@ public class ScreenManagementService extends BaseService { Map existsParams = new HashMap<>(); existsParams.put("screen_code", screenCode); existsParams.put("company_code", targetCompanyCode); - Map existing = sqlSession.selectOne(NS + "select_screen_by_code", existsParams); + Map existing = sqlSession.selectOne(NS + "selectScreenByCode", existsParams); Integer targetScreenId; if (existing == null) { @@ -1139,7 +1139,7 @@ public class ScreenManagementService extends BaseService { insertParams.put("created_by", userId); insertParams.put("db_source_type", screenDef.get("db_source_type")); insertParams.put("data_source_type", screenDef.get("data_source_type")); - Map created = sqlSession.selectOne(NS + "insert_screen_for_deploy", insertParams); + Map created = sqlSession.selectOne(NS + "insertScreenForDeploy", insertParams); targetScreenId = toInteger(created.get("screen_id")); } else { targetScreenId = toInteger(existing.get("screen_id")); @@ -1149,7 +1149,7 @@ public class ScreenManagementService extends BaseService { Map sourceParams = new HashMap<>(); sourceParams.put("screen_id", toInteger(screenDef.get("screen_id"))); sourceParams.put("company_code", sourceCompanyCode); - Map sourceLayout = sqlSession.selectOne(NS + "select_layout_pop", sourceParams); + Map sourceLayout = sqlSession.selectOne(NS + "selectLayoutPop", sourceParams); if (sourceLayout != null) { Map deployParams = new HashMap<>(); @@ -1157,7 +1157,7 @@ public class ScreenManagementService extends BaseService { deployParams.put("company_code", targetCompanyCode); deployParams.put("layout_data", toJsonString(sourceLayout.get("layout_data"))); deployParams.put("user_id", userId); - sqlSession.insert(NS + "upsert_pop_layout_deploy", deployParams); + sqlSession.insert(NS + "upsertPopLayoutDeploy", deployParams); } Map result = new LinkedHashMap<>(); @@ -1181,7 +1181,7 @@ public class ScreenManagementService extends BaseService { private List> detectLinkedScreensInternal(Integer screenId, String companyCode) { Map params = new HashMap<>(); params.put("screen_id", screenId); - List> layouts = sqlSession.selectList(NS + "select_layouts_for_linked_modal", params); + List> layouts = sqlSession.selectList(NS + "selectLayoutsForLinkedModal", params); Set linkedIds = new LinkedHashSet<>(); for (Map layout : layouts) { @@ -1198,7 +1198,7 @@ public class ScreenManagementService extends BaseService { Map idsParams = new HashMap<>(); idsParams.put("ids", new ArrayList<>(linkedIds)); - return sqlSession.selectList(NS + "select_screens_by_ids", idsParams); + return sqlSession.selectList(NS + "selectScreensByIds", idsParams); } /** JSON 노드 트리를 재귀 탐색하여 screenId 참조 수집 */ @@ -1353,7 +1353,7 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("table_names", new ArrayList<>(tableNames)); try { - List> labels = sqlSession.selectList(NS + "select_table_labels_by_names", params); + List> labels = sqlSession.selectList(NS + "selectTableLabelsByNames", params); Map labelMap = new HashMap<>(); for (Map row : labels) { labelMap.put((String) row.get("table_name"), (String) row.get("table_label")); @@ -1369,7 +1369,7 @@ public class ScreenManagementService extends BaseService { private String calcNextScreenCode(String companyCode) { Map params = new HashMap<>(); params.put("pattern", companyCode + "_%"); - List> existing = sqlSession.selectList(NS + "select_screen_codes_by_pattern", params); + List> existing = sqlSession.selectList(NS + "selectScreenCodesByPattern", params); Pattern numPattern = Pattern.compile("^" + Pattern.quote(companyCode) + "_(\\d+)$"); int maxNumber = existing.stream() @@ -1389,7 +1389,7 @@ public class ScreenManagementService extends BaseService { Map params = new HashMap<>(); params.put("screen_id", screenId); params.put("company_code", companyCode); - Map row = sqlSession.selectOne(NS + "select_max_layer_id", params); + Map row = sqlSession.selectOne(NS + "selectMaxLayerId", params); int maxId = row != null ? toInt(row.getOrDefault("max_id", 1), 1) : 1; return maxId + 1; } @@ -1416,4 +1416,10 @@ public class ScreenManagementService extends BaseService { try { return Integer.parseInt(val.toString()); } catch (NumberFormatException e) { return null; } } + + /** snake_case 우선, camelCase fallback으로 request body 파라미터 추출 */ + private Object bp(Map body, String snakeKey, String camelKey) { + Object val = body.get(snakeKey); + return val != null ? val : body.get(camelKey); + } } diff --git a/backend-spring/src/main/java/com/erp/service/TableCategoryValueService.java b/backend-spring/src/main/java/com/erp/service/TableCategoryValueService.java index 57ec87ff..d5d0dc99 100644 --- a/backend-spring/src/main/java/com/erp/service/TableCategoryValueService.java +++ b/backend-spring/src/main/java/com/erp/service/TableCategoryValueService.java @@ -21,12 +21,12 @@ public class TableCategoryValueService extends BaseService { public List> getCategoryColumns(Map params) { log.info("카테고리 컬럼 목록 조회: tableName={}, companyCode={}", params.get("table_name"), params.get("company_code")); - return sqlSession.selectList(NS + "get_category_column_list", params); + return sqlSession.selectList(NS + "getCategoryColumnList", params); } public List> getAllCategoryColumns(Map params) { log.info("전체 카테고리 컬럼 목록 조회: companyCode={}", params.get("company_code")); - return sqlSession.selectList(NS + "get_all_category_column_list", params); + return sqlSession.selectList(NS + "getAllCategoryColumnList", params); } // ══════════════════════════════════════════════════════════════ @@ -37,7 +37,7 @@ public class TableCategoryValueService extends BaseService { log.info("카테고리 값 목록 조회: tableName={}, columnName={}, companyCode={}", params.get("table_name"), params.get("column_name"), params.get("company_code")); - List> flatList = sqlSession.selectList(NS + "get_category_value_list", params); + List> flatList = sqlSession.selectList(NS + "getCategoryValueList", params); List> hierarchy = buildHierarchy(flatList, null); log.info("카테고리 값 {}개 조회 완료 (평면)", flatList.size()); @@ -59,12 +59,12 @@ public class TableCategoryValueService extends BaseService { log.info("카테고리 값 추가: tableName={}, columnName={}, valueCode={}, companyCode={}", tableName, columnName, valueCode, companyCode); - Integer codeDup = sqlSession.selectOne(NS + "count_duplicate_code", params); + Integer codeDup = sqlSession.selectOne(NS + "countDuplicateCode", params); if (codeDup != null && codeDup > 0) { throw new IllegalArgumentException("이미 존재하는 코드입니다"); } - Integer labelDup = sqlSession.selectOne(NS + "count_duplicate_label", params); + Integer labelDup = sqlSession.selectOne(NS + "countDuplicateLabel", params); if (labelDup != null && labelDup > 0) { throw new IllegalArgumentException( "이미 동일한 이름의 카테고리 값이 존재합니다: \"" + valueLabel + "\""); @@ -75,14 +75,14 @@ public class TableCategoryValueService extends BaseService { if (params.get("is_active") == null) params.put("is_active", true); if (params.get("is_default") == null) params.put("is_default", false); - sqlSession.insert(NS + "insert_category_value", params); + sqlSession.insert(NS + "insertCategoryValue", params); long valueId = toLong(params.get("value_id")); log.info("카테고리 값 추가 완료: valueId={}", valueId); Map fetchP = new HashMap<>(); fetchP.put("value_id", valueId); - return sqlSession.selectOne(NS + "get_category_value_info", fetchP); + return sqlSession.selectOne(NS + "getCategoryValueInfo", fetchP); } @Transactional @@ -93,7 +93,7 @@ public class TableCategoryValueService extends BaseService { log.info("카테고리 값 수정: valueId={}, companyCode={}", valueId, companyCode); if (params.get("value_label") != null) { - Map current = sqlSession.selectOne(NS + "get_category_value_label_info", + Map current = sqlSession.selectOne(NS + "getCategoryValueLabelInfo", Map.of("value_id", valueId)); if (current != null) { Map labelP = new HashMap<>(); @@ -102,7 +102,7 @@ public class TableCategoryValueService extends BaseService { labelP.put("company_code", current.get("company_code")); labelP.put("value_label", params.get("value_label")); labelP.put("value_id", valueId); - Integer dup = sqlSession.selectOne(NS + "count_duplicate_label_exclude_self", labelP); + Integer dup = sqlSession.selectOne(NS + "countDuplicateLabelExcludeSelf", labelP); if (dup != null && dup > 0) { throw new IllegalArgumentException( "이미 동일한 이름의 카테고리 값이 존재합니다: \"" @@ -112,15 +112,15 @@ public class TableCategoryValueService extends BaseService { } params.put("value_id", valueId); - Integer rows = sqlSession.selectOne(NS + "update_category_value", params); + Integer rows = sqlSession.selectOne(NS + "updateCategoryValue", params); if (rows == null || rows == 0) { // update returns affected rows via selectOne workaround; use update method instead - sqlSession.update(NS + "update_category_value", params); + sqlSession.update(NS + "updateCategoryValue", params); } Map fetchP = new HashMap<>(); fetchP.put("value_id", valueId); - return sqlSession.selectOne(NS + "get_category_value_info", fetchP); + return sqlSession.selectOne(NS + "getCategoryValueInfo", fetchP); } // ══════════════════════════════════════════════════════════════ @@ -134,7 +134,7 @@ public class TableCategoryValueService extends BaseService { log.info("카테고리 값 삭제: valueId={}, companyCode={}", valueId, companyCode); - List> childRows = sqlSession.selectList(NS + "get_child_value_id_list", params); + List> childRows = sqlSession.selectList(NS + "getChildValueIdList", params); List allIds = new ArrayList<>(); allIds.add(valueId); childRows.forEach(r -> allIds.add(toLong(r.get("value_id")))); @@ -151,7 +151,7 @@ public class TableCategoryValueService extends BaseService { Map delP = new HashMap<>(); delP.put("value_id", id); delP.put("company_code", companyCode); - sqlSession.delete(NS + "delete_value_by_id", delP); + sqlSession.delete(NS + "deleteValueById", delP); } log.info("카테고리 값 삭제 완료: totalDeleted={}", allIds.size()); @@ -161,7 +161,7 @@ public class TableCategoryValueService extends BaseService { public void bulkDeleteCategoryValues(Map params) { log.info("카테고리 값 일괄 삭제: count={}, companyCode={}", ((List) params.get("value_ids")).size(), params.get("company_code")); - sqlSession.update(NS + "bulk_soft_delete_values", params); + sqlSession.update(NS + "bulkSoftDeleteValues", params); } @Transactional @@ -176,7 +176,7 @@ public class TableCategoryValueService extends BaseService { p.put("value_id", toLong(rawIds.get(i))); p.put("value_order", i + 1); p.put("company_code", companyCode); - sqlSession.update(NS + "update_value_order", p); + sqlSession.update(NS + "updateValueOrder", p); } } @@ -188,7 +188,7 @@ public class TableCategoryValueService extends BaseService { log.info("컬럼 매핑 조회: tableName={}, menuObjid={}, companyCode={}", params.get("table_name"), params.get("menu_objid"), params.get("company_code")); - List> rows = sqlSession.selectList(NS + "get_column_mapping_list", params); + List> rows = sqlSession.selectList(NS + "getColumnMappingList", params); Map mapping = new LinkedHashMap<>(); for (Map row : rows) { @@ -208,14 +208,14 @@ public class TableCategoryValueService extends BaseService { log.info("컬럼 매핑 생성: tableName={}, logical={}, physical={}, companyCode={}", tableName, logicalColumnName, physicalColumnName, params.get("company_code")); - Integer colExists = sqlSession.selectOne(NS + "check_physical_column_exists", params); + Integer colExists = sqlSession.selectOne(NS + "checkPhysicalColumnExists", params); if (colExists == null || colExists == 0) { throw new IllegalArgumentException( "테이블 " + tableName + "에 컬럼 " + physicalColumnName + "이(가) 존재하지 않습니다"); } - sqlSession.insert(NS + "upsert_column_mapping", params); - Map result = sqlSession.selectOne(NS + "get_column_mapping_info", params); + sqlSession.insert(NS + "upsertColumnMapping", params); + Map result = sqlSession.selectOne(NS + "getColumnMappingInfo", params); log.info("컬럼 매핑 생성 완료: mappingId={}", result != null ? result.get("mapping_id") : "?"); return result; @@ -224,12 +224,12 @@ public class TableCategoryValueService extends BaseService { public List> getLogicalColumns(Map params) { log.info("논리적 컬럼 목록 조회: tableName={}, menuObjid={}, companyCode={}", params.get("table_name"), params.get("menu_objid"), params.get("company_code")); - return sqlSession.selectList(NS + "get_logical_column_list", params); + return sqlSession.selectList(NS + "getLogicalColumnList", params); } @Transactional public void deleteColumnMapping(Map params) { - int deleted = sqlSession.delete(NS + "delete_column_mapping_by_id", params); + int deleted = sqlSession.delete(NS + "deleteColumnMappingById", params); if (deleted == 0) { throw new IllegalArgumentException("컬럼 매핑을 찾을 수 없거나 권한이 없습니다"); } @@ -238,7 +238,7 @@ public class TableCategoryValueService extends BaseService { @Transactional public int deleteColumnMappingsByColumn(Map params) { - int deleted = sqlSession.delete(NS + "delete_column_mappings_by_column", params); + int deleted = sqlSession.delete(NS + "deleteColumnMappingsByColumn", params); log.info("테이블+컬럼 기준 매핑 삭제 완료: tableName={}, columnName={}, deletedCount={}", params.get("table_name"), params.get("column_name"), deleted); return deleted; @@ -257,7 +257,7 @@ public class TableCategoryValueService extends BaseService { log.info("카테고리 코드로 라벨 조회: count={}, companyCode={}", ((List) rawCodes).size(), params.get("company_code")); - List> rows = sqlSession.selectList(NS + "get_label_list_by_codes", params); + List> rows = sqlSession.selectList(NS + "getLabelListByCodes", params); Map labels = new LinkedHashMap<>(); for (Map row : rows) { @@ -277,11 +277,11 @@ public class TableCategoryValueService extends BaseService { public List> getSecondLevelMenus(Map params) { log.info("2레벨 메뉴 목록 조회: companyCode={}", params.get("company_code")); - Integer hasCC = sqlSession.selectOne(NS + "check_menu_info_has_company_code", null); + Integer hasCC = sqlSession.selectOne(NS + "checkMenuInfoHasCompanyCode", null); params.put("has_company_code", hasCC != null && hasCC > 0); log.info("menu_info.company_code 컬럼 존재 여부: {}", hasCC != null && hasCC > 0); - List> menus = sqlSession.selectList(NS + "get_second_level_menu_list", params); + List> menus = sqlSession.selectList(NS + "getSecondLevelMenuList", params); log.info("2레벨 메뉴 {}개 조회 완료", menus.size()); return menus; } @@ -295,7 +295,7 @@ public class TableCategoryValueService extends BaseService { p.put("value_id", valueId); p.put("company_code", companyCode); - Map valueInfo = sqlSession.selectOne(NS + "get_category_value_usage_info", p); + Map valueInfo = sqlSession.selectOne(NS + "getCategoryValueUsageInfo", p); if (valueInfo == null) { throw new IllegalArgumentException("카테고리 값을 찾을 수 없습니다"); } @@ -310,7 +310,7 @@ public class TableCategoryValueService extends BaseService { if (safeTable.isEmpty() || safeColumn.isEmpty()) return; - Integer tableExists = sqlSession.selectOne(NS + "check_table_exists_for_usage", + Integer tableExists = sqlSession.selectOne(NS + "checkTableExistsForUsage", Map.of("table_name", safeTable)); if (tableExists == null || tableExists == 0) return; @@ -319,10 +319,10 @@ public class TableCategoryValueService extends BaseService { countP.put("safe_column_name", safeColumn); countP.put("value_code", valueCode); countP.put("company_code", companyCode); - Integer count = sqlSession.selectOne(NS + "count_value_usage_in_table", countP); + Integer count = sqlSession.selectOne(NS + "countValueUsageInTable", countP); if (count != null && count > 0) { - List> menus = sqlSession.selectList(NS + "get_menu_list_using_table", + List> menus = sqlSession.selectList(NS + "getMenuListUsingTable", Map.of("table_name", tableName, "company_code", companyCode)); StringBuilder msg = new StringBuilder(); diff --git a/backend-spring/src/main/java/com/erp/service/TableHistoryService.java b/backend-spring/src/main/java/com/erp/service/TableHistoryService.java index 189c07df..14b82cdb 100644 --- a/backend-spring/src/main/java/com/erp/service/TableHistoryService.java +++ b/backend-spring/src/main/java/com/erp/service/TableHistoryService.java @@ -20,7 +20,7 @@ public class TableHistoryService extends BaseService { String logTableName = tableName + "_log"; params.put("log_table_name", logTableName); - Map row = sqlSession.selectOne(NS + "check_history_table_exists", params); + Map row = sqlSession.selectOne(NS + "checkHistoryTableExists", params); boolean exists = Boolean.TRUE.equals(row != null ? row.get("exists") : Boolean.FALSE); String message = exists ? "이력 테이블이 존재합니다." : "이력 테이블이 존재하지 않습니다."; @@ -35,7 +35,7 @@ public class TableHistoryService extends BaseService { public List> getTableHistorySummary(Map params) { prepareLogTableName(params); - return withTableNotFound(() -> sqlSession.selectList(NS + "select_table_history_summary", params)); + return withTableNotFound(() -> sqlSession.selectList(NS + "selectTableHistorySummary", params)); } public Map getAllTableHistory(Map params) { @@ -46,8 +46,8 @@ public class TableHistoryService extends BaseService { int limit = (int) params.get("limit"); int offset = (int) params.get("offset"); - List> records = withTableNotFound(() -> sqlSession.selectList(NS + "select_all_table_history", params)); - Integer totalObj = withTableNotFound(() -> sqlSession.selectOne(NS + "count_all_table_history", params)); + List> records = withTableNotFound(() -> sqlSession.selectList(NS + "selectAllTableHistory", params)); + Integer totalObj = withTableNotFound(() -> sqlSession.selectOne(NS + "countAllTableHistory", params)); int total = totalObj != null ? totalObj : 0; return buildPaginatedResult(records, total, limit, offset, (offset + limit) < total); @@ -61,8 +61,8 @@ public class TableHistoryService extends BaseService { int limit = (int) params.get("limit"); int offset = (int) params.get("offset"); - List> records = withTableNotFound(() -> sqlSession.selectList(NS + "select_record_history", params)); - Integer totalObj = withTableNotFound(() -> sqlSession.selectOne(NS + "count_record_history", params)); + List> records = withTableNotFound(() -> sqlSession.selectList(NS + "selectRecordHistory", params)); + Integer totalObj = withTableNotFound(() -> sqlSession.selectOne(NS + "countRecordHistory", params)); int total = totalObj != null ? totalObj : 0; return buildPaginatedResult(records, total, limit, offset, (offset + records.size()) < total); @@ -70,7 +70,7 @@ public class TableHistoryService extends BaseService { public List> getRecordTimeline(Map params) { prepareLogTableName(params); - return withTableNotFound(() -> sqlSession.selectList(NS + "select_record_timeline", params)); + return withTableNotFound(() -> sqlSession.selectList(NS + "selectRecordTimeline", params)); } // ─── Private helpers ─────────────────────────────────────────── diff --git a/backend-spring/src/main/java/com/erp/service/TableManagementService.java b/backend-spring/src/main/java/com/erp/service/TableManagementService.java index 06cf4845..eb8d0d1e 100644 --- a/backend-spring/src/main/java/com/erp/service/TableManagementService.java +++ b/backend-spring/src/main/java/com/erp/service/TableManagementService.java @@ -31,7 +31,7 @@ public class TableManagementService extends BaseService { // ────────────────────────────────────────────────── public List> getTableList() { - List> tables = sqlSession.selectList(NS + "get_table_list"); + List> tables = sqlSession.selectList(NS + "getTableList"); // columnCount Long → Integer 변환 (Node 호환) for (Map t : tables) { Object cnt = t.get("column_count"); @@ -52,15 +52,15 @@ public class TableManagementService extends BaseService { params.put("size", size); params.put("offset", (long) (page - 1) * size); - Integer totalObj = sqlSession.selectOne(NS + "get_column_list_cnt", params); + Integer totalObj = sqlSession.selectOne(NS + "getColumnListCnt", params); int total = totalObj != null ? totalObj : 0; List> columns; if (companyCode != null && !companyCode.isBlank()) { params.put("company_code", companyCode); - columns = sqlSession.selectList(NS + "get_column_list_with_company", params); + columns = sqlSession.selectList(NS + "getColumnListWithCompany", params); } else { - columns = sqlSession.selectList(NS + "get_column_list", params); + columns = sqlSession.selectList(NS + "getColumnList", params); } int totalPages = total == 0 ? 1 : (int) Math.ceil((double) total / size); @@ -80,13 +80,13 @@ public class TableManagementService extends BaseService { public List> getTableSchema(String tableName) { Map params = new HashMap<>(); params.put("table_name", tableName); - return sqlSession.selectList(NS + "get_table_schema_list", params); + return sqlSession.selectList(NS + "getTableSchemaList", params); } public boolean checkTableExists(String tableName) { Map params = new HashMap<>(); params.put("table_name", tableName); - Map result = sqlSession.selectOne(NS + "check_table_exists", params); + Map result = sqlSession.selectOne(NS + "checkTableExists", params); Object exists = result != null ? result.get("exists") : null; return Boolean.TRUE.equals(exists); } @@ -95,7 +95,7 @@ public class TableManagementService extends BaseService { Map params = new HashMap<>(); params.put("table_name", sanitize(tableName)); params.put("column_name", sanitize(columnName)); - Integer cntObj = sqlSession.selectOne(NS + "check_table_has_column", params); + Integer cntObj = sqlSession.selectOne(NS + "checkTableHasColumn", params); return cntObj != null && cntObj > 0; } @@ -106,7 +106,7 @@ public class TableManagementService extends BaseService { public Map getTableLabels(String tableName) { Map params = new HashMap<>(); params.put("table_name", tableName); - return sqlSession.selectOne(NS + "get_table_label_info", params); + return sqlSession.selectOne(NS + "getTableLabelInfo", params); } @Transactional @@ -115,14 +115,14 @@ public class TableManagementService extends BaseService { params.put("table_name", tableName); params.put("display_name", displayName); params.put("description", description != null ? description : ""); - sqlSession.update(NS + "upsert_table_label", params); + sqlSession.update(NS + "upsertTableLabel", params); log.info("테이블 라벨 업데이트: {}", tableName); } private void ensureTableInLabels(String tableName) { Map params = new HashMap<>(); params.put("table_name", tableName); - sqlSession.insert(NS + "insert_table_label_if_not_exists", params); + sqlSession.insert(NS + "insertTableLabelIfNotExists", params); } // ────────────────────────────────────────────────── @@ -133,7 +133,7 @@ public class TableManagementService extends BaseService { Map params = new HashMap<>(); params.put("table_name", tableName); params.put("column_name", columnName); - return sqlSession.selectOne(NS + "get_column_label_info", params); + return sqlSession.selectOne(NS + "getColumnLabelInfo", params); } // ────────────────────────────────────────────────── @@ -161,7 +161,7 @@ public class TableManagementService extends BaseService { params.put("is_visible", settings.getOrDefault("is_visible", true)); params.put("company_code", companyCode); params.put("category_ref", "category".equals(inputType) ? settings.get("category_ref") : null); - sqlSession.update(NS + "upsert_column_settings", params); + sqlSession.update(NS + "upsertColumnSettings", params); // 화면 레이아웃 동기화 syncScreenLayouts(tableName, columnName, inputType, companyCode); @@ -194,7 +194,7 @@ public class TableManagementService extends BaseService { params.put("clear_entity", false); params.put("clear_code", false); params.put("clear_category", false); - sqlSession.update(NS + "upsert_column_input_type", params); + sqlSession.update(NS + "upsertColumnInputType", params); log.info("컬럼 웹타입 설정: {}.{} = {}", tableName, columnName, finalType); } @@ -212,7 +212,7 @@ public class TableManagementService extends BaseService { params.put("clear_entity", !"entity".equals(finalType)); params.put("clear_code", !"code".equals(finalType)); params.put("clear_category", !"category".equals(finalType)); - sqlSession.update(NS + "upsert_column_input_type", params); + sqlSession.update(NS + "upsertColumnInputType", params); syncScreenLayouts(tableName, columnName, finalType, companyCode); log.info("컬럼 입력타입 설정: {}.{} = {}, company={}", tableName, columnName, finalType, companyCode); } @@ -221,7 +221,7 @@ public class TableManagementService extends BaseService { Map params = new HashMap<>(); params.put("table_name", tableName); params.put("company_code", companyCode); - return sqlSession.selectList(NS + "get_column_input_type_list", params); + return sqlSession.selectList(NS + "getColumnInputTypeList", params); } // ────────────────────────────────────────────────── @@ -232,7 +232,7 @@ public class TableManagementService extends BaseService { Map params = new HashMap<>(); params.put("table_name", tableName); - List> pkResult = sqlSession.selectList(NS + "get_table_primary_key_list", params); + List> pkResult = sqlSession.selectList(NS + "getTablePrimaryKeyList", params); Map primaryKey = new HashMap<>(); if (!pkResult.isEmpty()) { Map pk = pkResult.get(0); @@ -243,7 +243,7 @@ public class TableManagementService extends BaseService { primaryKey.put("columns", List.of()); } - List> indexResult = sqlSession.selectList(NS + "get_table_index_list", params); + List> indexResult = sqlSession.selectList(NS + "getTableIndexList", params); List> indexes = indexResult.stream().map(row -> { Map idx = new HashMap<>(); idx.put("name", row.get("index_name")); @@ -264,7 +264,7 @@ public class TableManagementService extends BaseService { // 기존 PK 삭제 Map params = new HashMap<>(); params.put("table_name", safeTable); - List> existingPk = sqlSession.selectList(NS + "get_table_primary_key_list", params); + List> existingPk = sqlSession.selectList(NS + "getTablePrimaryKeyList", params); if (!existingPk.isEmpty()) { String constraintName = (String) existingPk.get(0).get("constraint_name"); jdbcTemplate.execute( @@ -315,7 +315,7 @@ public class TableManagementService extends BaseService { params.put("column_name", columnName); params.put("is_nullable", nullable ? "Y" : "N"); params.put("company_code", companyCode); - sqlSession.update(NS + "upsert_nullable", params); + sqlSession.update(NS + "upsertNullable", params); log.info("NOT NULL 토글: {}.{} nullable={}, company={}", tableName, columnName, nullable, companyCode); } @@ -327,7 +327,7 @@ public class TableManagementService extends BaseService { params.put("column_name", columnName); params.put("is_unique", unique ? "Y" : "N"); params.put("company_code", companyCode); - sqlSession.update(NS + "upsert_unique", params); + sqlSession.update(NS + "upsertUnique", params); log.info("UNIQUE 토글: {}.{} unique={}, company={}", tableName, columnName, unique, companyCode); } @@ -341,7 +341,7 @@ public class TableManagementService extends BaseService { Map params = new HashMap<>(); params.put("table_name", tableName); params.put("company_code", companyCode); - List> notNullCols = sqlSession.selectList(NS + "get_not_null_column_list", params); + List> notNullCols = sqlSession.selectList(NS + "getNotNullColumnList", params); List violations = new ArrayList<>(); for (Map col : notNullCols) { @@ -361,7 +361,7 @@ public class TableManagementService extends BaseService { Map params = new HashMap<>(); params.put("table_name", tableName); params.put("company_code", companyCode); - List> uniqueCols = sqlSession.selectList(NS + "get_unique_column_list", params); + List> uniqueCols = sqlSession.selectList(NS + "getUniqueColumnList", params); String safeTable = sanitize(tableName); List violations = new ArrayList<>(); @@ -635,7 +635,7 @@ public class TableManagementService extends BaseService { params.put("table_name", tableName); params.put("is_active", isActive); params.put("log_columns", String.join(",", targetCols)); - sqlSession.update(NS + "upsert_log_config", params); + sqlSession.update(NS + "upsertLogConfig", params); log.info("로그 테이블 생성: {}", safeLog); } @@ -643,7 +643,7 @@ public class TableManagementService extends BaseService { public Map getLogConfig(String tableName) { Map params = new HashMap<>(); params.put("table_name", tableName); - return sqlSession.selectOne(NS + "get_log_config_info", params); + return sqlSession.selectOne(NS + "getLogConfigInfo", params); } public Map getLogData(String tableName, int page, int size) { @@ -677,7 +677,7 @@ public class TableManagementService extends BaseService { params.put("table_name", tableName); params.put("is_active", isActive); params.put("log_columns", ""); - sqlSession.update(NS + "upsert_log_config", params); + sqlSession.update(NS + "upsertLogConfig", params); log.info("로그 테이블 토글: {} → {}", tableName, isActive); } @@ -687,7 +687,7 @@ public class TableManagementService extends BaseService { public Map checkDatabaseConnection() { try { - sqlSession.selectOne(NS + "check_database_connection", null); + sqlSession.selectOne(NS + "checkDatabaseConnection", null); return Map.of("connected", true, "message", "데이터베이스 연결 정상"); } catch (Exception e) { log.error("DB 연결 실패", e); @@ -702,20 +702,20 @@ public class TableManagementService extends BaseService { public List> getCategoryColumnsByCompany(String companyCode) { Map params = new HashMap<>(); params.put("company_code", companyCode); - return sqlSession.selectList(NS + "get_category_column_list_by_company", params); + return sqlSession.selectList(NS + "getCategoryColumnListByCompany", params); } public List> getNumberingColumnsByCompany(String companyCode) { Map params = new HashMap<>(); params.put("company_code", companyCode); - return sqlSession.selectList(NS + "get_numbering_column_list_by_company", params); + return sqlSession.selectList(NS + "getNumberingColumnListByCompany", params); } public List> getCategoryColumnsByMenu(String companyCode, Object menuObjid) { Map params = new HashMap<>(); params.put("company_code", companyCode); params.put("menu_objid", menuObjid); - return sqlSession.selectList(NS + "get_category_column_list_by_menu", params); + return sqlSession.selectList(NS + "getCategoryColumnListByMenu", params); } // ────────────────────────────────────────────────── @@ -728,7 +728,7 @@ public class TableManagementService extends BaseService { params.put("left_table", leftTable); params.put("right_table", rightTable); params.put("company_code", companyCode); - List> relations = sqlSession.selectList(NS + "get_entity_relation_list", params); + List> relations = sqlSession.selectList(NS + "getEntityRelationList", params); Map result = new HashMap<>(); result.put("left_table", leftTable); result.put("right_table", rightTable); @@ -740,7 +740,7 @@ public class TableManagementService extends BaseService { Map params = new HashMap<>(); params.put("table_name", tableName); params.put("company_code", companyCode); - return sqlSession.selectList(NS + "get_referenced_by_table_list", params); + return sqlSession.selectList(NS + "getReferencedByTableList", params); } // ────────────────────────────────────────────────── @@ -900,7 +900,7 @@ public class TableManagementService extends BaseService { p.put("input_type", inputType); p.put("company_code", companyCode); p.put("component_id", mapInputTypeToComponentId(inputType)); - sqlSession.update(NS + "sync_screen_layouts_input_type", p); + sqlSession.update(NS + "syncScreenLayoutsInputType", p); } catch (Exception e) { log.warn("화면 레이아웃 동기화 실패 (무시됨): {}.{}", tableName, columnName); } diff --git a/backend-spring/src/main/java/com/erp/service/TaxInvoiceService.java b/backend-spring/src/main/java/com/erp/service/TaxInvoiceService.java index d854f44c..edd2dd26 100644 --- a/backend-spring/src/main/java/com/erp/service/TaxInvoiceService.java +++ b/backend-spring/src/main/java/com/erp/service/TaxInvoiceService.java @@ -25,16 +25,16 @@ public class TaxInvoiceService extends BaseService { public Map getTaxInvoiceList(Map params) { commonService.applyCompanyCodeFilter(params); commonService.applyPagination(params); - int totalCount = sqlSession.selectOne(NS + "get_tax_invoice_list_cnt", params); - List> list = sqlSession.selectList(NS + "get_tax_invoice_list", params); + int totalCount = sqlSession.selectOne(NS + "getTaxInvoiceListCnt", params); + List> list = sqlSession.selectList(NS + "getTaxInvoiceList", params); return commonService.buildListResponse(list, totalCount, params); } public Map getTaxInvoiceInfo(Map params) { commonService.applyCompanyCodeFilter(params); - Map invoice = sqlSession.selectOne(NS + "get_tax_invoice_info", params); + Map invoice = sqlSession.selectOne(NS + "getTaxInvoiceInfo", params); if (invoice == null) return null; - List> items = sqlSession.selectList(NS + "get_tax_invoice_items", params); + List> items = sqlSession.selectList(NS + "getTaxInvoiceItems", params); Map result = new HashMap<>(); result.put("invoice", invoice); result.put("items", items); @@ -48,7 +48,7 @@ public class TaxInvoiceService extends BaseService { Map params = new HashMap<>(); params.put("company_code", companyCode); params.put("prefix", prefix + "%"); - String lastNum = sqlSession.selectOne(NS + "get_last_invoice_number", params); + String lastNum = sqlSession.selectOne(NS + "getLastInvoiceNumber", params); int nextNum = 1; if (lastNum != null && !lastNum.isEmpty()) { String[] parts = lastNum.split("-"); @@ -71,7 +71,7 @@ public class TaxInvoiceService extends BaseService { params.put("total_amount", DecimalUtils.toBigDecimal(params.get("total_amount"))); String invoiceNumber = generateInvoiceNumber((String) params.get("company_code")); params.put("invoice_number", invoiceNumber); - sqlSession.insert(NS + "insert_tax_invoice", params); + sqlSession.insert(NS + "insertTaxInvoice", params); Object itemsObj = params.get("items"); if (itemsObj instanceof List itemsList) { for (int i = 0; i < itemsList.size(); i++) { @@ -83,7 +83,7 @@ public class TaxInvoiceService extends BaseService { item.put("supply_amount", DecimalUtils.toBigDecimal(item.get("supply_amount"))); item.put("tax_amount", DecimalUtils.toBigDecimal(item.get("tax_amount"))); item.put("unit_price", DecimalUtils.toBigDecimal(item.get("unit_price"))); - sqlSession.insert(NS + "insert_tax_invoice_item", item); + sqlSession.insert(NS + "insertTaxInvoiceItem", item); } } return params; @@ -92,7 +92,7 @@ public class TaxInvoiceService extends BaseService { @Transactional public Map updateTaxInvoice(Map params) { commonService.applyCompanyCodeFilter(params); - Map existing = sqlSession.selectOne(NS + "get_tax_invoice_info", params); + Map existing = sqlSession.selectOne(NS + "getTaxInvoiceInfo", params); if (existing == null) { throw new RuntimeException("세금계산서를 찾을 수 없습니다."); } @@ -102,10 +102,10 @@ public class TaxInvoiceService extends BaseService { if (params.get("supply_amount") != null) params.put("supply_amount", DecimalUtils.toBigDecimal(params.get("supply_amount"))); if (params.get("tax_amount") != null) params.put("tax_amount", DecimalUtils.toBigDecimal(params.get("tax_amount"))); if (params.get("total_amount") != null) params.put("total_amount", DecimalUtils.toBigDecimal(params.get("total_amount"))); - sqlSession.update(NS + "update_tax_invoice", params); + sqlSession.update(NS + "updateTaxInvoice", params); Object itemsObj = params.get("items"); if (itemsObj != null) { - sqlSession.delete(NS + "delete_tax_invoice_items_by_invoice_id", params); + sqlSession.delete(NS + "deleteTaxInvoiceItemsByInvoiceId", params); if (itemsObj instanceof List itemsList) { for (int i = 0; i < itemsList.size(); i++) { @SuppressWarnings("unchecked") @@ -116,7 +116,7 @@ public class TaxInvoiceService extends BaseService { item.put("supply_amount", DecimalUtils.toBigDecimal(item.get("supply_amount"))); item.put("tax_amount", DecimalUtils.toBigDecimal(item.get("tax_amount"))); item.put("unit_price", DecimalUtils.toBigDecimal(item.get("unit_price"))); - sqlSession.insert(NS + "insert_tax_invoice_item", item); + sqlSession.insert(NS + "insertTaxInvoiceItem", item); } } } @@ -126,36 +126,36 @@ public class TaxInvoiceService extends BaseService { @Transactional public Map deleteTaxInvoice(Map params) { commonService.applyCompanyCodeFilter(params); - Map existing = sqlSession.selectOne(NS + "get_tax_invoice_info", params); + Map existing = sqlSession.selectOne(NS + "getTaxInvoiceInfo", params); if (existing == null) { throw new RuntimeException("세금계산서를 찾을 수 없습니다."); } if (!"draft".equals(existing.get("invoice_status"))) { throw new RuntimeException("발행된 세금계산서는 삭제할 수 없습니다."); } - sqlSession.delete(NS + "delete_tax_invoice_items_by_invoice_id", params); - sqlSession.delete(NS + "delete_tax_invoice", params); + sqlSession.delete(NS + "deleteTaxInvoiceItemsByInvoiceId", params); + sqlSession.delete(NS + "deleteTaxInvoice", params); return params; } @Transactional public Map issueTaxInvoice(Map params) { commonService.applyCompanyCodeFilter(params); - int updated = sqlSession.update(NS + "issue_tax_invoice", params); + int updated = sqlSession.update(NS + "issueTaxInvoice", params); if (updated == 0) { throw new RuntimeException("세금계산서를 찾을 수 없거나 이미 발행된 상태입니다."); } - return sqlSession.selectOne(NS + "get_tax_invoice_info", params); + return sqlSession.selectOne(NS + "getTaxInvoiceInfo", params); } @Transactional public Map cancelTaxInvoice(Map params) { commonService.applyCompanyCodeFilter(params); - int updated = sqlSession.update(NS + "cancel_tax_invoice", params); + int updated = sqlSession.update(NS + "cancelTaxInvoice", params); if (updated == 0) { throw new RuntimeException("세금계산서를 찾을 수 없거나 취소할 수 없는 상태입니다."); } - return sqlSession.selectOne(NS + "get_tax_invoice_info", params); + return sqlSession.selectOne(NS + "getTaxInvoiceInfo", params); } public Map getMonthlyStats(Map params) { @@ -167,7 +167,7 @@ public class TaxInvoiceService extends BaseService { String endDate = firstDay.withDayOfMonth(firstDay.lengthOfMonth()).toString(); params.put("start_date", startDate); params.put("end_date", endDate); - List> rows = sqlSession.selectList(NS + "get_monthly_stats", params); + List> rows = sqlSession.selectList(NS + "getMonthlyStats", params); Map sales = new HashMap<>(); sales.put("count", 0); sales.put("supply_amount", BigDecimal.ZERO); @@ -207,9 +207,9 @@ public class TaxInvoiceService extends BaseService { params.put("start_date", startDate); params.put("end_date", endDate); } - List> byCostType = sqlSession.selectList(NS + "get_cost_type_stats", params); - List> byMonth = sqlSession.selectList(NS + "get_cost_type_stats_by_month", params); - Map summary = sqlSession.selectOne(NS + "get_cost_type_stats_summary", params); + List> byCostType = sqlSession.selectList(NS + "getCostTypeStats", params); + List> byMonth = sqlSession.selectList(NS + "getCostTypeStatsByMonth", params); + Map summary = sqlSession.selectOne(NS + "getCostTypeStatsSummary", params); for (Map row : byCostType) { row.put("supply_amount", DecimalUtils.toBigDecimal(row.get("supply_amount"))); row.put("tax_amount", DecimalUtils.toBigDecimal(row.get("tax_amount"))); diff --git a/backend-spring/src/main/java/com/erp/service/TemplateStandardService.java b/backend-spring/src/main/java/com/erp/service/TemplateStandardService.java index 386b7fd5..f05ac098 100644 --- a/backend-spring/src/main/java/com/erp/service/TemplateStandardService.java +++ b/backend-spring/src/main/java/com/erp/service/TemplateStandardService.java @@ -67,10 +67,10 @@ public class TemplateStandardService extends BaseService { params.put("limit", limit); params.put("offset", offset); - List> templates = sqlSession.selectList(NS + "get_template_standard_list", params); + List> templates = sqlSession.selectList(NS + "getTemplateStandardList", params); templates.forEach(this::deserializeJsonFields); - Integer totalObj = sqlSession.selectOne(NS + "get_template_standard_list_cnt", params); + Integer totalObj = sqlSession.selectOne(NS + "getTemplateStandardListCnt", params); int total = totalObj != null ? totalObj : 0; Map result = new LinkedHashMap<>(); @@ -87,7 +87,7 @@ public class TemplateStandardService extends BaseService { public Map getTemplateStandardInfo(String templateCode) { Map params = new HashMap<>(); params.put("template_code", templateCode); - Map row = sqlSession.selectOne(NS + "get_template_standard_info", params); + Map row = sqlSession.selectOne(NS + "getTemplateStandardInfo", params); deserializeJsonFields(row); return row; } @@ -101,7 +101,7 @@ public class TemplateStandardService extends BaseService { Map checkParams = new HashMap<>(); checkParams.put("template_code", templateCode); - if (sqlSession.selectOne(NS + "get_template_standard_info", checkParams) != null) { + if (sqlSession.selectOne(NS + "getTemplateStandardInfo", checkParams) != null) { throw new IllegalArgumentException("템플릿 코드 '" + templateCode + "'는 이미 존재합니다."); } @@ -110,7 +110,7 @@ public class TemplateStandardService extends BaseService { params.putIfAbsent("is_public", "N"); serializeJsonFields(params); - sqlSession.insert(NS + "insert_template_standard", params); + sqlSession.insert(NS + "insertTemplateStandard", params); return getTemplateStandardInfo(templateCode); } @@ -123,7 +123,7 @@ public class TemplateStandardService extends BaseService { params.put("template_code", templateCode); serializeJsonFields(params); - int updated = sqlSession.update(NS + "update_template_standard", params); + int updated = sqlSession.update(NS + "updateTemplateStandard", params); if (updated == 0) return null; return getTemplateStandardInfo(templateCode); @@ -136,7 +136,7 @@ public class TemplateStandardService extends BaseService { public boolean deleteTemplateStandard(String templateCode) { Map params = new HashMap<>(); params.put("template_code", templateCode); - return sqlSession.delete(NS + "delete_template_standard", params) > 0; + return sqlSession.delete(NS + "deleteTemplateStandard", params) > 0; } /** @@ -145,7 +145,7 @@ public class TemplateStandardService extends BaseService { @Transactional public void updateTemplateStandardSortOrder(List> templates) { for (Map t : templates) { - sqlSession.update(NS + "update_template_standard_sort_order", t); + sqlSession.update(NS + "updateTemplateStandardSortOrder", t); } } @@ -167,7 +167,7 @@ public class TemplateStandardService extends BaseService { Map checkParams = new HashMap<>(); checkParams.put("template_code", newCode); - if (sqlSession.selectOne(NS + "get_template_standard_info", checkParams) != null) { + if (sqlSession.selectOne(NS + "getTemplateStandardInfo", checkParams) != null) { throw new IllegalArgumentException("템플릿 코드 '" + newCode + "'는 이미 존재합니다."); } @@ -193,7 +193,7 @@ public class TemplateStandardService extends BaseService { // layout_config / default_size가 이미 Object이면 직렬화 serializeJsonFields(newTemplate); - sqlSession.insert(NS + "insert_template_standard", newTemplate); + sqlSession.insert(NS + "insertTemplateStandard", newTemplate); return getTemplateStandardInfo(newCode); } @@ -203,7 +203,7 @@ public class TemplateStandardService extends BaseService { public List getTemplateStandardCategoryList(String companyCode) { Map params = new HashMap<>(); params.put("company_code", companyCode); - List> rows = sqlSession.selectList(NS + "get_template_standard_category_list", params); + List> rows = sqlSession.selectList(NS + "getTemplateStandardCategoryList", params); List categories = new ArrayList<>(); for (Map row : rows) { Object cat = row.get("category"); diff --git a/backend-spring/src/main/java/com/erp/service/TodoService.java b/backend-spring/src/main/java/com/erp/service/TodoService.java index fb022f7e..92179e0c 100644 --- a/backend-spring/src/main/java/com/erp/service/TodoService.java +++ b/backend-spring/src/main/java/com/erp/service/TodoService.java @@ -18,9 +18,9 @@ public class TodoService extends BaseService { public Map getTodoList(Map params) { commonService.applyPagination(params); - Integer totalObj = sqlSession.selectOne(NS + "get_todo_list_cnt", params); + Integer totalObj = sqlSession.selectOne(NS + "getTodoListCnt", params); int totalCount = totalObj != null ? totalObj : 0; - List> list = sqlSession.selectList(NS + "get_todo_list", params); + List> list = sqlSession.selectList(NS + "getTodoList", params); // stats 계산 Map stats = new LinkedHashMap<>(); @@ -40,26 +40,26 @@ public class TodoService extends BaseService { } public Map getTodoInfo(Map params) { - return sqlSession.selectOne(NS + "get_todo_info", params); + return sqlSession.selectOne(NS + "getTodoInfo", params); } @Transactional public Map insertTodo(Map params) { String id = UUID.randomUUID().toString(); params.put("id", id); - sqlSession.insert(NS + "insert_todo", params); - return sqlSession.selectOne(NS + "get_todo_info", Map.of("id", id)); + sqlSession.insert(NS + "insertTodo", params); + return sqlSession.selectOne(NS + "getTodoInfo", Map.of("id", id)); } @Transactional public Map updateTodo(Map params) { - sqlSession.update(NS + "update_todo", params); - return sqlSession.selectOne(NS + "get_todo_info", Map.of("id", params.get("id"))); + sqlSession.update(NS + "updateTodo", params); + return sqlSession.selectOne(NS + "getTodoInfo", Map.of("id", params.get("id"))); } @Transactional public Map deleteTodo(Map params) { - sqlSession.delete(NS + "delete_todo", params); + sqlSession.delete(NS + "deleteTodo", params); return params; } @@ -69,7 +69,7 @@ public class TodoService extends BaseService { Map p = new HashMap<>(); p.put("id", todoIds.get(i)); p.put("display_order", i); - sqlSession.update(NS + "update_todo_order", p); + sqlSession.update(NS + "updateTodoOrder", p); } } } diff --git a/backend-spring/src/main/resources/application.yml b/backend-spring/src/main/resources/application.yml index 03ae66c7..8750a3a5 100644 --- a/backend-spring/src/main/resources/application.yml +++ b/backend-spring/src/main/resources/application.yml @@ -28,7 +28,7 @@ spring: mybatis: mapper-locations: classpath:mapper/*.xml configuration: - map-underscore-to-camel-case: true + map-underscore-to-camel-case: false default-fetch-size: 100 default-statement-timeout: 30 diff --git a/backend-spring/src/main/resources/mapper/admin.xml b/backend-spring/src/main/resources/mapper/admin.xml index 031fb82f..72779487 100644 --- a/backend-spring/src/main/resources/mapper/admin.xml +++ b/backend-spring/src/main/resources/mapper/admin.xml @@ -32,17 +32,20 @@ AND MENU.STATUS = 'active' - - - AND MENU.COMPANY_CODE = '*' - - - AND (MENU.COMPANY_CODE = #{company_code} OR MENU.COMPANY_CODE = '*') - - AND MENU.MENU_TYPE = CAST(#{menu_type} AS NUMERIC) + + + AND MENU.COMPANY_CODE = '*' + + + AND MENU.COMPANY_CODE = '*' + + + AND MENU.COMPANY_CODE = #{company_code} + + AND EXISTS ( SELECT 1 @@ -177,11 +180,11 @@ AND MENU.MENU_TYPE = '1' AND MENU.STATUS = 'active' - + AND MENU.COMPANY_CODE = '*' - AND (MENU.COMPANY_CODE = #{company_code} OR MENU.COMPANY_CODE = '*') + AND MENU.COMPANY_CODE = #{company_code} @@ -316,7 +319,8 @@ INSERT INTO MENU_INFO ( - MENU_TYPE + OBJID + , MENU_TYPE , PARENT_OBJ_ID , MENU_NAME_KOR , MENU_URL @@ -330,7 +334,8 @@ , LANG_KEY_DESC , MENU_ICON ) VALUES ( - #{menu_type} + #{objid} + , #{menu_type} , #{parent_obj_id} , #{menu_name_kor} , #{menu_url} diff --git a/backend-spring/src/main/resources/mapper/batch.xml b/backend-spring/src/main/resources/mapper/batch.xml index 43616f7c..dc599c6a 100644 --- a/backend-spring/src/main/resources/mapper/batch.xml +++ b/backend-spring/src/main/resources/mapper/batch.xml @@ -45,16 +45,15 @@ , CRON_SCHEDULE , IS_ACTIVE , COMPANY_CODE - , SAVE_MODE - , CONFLICT_KEY - , AUTH_SERVICE_NAME - , DATA_ARRAY_PATH - , EXECUTION_TYPE - , NODE_FLOW_ID - , NODE_FLOW_CONTEXT , CREATED_BY , CREATED_DATE , UPDATED_DATE + , SAVE_MODE + , CONFLICT_KEY + , AUTH_SERVICE_NAME + , DATA_ARRAY_PATH + , NODE_FLOW_ID + , NODE_FLOW_CONTEXT ) VALUES ( #{batch_name} , #{description} @@ -64,25 +63,15 @@ 'Y' , #{company_code} - , - #{save_mode} - 'INSERT' - - , #{conflict_key} - , #{auth_service_name} - , #{data_array_path} - , - #{execution_type} - 'mapping' - - , #{node_flow_id} - , - #{node_flow_context}::jsonb - NULL - , #{created_by} , NOW() , NOW() + , #{save_mode} + , #{conflict_key} + , #{auth_service_name} + , #{data_array_path} + , #{node_flow_id} + , #{node_flow_context}::jsonb ) @@ -97,7 +86,7 @@ CONFLICT_KEY = #{conflict_key}, AUTH_SERVICE_NAME = #{auth_service_name}, DATA_ARRAY_PATH = #{data_array_path}, - EXECUTION_TYPE = #{execution_type}, + NODE_FLOW_ID = #{node_flow_id}, NODE_FLOW_CONTEXT = #{node_flow_context}::jsonb, UPDATED_BY = #{updated_by}, diff --git a/backend-spring/src/main/resources/mapper/multilang.xml b/backend-spring/src/main/resources/mapper/multilang.xml index e822d714..63b233cc 100644 --- a/backend-spring/src/main/resources/mapper/multilang.xml +++ b/backend-spring/src/main/resources/mapper/multilang.xml @@ -170,7 +170,7 @@ AND KEY_ID != #{key_id} - + INSERT INTO MULTI_LANG_KEY_MASTER ( COMPANY_CODE , USAGE_NOTE @@ -190,7 +190,7 @@ ) - + INSERT INTO MULTI_LANG_KEY_MASTER ( COMPANY_CODE , LANG_KEY diff --git a/backend-spring/src/main/resources/mapper/role.xml b/backend-spring/src/main/resources/mapper/role.xml index bd465500..b7ff197c 100644 --- a/backend-spring/src/main/resources/mapper/role.xml +++ b/backend-spring/src/main/resources/mapper/role.xml @@ -41,17 +41,18 @@ - + INSERT INTO AUTHORITY_MASTER ( - AUTH_NAME + OBJID + , AUTH_NAME , AUTH_CODE , COMPANY_CODE , STATUS , WRITER , CREATED_DATE ) VALUES ( - #{auth_name} + #{objid} + , #{auth_name} , #{auth_code} , #{company_code} , 'active' @@ -73,7 +74,7 @@ STATUS = #{status}, - MODDATE = NOW() + WRITER = #{writer} WHERE OBJID = #{objid} diff --git a/backend-spring/src/main/resources/mapper/screenManagement.xml b/backend-spring/src/main/resources/mapper/screenManagement.xml index 4fce825e..aa6b884e 100644 --- a/backend-spring/src/main/resources/mapper/screenManagement.xml +++ b/backend-spring/src/main/resources/mapper/screenManagement.xml @@ -12,7 +12,7 @@ AND IS_ACTIVE != 'D' - + handleTextChange(lang.langCode, e.target.value)} - placeholder={`${lang.langName} 텍스트`} + value={texts[lang.lang_code] || ""} + onChange={(e) => handleTextChange(lang.lang_code, e.target.value)} + placeholder={`${lang.lang_name} 텍스트`} className="h-8 flex-1 text-xs sm:h-9 sm:text-sm" /> diff --git a/frontend/components/common/ResponsiveDataView.tsx b/frontend/components/common/ResponsiveDataView.tsx index 226225f4..03103751 100644 --- a/frontend/components/common/ResponsiveDataView.tsx +++ b/frontend/components/common/ResponsiveDataView.tsx @@ -235,7 +235,7 @@ export function ResponsiveDataView({ {data.map((item, index) => ( ({ cardContainerClassName )} > - {data.map((item) => { + {data.map((item, index) => { const fields = resolveCardFields(item); return (
; + return ; case "work-history": return ; @@ -142,9 +142,9 @@ function renderWidget(element: DashboardElement) { case "transport-stats": // console.log("📊 [DashboardViewer] CustomStatsWidget 렌더링:", { // elementId: element.id, - // hasDataSource: !!element.dataSource, - // query: element.dataSource?.query?.substring(0, 50) + "...", - // dataSourceType: element.dataSource?.type, + // hasDataSource: !!element.data_source, + // query: element.data_source?.query?.substring(0, 50) + "...", + // dataSourceType: element.data_source?.type, // }); return ; @@ -431,7 +431,7 @@ export function DashboardViewer({ // 개별 요소 데이터 로딩 const loadElementData = useCallback(async (element: DashboardElement) => { - if (!element.dataSource?.query || element.type !== "chart") { + if (!element.data_source?.query || element.type !== "chart") { return; } @@ -441,12 +441,12 @@ export function DashboardViewer({ let result; // 외부 DB vs 현재 DB 분기 - if (element.dataSource.connectionType === "external" && element.dataSource.externalConnectionId) { + if (element.data_source.connectionType === "external" && element.data_source.externalConnectionId) { // 외부 DB const { ExternalDbConnectionAPI } = await import("@/lib/api/externalDbConnection"); const externalResult = await ExternalDbConnectionAPI.executeQuery( - parseInt(element.dataSource.externalConnectionId), - element.dataSource.query, + parseInt(element.data_source.externalConnectionId), + element.data_source.query, ); if (!externalResult.success) { @@ -467,7 +467,7 @@ export function DashboardViewer({ } else { // 현재 DB const { dashboardApi } = await import("@/lib/api/dashboard"); - result = await dashboardApi.executeQuery(element.dataSource.query); + result = await dashboardApi.executeQuery(element.data_source.query); const data: QueryResult = { columns: result.columns || [], @@ -652,15 +652,15 @@ function ViewerElement({ element, data, isLoading, onRefresh, isMobile, canvasWi className="border-border bg-background relative overflow-hidden rounded-lg border shadow-sm" style={{ minHeight: "300px" }} > - {element.showHeader !== false && ( + {element.show_header !== false && (
{/* map-summary-v2는 customTitle이 없으면 제목 숨김 */} - {element.subtype === "map-summary-v2" && !element.customTitle ? null : ( -

{element.customTitle || element.title}

+ {element.subtype === "map-summary-v2" && !element.custom_title ? null : ( +

{element.custom_title || element.title}

)}
)} -
+
{!isMounted ? (
@@ -698,15 +698,15 @@ function ViewerElement({ element, data, isLoading, onRefresh, isMobile, canvasWi height: element.size.height, }} > - {element.showHeader !== false && ( + {element.show_header !== false && (
{/* map-summary-v2는 customTitle이 없으면 제목 숨김 */} - {element.subtype === "map-summary-v2" && !element.customTitle ? null : ( -

{element.customTitle || element.title}

+ {element.subtype === "map-summary-v2" && !element.custom_title ? null : ( +

{element.custom_title || element.title}

)}
)} -
+
{!isMounted ? (
@@ -716,7 +716,7 @@ function ViewerElement({ element, data, isLoading, onRefresh, isMobile, canvasWi element={element} data={data} width={undefined} - height={element.showHeader !== false ? element.size.height - 32 : element.size.height} + height={element.show_header !== false ? element.size.height - 32 : element.size.height} /> ) : ( renderWidget(element) diff --git a/frontend/components/dashboard/widgets/CargoListWidget.tsx b/frontend/components/dashboard/widgets/CargoListWidget.tsx index 6d7787fb..955cf8e9 100644 --- a/frontend/components/dashboard/widgets/CargoListWidget.tsx +++ b/frontend/components/dashboard/widgets/CargoListWidget.tsx @@ -53,9 +53,9 @@ export default function CargoListWidget({ element }: CargoListWidgetProps) { Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connection_type: element.dataSource.connectionType || "current", - connectionId: element.dataSource.externalConnectionId, + query: element.data_source.query, + connection_type: element.data_source.connectionType || "current", + connectionId: element.data_source.externalConnectionId, }), }); diff --git a/frontend/components/dashboard/widgets/CustomMetricTestWidget.tsx b/frontend/components/dashboard/widgets/CustomMetricTestWidget.tsx index 6a5f235c..97caa352 100644 --- a/frontend/components/dashboard/widgets/CustomMetricTestWidget.tsx +++ b/frontend/components/dashboard/widgets/CustomMetricTestWidget.tsx @@ -109,9 +109,9 @@ export default function CustomMetricTestWidget({ element }: CustomMetricTestWidg Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - connectionId: (element.dataSource as any).connectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + connectionId: (element.data_source as any).connectionId, }), }); @@ -154,12 +154,12 @@ export default function CustomMetricTestWidget({ element }: CustomMetricTestWidg Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - method: (element.dataSource as any).method || "GET", - url: element.dataSource.endpoint, - headers: (element.dataSource as any).headers || {}, - body: (element.dataSource as any).body, - authType: (element.dataSource as any).authType, - authConfig: (element.dataSource as any).authConfig, + method: (element.data_source as any).method || "GET", + url: element.data_source.endpoint, + headers: (element.data_source as any).headers || {}, + body: (element.data_source as any).body, + authType: (element.data_source as any).authType, + authConfig: (element.data_source as any).authConfig, }), }); diff --git a/frontend/components/dashboard/widgets/CustomMetricWidget.tsx b/frontend/components/dashboard/widgets/CustomMetricWidget.tsx index 7c39c731..1b5a772e 100644 --- a/frontend/components/dashboard/widgets/CustomMetricWidget.tsx +++ b/frontend/components/dashboard/widgets/CustomMetricWidget.tsx @@ -109,9 +109,9 @@ export default function CustomMetricWidget({ element }: CustomMetricWidgetProps) Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - connectionId: (element.dataSource as any).connectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + connectionId: (element.data_source as any).connectionId, }), }); @@ -153,12 +153,12 @@ export default function CustomMetricWidget({ element }: CustomMetricWidgetProps) Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - method: (element.dataSource as any).method || "GET", - url: element.dataSource.endpoint, - headers: (element.dataSource as any).headers || {}, - body: (element.dataSource as any).body, - authType: (element.dataSource as any).authType, - authConfig: (element.dataSource as any).authConfig, + method: (element.data_source as any).method || "GET", + url: element.data_source.endpoint, + headers: (element.data_source as any).headers || {}, + body: (element.data_source as any).body, + authType: (element.data_source as any).authType, + authConfig: (element.data_source as any).authConfig, }), }); diff --git a/frontend/components/dashboard/widgets/CustomStatsWidget.tsx b/frontend/components/dashboard/widgets/CustomStatsWidget.tsx index da93cdaf..3c13ac56 100644 --- a/frontend/components/dashboard/widgets/CustomStatsWidget.tsx +++ b/frontend/components/dashboard/widgets/CustomStatsWidget.tsx @@ -43,7 +43,7 @@ export default function CustomStatsWidget({ element, refreshInterval = 60000 }: // localStorage 키 생성 (쿼리 기반으로 고유하게 - 편집/보기 모드 공유) const queryHash = element?.dataSource?.query - ? btoa(element.dataSource.query) // 전체 쿼리를 base64로 인코딩 + ? btoa(element.data_source.query) // 전체 쿼리를 base64로 인코딩 : "default"; const storageKey = `custom-stats-widget-${queryHash}`; @@ -85,9 +85,9 @@ export default function CustomStatsWidget({ element, refreshInterval = 60000 }: Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - externalConnectionId: element.dataSource.externalConnectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + externalConnectionId: element.data_source.externalConnectionId, }), }); diff --git a/frontend/components/dashboard/widgets/CustomerIssuesWidget.tsx b/frontend/components/dashboard/widgets/CustomerIssuesWidget.tsx index 33b47f15..9e7a46a6 100644 --- a/frontend/components/dashboard/widgets/CustomerIssuesWidget.tsx +++ b/frontend/components/dashboard/widgets/CustomerIssuesWidget.tsx @@ -54,9 +54,9 @@ export default function CustomerIssuesWidget({ element }: CustomerIssuesWidgetPr Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connection_type: element.dataSource.connectionType || "current", - connectionId: element.dataSource.externalConnectionId, + query: element.data_source.query, + connection_type: element.data_source.connectionType || "current", + connectionId: element.data_source.externalConnectionId, }), }); diff --git a/frontend/components/dashboard/widgets/DeliveryStatusSummaryWidget.tsx b/frontend/components/dashboard/widgets/DeliveryStatusSummaryWidget.tsx index 6186d2bc..d95cd2d8 100644 --- a/frontend/components/dashboard/widgets/DeliveryStatusSummaryWidget.tsx +++ b/frontend/components/dashboard/widgets/DeliveryStatusSummaryWidget.tsx @@ -47,9 +47,9 @@ export default function DeliveryStatusSummaryWidget({ element }: DeliveryStatusS Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - connectionId: element.dataSource.externalConnectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + connectionId: element.data_source.externalConnectionId, }), }); diff --git a/frontend/components/dashboard/widgets/DeliveryStatusWidget.tsx b/frontend/components/dashboard/widgets/DeliveryStatusWidget.tsx index 1acf795c..f3eb88d8 100644 --- a/frontend/components/dashboard/widgets/DeliveryStatusWidget.tsx +++ b/frontend/components/dashboard/widgets/DeliveryStatusWidget.tsx @@ -57,7 +57,7 @@ export default function DeliveryStatusWidget({ element, refreshInterval = 60000 "Content-Type": "application/json", Authorization: `Bearer ${typeof window !== "undefined" ? localStorage.getItem("authToken") || "" : ""}`, }, - body: JSON.stringify({ query: element.dataSource.query }), + body: JSON.stringify({ query: element.data_source.query }), }); if (response.ok) { diff --git a/frontend/components/dashboard/widgets/DeliveryTodayStatsWidget.tsx b/frontend/components/dashboard/widgets/DeliveryTodayStatsWidget.tsx index a4d70fee..39a1c6b1 100644 --- a/frontend/components/dashboard/widgets/DeliveryTodayStatsWidget.tsx +++ b/frontend/components/dashboard/widgets/DeliveryTodayStatsWidget.tsx @@ -48,9 +48,9 @@ export default function DeliveryTodayStatsWidget({ element }: DeliveryTodayStats Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - connectionId: element.dataSource.externalConnectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + connectionId: element.data_source.externalConnectionId, }), }); diff --git a/frontend/components/dashboard/widgets/ListSummaryWidget.tsx b/frontend/components/dashboard/widgets/ListSummaryWidget.tsx index 6ab2edeb..c0b236f7 100644 --- a/frontend/components/dashboard/widgets/ListSummaryWidget.tsx +++ b/frontend/components/dashboard/widgets/ListSummaryWidget.tsx @@ -125,7 +125,7 @@ export default function ListSummaryWidget({ element }: ListSummaryWidgetProps) { try { setLoading(true); - const extractedTableName = extractTableName(element.dataSource.query); + const extractedTableName = extractTableName(element.data_source.query); setTableName(extractedTableName); const token = localStorage.getItem("authToken"); @@ -136,9 +136,9 @@ export default function ListSummaryWidget({ element }: ListSummaryWidgetProps) { Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - connectionId: element.dataSource.connectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + connectionId: element.data_source.connectionId, }), }); diff --git a/frontend/components/dashboard/widgets/ListTestWidget.tsx b/frontend/components/dashboard/widgets/ListTestWidget.tsx index 1efd3022..d3c1beee 100644 --- a/frontend/components/dashboard/widgets/ListTestWidget.tsx +++ b/frontend/components/dashboard/widgets/ListTestWidget.tsx @@ -59,7 +59,7 @@ export function ListTestWidget({ element }: ListTestWidgetProps) { // 단일 데이터 소스 fallback (배열로 변환) if (element?.dataSource) { - return [element.dataSource]; + return [element.data_source]; } return []; @@ -71,7 +71,7 @@ export function ListTestWidget({ element }: ListTestWidgetProps) { // dataSources: dataSources, // }); - const config = element.listConfig || { + const config = element.list_config || { columnMode: "auto", viewMode: "table", columns: [], diff --git a/frontend/components/dashboard/widgets/MapSummaryWidget.tsx b/frontend/components/dashboard/widgets/MapSummaryWidget.tsx index 6e64aa4b..ac90cb1c 100644 --- a/frontend/components/dashboard/widgets/MapSummaryWidget.tsx +++ b/frontend/components/dashboard/widgets/MapSummaryWidget.tsx @@ -102,7 +102,7 @@ export default function MapSummaryWidget({ element }: MapSummaryWidgetProps) { try { setLoading(true); - const extractedTableName = extractTableName(element.dataSource.query); + const extractedTableName = extractTableName(element.data_source.query); setTableName(extractedTableName); const token = localStorage.getItem("authToken"); @@ -113,9 +113,9 @@ export default function MapSummaryWidget({ element }: MapSummaryWidgetProps) { Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - connectionId: element.dataSource.connectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + connectionId: element.data_source.connectionId, }), }); @@ -127,8 +127,8 @@ export default function MapSummaryWidget({ element }: MapSummaryWidgetProps) { const rows = result.data.rows; // 위도/경도 컬럼 찾기 - const latCol = element.chartConfig?.latitudeColumn || "latitude"; - const lngCol = element.chartConfig?.longitudeColumn || "longitude"; + const latCol = element.chart_config?.latitudeColumn || "latitude"; + const lngCol = element.chart_config?.longitudeColumn || "longitude"; // 유효한 좌표 필터링 및 마커 데이터 생성 const markerData = rows @@ -152,7 +152,7 @@ export default function MapSummaryWidget({ element }: MapSummaryWidgetProps) { }; // customTitle이 있으면 사용, 없으면 테이블명으로 자동 생성 - const displayTitle = element.customTitle || (tableName ? `${translateTableName(tableName)} 위치` : "위치 지도"); + const displayTitle = element.custom_title || (tableName ? `${translateTableName(tableName)} 위치` : "위치 지도"); return (
diff --git a/frontend/components/dashboard/widgets/MapTestWidget.tsx b/frontend/components/dashboard/widgets/MapTestWidget.tsx index efca4b13..bc3a08e5 100644 --- a/frontend/components/dashboard/widgets/MapTestWidget.tsx +++ b/frontend/components/dashboard/widgets/MapTestWidget.tsx @@ -503,7 +503,7 @@ function MapTestWidget({ element }: MapTestWidgetProps) { // 초기 로드 (마운트 시 1회만) useEffect(() => { console.log("🗺️ MapTestWidget 초기화 (마운트)"); - console.log("📋 element.dataSource:", element?.dataSource); + console.log("📋 element.data_source:", element?.dataSource); loadGeoJsonData(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); @@ -513,7 +513,7 @@ function MapTestWidget({ element }: MapTestWidgetProps) { // REST API 데이터 소스가 있으면 데이터 로드 if (element?.dataSource?.type === "api" && element?.dataSource?.endpoint) { console.log("🌐 REST API 데이터 소스 감지 - 데이터 로드 시작"); - console.log("🔗 API Endpoint:", element.dataSource.endpoint); + console.log("🔗 API Endpoint:", element.data_source.endpoint); loadMapData(); } else { console.log("⚠️ REST API 데이터 소스 없음 또는 endpoint 없음"); @@ -634,7 +634,7 @@ function MapTestWidget({ element }: MapTestWidgetProps) { return; } - const dataSource = element.dataSource; + const dataSource = element.data_source; // 쿼리에서 테이블 이름 추출 (데이터베이스용) const extractTableName = (query: string): string | null => { @@ -669,9 +669,9 @@ function MapTestWidget({ element }: MapTestWidgetProps) { Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - connectionId: element.dataSource.connectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + connectionId: element.data_source.connectionId, }), }); @@ -822,7 +822,7 @@ function MapTestWidget({ element }: MapTestWidgetProps) { console.log("🚨 기상특보 영역 설정 완료:", alerts.length, "건 (폴리곤 표시)"); // 기상특보 표시 옵션 자동 활성화 - if (!element.chartConfig?.showWeatherAlerts) { + if (!element.chart_config?.showWeatherAlerts) { console.log("🚨 기상특보 표시 옵션 자동 활성화"); } @@ -836,8 +836,8 @@ function MapTestWidget({ element }: MapTestWidgetProps) { // === 공통: 마커 데이터 생성 === if (rows.length > 0) { // 위도/경도 컬럼 찾기 - const latCol = element.chartConfig?.latitudeColumn || "latitude"; - const lngCol = element.chartConfig?.longitudeColumn || "longitude"; + const latCol = element.chart_config?.latitudeColumn || "latitude"; + const lngCol = element.chart_config?.longitudeColumn || "longitude"; // 유효한 좌표 필터링 및 마커 데이터 생성 const markerData = rows @@ -854,7 +854,7 @@ function MapTestWidget({ element }: MapTestWidgetProps) { setMarkers(markerData); // 날씨 정보 로드 (showWeather가 활성화된 경우만) - if (element.chartConfig?.showWeather && markerData.length > 0) { + if (element.chart_config?.showWeather && markerData.length > 0) { loadWeatherForMarkers(markerData); } } else { @@ -872,7 +872,7 @@ function MapTestWidget({ element }: MapTestWidgetProps) { }; // customTitle이 있으면 사용, 없으면 테이블명으로 자동 생성 - const displayTitle = element.customTitle || (tableName ? `${translateTableName(tableName)} 위치` : "위치 지도"); + const displayTitle = element.custom_title || (tableName ? `${translateTableName(tableName)} 위치` : "위치 지도"); // 데이터 소스 타입 확인 const dataSource = element?.dataSource; @@ -935,7 +935,7 @@ function MapTestWidget({ element }: MapTestWidgetProps) { {/* 타일맵 레이어 (chartConfig.tileMapUrl 또는 기본 VWorld) */} { + setMapMountId(prev => prev + 1); + }, [element.id]); + const [markers, setMarkers] = useState([]); const prevMarkersRef = useRef([]); // 이전 마커 위치 저장 (useRef 사용) const [polygons, setPolygons] = useState([]); @@ -1386,18 +1393,18 @@ export default function MapTestWidgetV2({ element }: MapTestWidgetV2Props) {
{/* 지도 */} -
+
{error ? (

{error}

) : ( {/* 폴리곤 렌더링 */} diff --git a/frontend/components/dashboard/widgets/StatusSummaryWidget.tsx b/frontend/components/dashboard/widgets/StatusSummaryWidget.tsx index 3fe1c427..10588925 100644 --- a/frontend/components/dashboard/widgets/StatusSummaryWidget.tsx +++ b/frontend/components/dashboard/widgets/StatusSummaryWidget.tsx @@ -175,7 +175,7 @@ export default function StatusSummaryWidget({ try { setLoading(true); - const extractedTableName = extractTableName(element.dataSource.query); + const extractedTableName = extractTableName(element.data_source.query); setTableName(extractedTableName); const token = localStorage.getItem("authToken"); @@ -186,9 +186,9 @@ export default function StatusSummaryWidget({ Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - connectionId: element.dataSource.connectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + connectionId: element.data_source.connectionId, }), }); @@ -348,7 +348,7 @@ export default function StatusSummaryWidget({ }; // customTitle이 있으면 사용, 없으면 테이블명으로 자동 생성 - const displayTitle = element.customTitle || (tableName ? `${translateTableName(tableName)} 현황` : title); + const displayTitle = element.custom_title || (tableName ? `${translateTableName(tableName)} 현황` : title); return (
diff --git a/frontend/components/dashboard/widgets/TaskWidget.tsx b/frontend/components/dashboard/widgets/TaskWidget.tsx index 73bef594..323cd672 100644 --- a/frontend/components/dashboard/widgets/TaskWidget.tsx +++ b/frontend/components/dashboard/widgets/TaskWidget.tsx @@ -75,16 +75,16 @@ export default function TaskWidget({ element }: TaskWidgetProps) { // 데이터베이스 쿼리가 있으면 DB에서만 가져오기 if (element?.dataSource?.query) { - const apiUrl = element.dataSource.connectionType === "external" && element.dataSource.externalConnectionId + const apiUrl = element.data_source.connectionType === "external" && element.data_source.externalConnectionId ? `http://localhost:9771/api/external-db/query?userLang=${userLang}` : `http://localhost:9771/api/dashboards/execute-query?userLang=${userLang}`; - const requestBody = element.dataSource.connectionType === "external" && element.dataSource.externalConnectionId + const requestBody = element.data_source.connectionType === "external" && element.data_source.externalConnectionId ? { - connectionId: parseInt(element.dataSource.externalConnectionId), - query: element.dataSource.query, + connectionId: parseInt(element.data_source.externalConnectionId), + query: element.data_source.query, } - : { query: element.dataSource.query }; + : { query: element.data_source.query }; const response = await fetch(apiUrl, { method: "POST", @@ -176,9 +176,9 @@ export default function TaskWidget({ element }: TaskWidgetProps) { }); // 1. 간편 모드: 사용자가 설정한 테이블/컬럼 사용 - if (element?.chartConfig?.enableDbSync && element.chartConfig.dbSyncMode === "simple" && element.chartConfig.tableName) { - const table = element.chartConfig.tableName; - const cols = element.chartConfig.columnMapping ?? {}; + if (element?.chartConfig?.enableDbSync && element.chart_config.dbSyncMode === "simple" && element.chart_config.tableName) { + const table = element.chart_config.tableName; + const cols = element.chart_config.columnMapping ?? {}; const columns = [cols.title, cols.description, cols.priority, cols.status, cols.assignedTo, cols.dueDate, cols.isUrgent] .filter(Boolean) @@ -198,8 +198,8 @@ export default function TaskWidget({ element }: TaskWidgetProps) { console.log("✅ 간편 모드 INSERT 쿼리 생성:", insertQuery); } // 2. 고급 모드: 사용자가 입력한 쿼리 사용 - else if (element?.chartConfig?.enableDbSync && element.chartConfig.insertQuery) { - insertQuery = element.chartConfig.insertQuery; + else if (element?.chartConfig?.enableDbSync && element.chart_config.insertQuery) { + insertQuery = element.chart_config.insertQuery; insertQuery = insertQuery.replace(/\$\{title\}/g, newTask.title); insertQuery = insertQuery.replace(/\$\{description\}/g, newTask.description || ''); insertQuery = insertQuery.replace(/\$\{priority\}/g, newTask.priority); @@ -220,7 +220,7 @@ export default function TaskWidget({ element }: TaskWidgetProps) { console.log("🔍 쿼리 결과 컬럼:", availableColumns); // 테이블명 추출 - const selectMatch = element.dataSource.query.match(/FROM\s+(\w+)/i); + const selectMatch = element.data_source.query.match(/FROM\s+(\w+)/i); let tableName = selectMatch ? selectMatch[1] : "unknown_table"; // 필드 값 매핑 (snake_case 기준) @@ -294,13 +294,13 @@ export default function TaskWidget({ element }: TaskWidgetProps) { // 쿼리 실행 (모든 경우 처리: 내장 DB, 외부 DB, API) if (insertQuery) { // 외부 데이터베이스 or 내장 데이터베이스 - const apiUrl = element?.dataSource?.connectionType === "external" && element.dataSource.externalConnectionId + const apiUrl = element?.dataSource?.connectionType === "external" && element.data_source.externalConnectionId ? `http://localhost:9771/api/external-db/execute?userLang=${userLang}` : `http://localhost:9771/api/dashboards/execute-dml?userLang=${userLang}`; - const requestBody = element?.dataSource?.connectionType === "external" && element.dataSource.externalConnectionId + const requestBody = element?.dataSource?.connectionType === "external" && element.data_source.externalConnectionId ? { - connectionId: parseInt(element.dataSource.externalConnectionId), + connectionId: parseInt(element.data_source.externalConnectionId), query: insertQuery, } : { query: insertQuery }; @@ -355,20 +355,20 @@ export default function TaskWidget({ element }: TaskWidgetProps) { let updateQuery = ""; // 1. 간편 모드: 사용자가 설정한 테이블/컬럼 사용 - if (element?.chartConfig?.enableDbSync && element.chartConfig.dbSyncMode === "simple" && element.chartConfig.tableName) { - const table = element.chartConfig.tableName; - const cols = element.chartConfig.columnMapping ?? {}; + if (element?.chartConfig?.enableDbSync && element.chart_config.dbSyncMode === "simple" && element.chart_config.tableName) { + const table = element.chart_config.tableName; + const cols = element.chart_config.columnMapping ?? {}; updateQuery = `UPDATE ${table} SET ${cols.status} = '${status}' WHERE ${cols.id} = '${id}'`; } // 2. 고급 모드: 사용자가 입력한 쿼리 사용 - else if (element?.chartConfig?.enableDbSync && element.chartConfig.updateQuery) { - updateQuery = element.chartConfig.updateQuery; + else if (element?.chartConfig?.enableDbSync && element.chart_config.updateQuery) { + updateQuery = element.chart_config.updateQuery; updateQuery = updateQuery.replace(/\$\{id\}/g, id); updateQuery = updateQuery.replace(/\$\{status\}/g, status); } // 3. 쿼리 결과가 있으면 자동 생성 else if (element?.dataSource?.query) { - const selectMatch = element.dataSource.query.match(/FROM\s+(\w+)/i); + const selectMatch = element.data_source.query.match(/FROM\s+(\w+)/i); const tableName = selectMatch ? selectMatch[1] : "todo_items"; updateQuery = `UPDATE ${tableName} SET status = '${status}', updated_at = NOW() WHERE id = '${id}'`; console.log("✅ 자동 생성 UPDATE:", updateQuery); @@ -381,13 +381,13 @@ export default function TaskWidget({ element }: TaskWidgetProps) { // 쿼리 실행 (모든 경우 처리) if (updateQuery) { - const apiUrl = element?.dataSource?.connectionType === "external" && element.dataSource.externalConnectionId + const apiUrl = element?.dataSource?.connectionType === "external" && element.data_source.externalConnectionId ? `http://localhost:9771/api/external-db/execute?userLang=${userLang}` : `http://localhost:9771/api/dashboards/execute-dml?userLang=${userLang}`; - const requestBody = element?.dataSource?.connectionType === "external" && element.dataSource.externalConnectionId + const requestBody = element?.dataSource?.connectionType === "external" && element.data_source.externalConnectionId ? { - connectionId: parseInt(element.dataSource.externalConnectionId), + connectionId: parseInt(element.data_source.externalConnectionId), query: updateQuery, } : { query: updateQuery }; @@ -420,19 +420,19 @@ export default function TaskWidget({ element }: TaskWidgetProps) { let deleteQuery = ""; // 1. 간편 모드: 사용자가 설정한 테이블/컬럼 사용 - if (element?.chartConfig?.enableDbSync && element.chartConfig.dbSyncMode === "simple" && element.chartConfig.tableName) { - const table = element.chartConfig.tableName; - const cols = element.chartConfig.columnMapping ?? {}; + if (element?.chartConfig?.enableDbSync && element.chart_config.dbSyncMode === "simple" && element.chart_config.tableName) { + const table = element.chart_config.tableName; + const cols = element.chart_config.columnMapping ?? {}; deleteQuery = `DELETE FROM ${table} WHERE ${cols.id} = '${id}'`; } // 2. 고급 모드: 사용자가 입력한 쿼리 사용 - else if (element?.chartConfig?.enableDbSync && element.chartConfig.deleteQuery) { - deleteQuery = element.chartConfig.deleteQuery; + else if (element?.chartConfig?.enableDbSync && element.chart_config.deleteQuery) { + deleteQuery = element.chart_config.deleteQuery; deleteQuery = deleteQuery.replace(/\$\{id\}/g, id); } // 3. 쿼리 결과가 있으면 자동 생성 else if (element?.dataSource?.query) { - const selectMatch = element.dataSource.query.match(/FROM\s+(\w+)/i); + const selectMatch = element.data_source.query.match(/FROM\s+(\w+)/i); const tableName = selectMatch ? selectMatch[1] : "todo_items"; deleteQuery = `DELETE FROM ${tableName} WHERE id = '${id}'`; console.log("✅ 자동 생성 DELETE:", deleteQuery); @@ -445,13 +445,13 @@ export default function TaskWidget({ element }: TaskWidgetProps) { // 쿼리 실행 (모든 경우 처리) if (deleteQuery) { - const apiUrl = element?.dataSource?.connectionType === "external" && element.dataSource.externalConnectionId + const apiUrl = element?.dataSource?.connectionType === "external" && element.data_source.externalConnectionId ? `http://localhost:9771/api/external-db/execute?userLang=${userLang}` : `http://localhost:9771/api/dashboards/execute-dml?userLang=${userLang}`; - const requestBody = element?.dataSource?.connectionType === "external" && element.dataSource.externalConnectionId + const requestBody = element?.dataSource?.connectionType === "external" && element.data_source.externalConnectionId ? { - connectionId: parseInt(element.dataSource.externalConnectionId), + connectionId: parseInt(element.data_source.externalConnectionId), query: deleteQuery, } : { query: deleteQuery }; diff --git a/frontend/components/dashboard/widgets/TodoWidget.tsx b/frontend/components/dashboard/widgets/TodoWidget.tsx index 70970f71..c807071f 100644 --- a/frontend/components/dashboard/widgets/TodoWidget.tsx +++ b/frontend/components/dashboard/widgets/TodoWidget.tsx @@ -81,22 +81,22 @@ export default function TodoWidget({ element }: TodoWidgetProps) { // 외부 DB 조회 (dataSource가 설정된 경우) if (element?.dataSource?.query) { // console.log("🔍 TodoWidget - 외부 DB 조회 시작"); - // console.log("📝 Query:", element.dataSource.query); - // console.log("🔗 ConnectionId:", element.dataSource.externalConnectionId); - // console.log("🔗 ConnectionType:", element.dataSource.connectionType); + // console.log("📝 Query:", element.data_source.query); + // console.log("🔗 ConnectionId:", element.data_source.externalConnectionId); + // console.log("🔗 ConnectionType:", element.data_source.connectionType); // 현재 DB vs 외부 DB 분기 - const apiUrl = element.dataSource.connectionType === "external" && element.dataSource.externalConnectionId + const apiUrl = element.data_source.connectionType === "external" && element.data_source.externalConnectionId ? `http://localhost:9771/api/external-db/query?userLang=${userLang}` : `http://localhost:9771/api/dashboards/execute-query?userLang=${userLang}`; - const requestBody = element.dataSource.connectionType === "external" && element.dataSource.externalConnectionId + const requestBody = element.data_source.connectionType === "external" && element.data_source.externalConnectionId ? { - connectionId: parseInt(element.dataSource.externalConnectionId), - query: element.dataSource.query, + connectionId: parseInt(element.data_source.externalConnectionId), + query: element.data_source.query, } : { - query: element.dataSource.query, + query: element.data_source.query, }; // console.log("🌐 API URL:", apiUrl); diff --git a/frontend/components/dashboard/widgets/TransportStatsWidget.tsx b/frontend/components/dashboard/widgets/TransportStatsWidget.tsx index 6fb7929a..81e224c2 100644 --- a/frontend/components/dashboard/widgets/TransportStatsWidget.tsx +++ b/frontend/components/dashboard/widgets/TransportStatsWidget.tsx @@ -61,9 +61,9 @@ export default function TransportStatsWidget({ element, refreshInterval = 60000 Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - externalConnectionId: element.dataSource.externalConnectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + externalConnectionId: element.data_source.externalConnectionId, }), }); diff --git a/frontend/components/dashboard/widgets/VehicleListWidget.tsx b/frontend/components/dashboard/widgets/VehicleListWidget.tsx index df062b45..1eb97cfd 100644 --- a/frontend/components/dashboard/widgets/VehicleListWidget.tsx +++ b/frontend/components/dashboard/widgets/VehicleListWidget.tsx @@ -37,7 +37,7 @@ export default function VehicleListWidget({ element, refreshInterval = 30000 }: return; } - const query = element.dataSource.query; + const query = element.data_source.query; try { const response = await fetch(getApiUrl("/api/dashboards/execute-query"), { diff --git a/frontend/components/dashboard/widgets/VehicleMapOnlyWidget.tsx b/frontend/components/dashboard/widgets/VehicleMapOnlyWidget.tsx index 266b8e5d..527a184e 100644 --- a/frontend/components/dashboard/widgets/VehicleMapOnlyWidget.tsx +++ b/frontend/components/dashboard/widgets/VehicleMapOnlyWidget.tsx @@ -90,7 +90,7 @@ export default function VehicleMapOnlyWidget({ element, refreshInterval = 30000 Authorization: `Bearer ${typeof window !== "undefined" ? localStorage.getItem("authToken") || "" : ""}`, }, body: JSON.stringify({ - query: element.dataSource.query, + query: element.data_source.query, }), }); @@ -98,10 +98,10 @@ export default function VehicleMapOnlyWidget({ element, refreshInterval = 30000 const result = await response.json(); if (result.success && result.data.rows.length > 0) { // 설정된 컬럼 매핑 가져오기 - const latCol = element.chartConfig.latitudeColumn; - const lngCol = element.chartConfig.longitudeColumn; - const labelCol = element.chartConfig.labelColumn || "name"; - const statusCol = element.chartConfig.statusColumn || "status"; + const latCol = element.chart_config.latitudeColumn; + const lngCol = element.chart_config.longitudeColumn; + const labelCol = element.chart_config.labelColumn || "name"; + const statusCol = element.chart_config.statusColumn || "status"; // DB 데이터를 Vehicle 형식으로 변환 console.log("🗺️ [VehicleMapOnlyWidget] 원본 데이터:", result.data.rows); diff --git a/frontend/components/dashboard/widgets/VehicleStatusWidget.tsx b/frontend/components/dashboard/widgets/VehicleStatusWidget.tsx index 17a2e654..135c4fe7 100644 --- a/frontend/components/dashboard/widgets/VehicleStatusWidget.tsx +++ b/frontend/components/dashboard/widgets/VehicleStatusWidget.tsx @@ -38,7 +38,7 @@ export default function VehicleStatusWidget({ element, refreshInterval = 30000 } return; } - const query = element.dataSource.query; + const query = element.data_source.query; try { const response = await fetch(getApiUrl("/api/dashboards/execute-query"), { diff --git a/frontend/components/dashboard/widgets/WeatherWidget.tsx b/frontend/components/dashboard/widgets/WeatherWidget.tsx index 56c3aaf6..2a14568a 100644 --- a/frontend/components/dashboard/widgets/WeatherWidget.tsx +++ b/frontend/components/dashboard/widgets/WeatherWidget.tsx @@ -226,7 +226,7 @@ export default function WeatherWidget({ setWeather(data); setLastUpdated(new Date()); } catch (err: any) { - console.error('날씨 조회 실패:', err); + console.warn('날씨 조회 실패:', err?.message || err); // 에러 메시지 추출 let errorMessage = '날씨 정보를 가져오는 중 오류가 발생했습니다.'; diff --git a/frontend/components/dashboard/widgets/WorkHistoryWidget.tsx b/frontend/components/dashboard/widgets/WorkHistoryWidget.tsx index cff82241..038065ee 100644 --- a/frontend/components/dashboard/widgets/WorkHistoryWidget.tsx +++ b/frontend/components/dashboard/widgets/WorkHistoryWidget.tsx @@ -32,7 +32,7 @@ export default function WorkHistoryWidget({ element, refreshInterval = 60000 }: setError(null); // 쿼리가 설정되어 있으면 쿼리 실행 - if (element.dataSource?.query) { + if (element.data_source?.query) { const token = localStorage.getItem("authToken"); const response = await fetch(getApiUrl("/api/dashboards/execute-query"), { method: "POST", @@ -41,9 +41,9 @@ export default function WorkHistoryWidget({ element, refreshInterval = 60000 }: Authorization: `Bearer ${token}`, }, body: JSON.stringify({ - query: element.dataSource.query, - connectionType: element.dataSource.connectionType || "current", - connectionId: element.dataSource.externalConnectionId, + query: element.data_source.query, + connectionType: element.data_source.connectionType || "current", + connectionId: element.data_source.externalConnectionId, }), }); @@ -73,7 +73,7 @@ export default function WorkHistoryWidget({ element, refreshInterval = 60000 }: loadData(); const interval = setInterval(loadData, refreshInterval); return () => clearInterval(interval); - }, [selectedType, selectedStatus, refreshInterval, element.dataSource]); + }, [selectedType, selectedStatus, refreshInterval, element.data_source]); if (isLoading && data.length === 0) { return ( @@ -92,7 +92,7 @@ export default function WorkHistoryWidget({ element, refreshInterval = 60000 }:
⚠️
{error}
- {!element.dataSource?.query &&
쿼리를 설정하세요
} + {!element.data_source?.query &&
쿼리를 설정하세요
} +
+
+
+ POP Mode +
+
+ + +
+
+
+ + + + +
+
+
+
Login successful
+
Welcome back, Park
+
+
+ + + + diff --git a/frontend/invion-preview-v2.html b/frontend/invion-preview-v2.html new file mode 100644 index 00000000..0d6a14f6 --- /dev/null +++ b/frontend/invion-preview-v2.html @@ -0,0 +1,1027 @@ + + + + + +INVION - Preview + + + + +
INVION DESIGN PREVIEW
+
+ + +
+
+
+
+
+
+ +
+ + + + +
+
+
+
로그인 성공
+
Park님 환영합니다
+
+
+ + + + diff --git a/frontend/invion-preview-v3.html b/frontend/invion-preview-v3.html new file mode 100644 index 00000000..1b1bdcc6 --- /dev/null +++ b/frontend/invion-preview-v3.html @@ -0,0 +1,589 @@ + + + + + +INVION - Preview v3 + + + + +
INVION v3 PREVIEW
+
+ + +
+
+
+
+ +
+ + + + +
로그인 성공
Park님 환영합니다
+ + + + diff --git a/frontend/invion-preview-v4.html b/frontend/invion-preview-v4.html new file mode 100644 index 00000000..c0995866 --- /dev/null +++ b/frontend/invion-preview-v4.html @@ -0,0 +1,989 @@ + + + + + +INVION - Preview v4 + + + + +
INVION v4 — COSMIC COMMAND CENTER
+ + + +
+
+
+
+
+ + +
+
+
+ + +
+
+ +
+ + + + +
로그인 성공
Park님 환영합니다
+ + + + diff --git a/frontend/invion-preview.html b/frontend/invion-preview.html new file mode 100644 index 00000000..0d6a14f6 --- /dev/null +++ b/frontend/invion-preview.html @@ -0,0 +1,1027 @@ + + + + + +INVION - Preview + + + + +
INVION DESIGN PREVIEW
+
+ + +
+
+
+
+
+
+ +
+ + + + +
+
+
+
로그인 성공
+
Park님 환영합니다
+
+
+ + + + diff --git a/frontend/lib/api/batch.ts b/frontend/lib/api/batch.ts index 2398df79..3a3a7a42 100644 --- a/frontend/lib/api/batch.ts +++ b/frontend/lib/api/batch.ts @@ -157,6 +157,9 @@ export class BatchAPI { /** * 배치 설정 목록 조회 + * Spring 백엔드: GET /api/batch-management/batch-configs → { success, data: { list, total_count, ... } } + * Node.js 백엔드: GET /api/batch-configs → { success, data: [...], pagination: { ... } } + * 두 백엔드 응답 형식 모두 호환되도록 처리 */ static async getBatchConfigs(filter: BatchConfigFilter = {}): Promise<{ success: boolean; @@ -178,19 +181,40 @@ export class BatchAPI { if (filter.page) params.append("page", filter.page.toString()); if (filter.limit) params.append("limit", filter.limit.toString()); - const response = await apiClient.get<{ - success: boolean; - data: BatchConfig[]; - pagination?: { - page: number; - limit: number; - total: number; - totalPages: number; - }; - message?: string; - }>(`/batch-configs?${params.toString()}`); + const response = await apiClient.get( + `/batch-management/batch-configs?${params.toString()}` + ); - return response.data; + const raw = response.data; + + // Spring 응답: { success, data: { list: [...], total_count, ... } } + // Node.js 응답: { success, data: [...], pagination: { ... } } + let data: BatchConfig[]; + let pagination: { page: number; limit: number; total: number; totalPages: number } | undefined; + + if (raw.data && Array.isArray(raw.data)) { + // Node.js 형식: data가 직접 배열 + data = raw.data; + pagination = raw.pagination; + } else if (raw.data && (raw.data.list || raw.data.data)) { + // Spring 형식: data가 객체 (list 또는 data 키에 배열) + data = raw.data.list || raw.data.data || []; + pagination = { + page: raw.data.page || 1, + limit: raw.data.limit || data.length, + total: raw.data.total_count ?? raw.data.total ?? data.length, + totalPages: raw.data.total_page ?? raw.data.totalPages ?? 1, + }; + } else { + data = []; + } + + return { + success: raw.success ?? true, + data, + pagination, + message: raw.message, + }; } catch (error) { console.error("배치 설정 목록 조회 오류:", error); return { @@ -291,7 +315,7 @@ export class BatchAPI { static async deleteBatchConfig(id: number): Promise { try { const response = await apiClient.delete>( - `/batch-configs/${id}`, + `/batch-management/batch-configs/${id}`, ); if (!response.data.success) { diff --git a/frontend/lib/api/commonCode.ts b/frontend/lib/api/commonCode.ts index 47d9e6a1..91145d5b 100644 --- a/frontend/lib/api/commonCode.ts +++ b/frontend/lib/api/commonCode.ts @@ -12,6 +12,18 @@ import { ApiResponse, } from "@/types/commonCode"; +/** + * camelCase 키를 snake_case로 변환하는 헬퍼 + */ +function toSnakeCase(obj: Record): Record { + const result: Record = {}; + for (const key of Object.keys(obj)) { + const snakeKey = key.replace(/([A-Z])/g, "_$1").toLowerCase(); + result[snakeKey] = obj[key]; + } + return result; +} + /** * 공통코드 관리 API 클라이언트 */ @@ -38,17 +50,19 @@ export const commonCodeApi = { /** * 카테고리 생성 + * Zod 스키마가 camelCase를 사용하므로 백엔드가 기대하는 snake_case로 변환 */ async create(data: CreateCategoryRequest): Promise> { - const response = await apiClient.post("/common-codes/categories", data); + const response = await apiClient.post("/common-codes/categories", toSnakeCase(data)); return response.data; }, /** * 카테고리 수정 + * Zod 스키마가 camelCase를 사용하므로 백엔드가 기대하는 snake_case로 변환 */ async update(categoryCode: string, data: UpdateCategoryRequest): Promise> { - const response = await apiClient.put(`/common-codes/categories/${categoryCode}`, data); + const response = await apiClient.put(`/common-codes/categories/${categoryCode}`, toSnakeCase(data)); return response.data; }, @@ -84,17 +98,19 @@ export const commonCodeApi = { /** * 코드 생성 + * Zod 스키마가 camelCase를 사용하므로 백엔드가 기대하는 snake_case로 변환 */ async create(categoryCode: string, data: CreateCodeRequest): Promise> { - const response = await apiClient.post(`/common-codes/categories/${categoryCode}/codes`, data); + const response = await apiClient.post(`/common-codes/categories/${categoryCode}/codes`, toSnakeCase(data)); return response.data; }, /** * 코드 수정 + * Zod 스키마가 camelCase를 사용하므로 백엔드가 기대하는 snake_case로 변환 */ async update(categoryCode: string, codeValue: string, data: UpdateCodeRequest): Promise> { - const response = await apiClient.put(`/common-codes/categories/${categoryCode}/codes/${codeValue}`, data); + const response = await apiClient.put(`/common-codes/categories/${categoryCode}/codes/${codeValue}`, toSnakeCase(data)); return response.data; }, diff --git a/frontend/lib/api/dashboard.ts b/frontend/lib/api/dashboard.ts index 8d484ccb..536fa6a8 100644 --- a/frontend/lib/api/dashboard.ts +++ b/frontend/lib/api/dashboard.ts @@ -62,22 +62,13 @@ async function apiRequest( } if (!response.ok) { - console.error("API Error Response:", { - status: response.status, - statusText: response.statusText, - result, - }); + console.warn("[Dashboard API]", response.status, result?.message || response.statusText); throw new Error(result.message || `HTTP ${response.status}: ${response.statusText}`); } return result; } catch (error: any) { - console.error("API Request Error:", { - endpoint, - error: error?.message || error, - errorObj: error, - config, - }); + console.warn("[Dashboard API] 요청 실패:", endpoint, error?.message || error); throw error; } } @@ -87,18 +78,17 @@ export interface Dashboard { id: string; title: string; description?: string; - thumbnailUrl?: string; - isPublic: boolean; - createdBy: string; - createdByName?: string; - createdAt: string; - updatedAt: string; + thumbnail_url?: string; + is_public: boolean | string; + created_by: string; + created_by_name?: string; + created_date: number; + updated_date: number; tags?: string[]; category?: string; - viewCount: number; - elementsCount?: number; - creatorName?: string; - companyCode?: string; + view_count: number; + elements_count?: number; + company_code?: string; elements?: DashboardElement[]; settings?: { resolution?: string; @@ -139,7 +129,7 @@ export const dashboardApi = { stringified: JSON.stringify(data), }); - const result = await apiRequest("/dashboards", { + const result = await apiRequest("/dashboard", { method: "POST", body: JSON.stringify(data), }); @@ -168,7 +158,7 @@ export const dashboardApi = { if (typeof query.isPublic === "boolean") params.append("isPublic", query.isPublic.toString()); const queryString = params.toString(); - const endpoint = `/dashboards${queryString ? `?${queryString}` : ""}`; + const endpoint = `/dashboard${queryString ? `?${queryString}` : ""}`; const result = await apiRequest(endpoint); @@ -194,16 +184,16 @@ export const dashboardApi = { if (query.category) params.append("category", query.category); const queryString = params.toString(); - const endpoint = `/dashboards/my${queryString ? `?${queryString}` : ""}`; + const endpoint = `/dashboard/my${queryString ? `?${queryString}` : ""}`; - const result = await apiRequest(endpoint); + const result = await apiRequest<{ dashboards: Dashboard[] }>(endpoint); if (!result.success) { throw new Error(result.message || "내 대시보드 목록 조회에 실패했습니다."); } return { - dashboards: result.data || [], + dashboards: result.data?.dashboards || [], pagination: result.pagination, }; }, @@ -212,7 +202,7 @@ export const dashboardApi = { * 대시보드 상세 조회 */ async getDashboard(id: string): Promise { - const result = await apiRequest(`/dashboards/${id}`); + const result = await apiRequest(`/dashboard/${id}`); if (!result.success || !result.data) { throw new Error(result.message || "대시보드 조회에 실패했습니다."); @@ -225,7 +215,7 @@ export const dashboardApi = { * 공개 대시보드 조회 (인증 불필요) */ async getPublicDashboard(id: string): Promise { - const result = await apiRequest(`/dashboards/public/${id}`); + const result = await apiRequest(`/dashboard/public/${id}`); if (!result.success || !result.data) { throw new Error(result.message || "대시보드 조회에 실패했습니다."); @@ -245,7 +235,7 @@ export const dashboardApi = { stringified: JSON.stringify(data), }); - const result = await apiRequest(`/dashboards/${id}`, { + const result = await apiRequest(`/dashboard/${id}`, { method: "PUT", body: JSON.stringify(data), }); @@ -265,7 +255,7 @@ export const dashboardApi = { * 대시보드 삭제 */ async deleteDashboard(id: string): Promise { - const result = await apiRequest(`/dashboards/${id}`, { + const result = await apiRequest(`/dashboard/${id}`, { method: "DELETE", }); @@ -286,7 +276,7 @@ export const dashboardApi = { if (query.category) params.append("category", query.category); const queryString = params.toString(); - const endpoint = `/dashboards/public${queryString ? `?${queryString}` : ""}`; + const endpoint = `/dashboard/public${queryString ? `?${queryString}` : ""}`; const result = await apiRequest(endpoint); @@ -304,7 +294,7 @@ export const dashboardApi = { * 쿼리 실행 (차트 데이터 조회) */ async executeQuery(query: string): Promise<{ columns: string[]; rows: any[]; rowCount: number }> { - const result = await apiRequest<{ columns: string[]; rows: any[]; rowCount: number }>("/dashboards/execute-query", { + const result = await apiRequest<{ columns: string[]; rows: any[]; rowCount: number }>("/dashboard/execute-query", { method: "POST", body: JSON.stringify({ query }), }); @@ -328,7 +318,7 @@ export const dashboardApi = { tableName: string; columns: Array<{ name: string; type: string; udtName: string }>; dateColumns: string[]; - }>("/dashboards/table-schema", { + }>("/dashboard/table-schema", { method: "POST", body: JSON.stringify({ tableName }), }); diff --git a/frontend/lib/api/menu.ts b/frontend/lib/api/menu.ts index a6cc5a91..70552fba 100644 --- a/frontend/lib/api/menu.ts +++ b/frontend/lib/api/menu.ts @@ -101,7 +101,7 @@ export interface PopMenuResponse { export const menuApi = { // 관리자 메뉴 목록 조회 (좌측 사이드바용 - active만 표시) getAdminMenus: async (): Promise> => { - const response = await apiClient.get("/admin/menus", { params: { menuType: "0" } }); + const response = await apiClient.get("/admin/menus", { params: { menu_type: "0" } }); if (response.data.success && response.data.data && response.data.data.length > 0) { } return response.data; @@ -121,13 +121,13 @@ export const menuApi = { // 관리자 메뉴 목록 조회 (메뉴 관리 화면용 - 모든 상태 표시) getAdminMenusForManagement: async (): Promise> => { - const response = await apiClient.get("/admin/menus", { params: { menuType: "0", includeInactive: "true" } }); + const response = await apiClient.get("/admin/menus", { params: { menu_type: "0", include_inactive: "true" } }); return response.data; }, // 사용자 메뉴 목록 조회 (메뉴 관리 화면용 - 모든 상태 표시) getUserMenusForManagement: async (): Promise> => { - const response = await apiClient.get("/admin/menus", { params: { menuType: "1", includeInactive: "true" } }); + const response = await apiClient.get("/admin/menus", { params: { menu_type: "1", include_inactive: "true" } }); return response.data; }, diff --git a/frontend/lib/api/multilang.ts b/frontend/lib/api/multilang.ts index 9f71fe6c..3072d592 100644 --- a/frontend/lib/api/multilang.ts +++ b/frontend/lib/api/multilang.ts @@ -10,23 +10,23 @@ import { apiClient } from "./client"; // ===================================================== export interface Language { - langCode: string; - langName: string; - langNative: string; - isActive: string; - sortOrder?: number; + lang_code: string; + lang_name: string; + lang_native: string; + is_active: string; + sort_order?: number; } export interface LangCategory { - categoryId: number; - categoryCode: string; - categoryName: string; - parentId?: number | null; + category_id: number; + category_code: string; + category_name: string; + parent_id?: number | null; level: number; - keyPrefix: string; + key_prefix: string; description?: string; - sortOrder: number; - isActive: string; + sort_order: number; + is_active: string; children?: LangCategory[]; } diff --git a/frontend/lib/api/screen.ts b/frontend/lib/api/screen.ts index ad8b831b..6ac0284e 100644 --- a/frontend/lib/api/screen.ts +++ b/frontend/lib/api/screen.ts @@ -52,6 +52,8 @@ function mapRawScreen(raw: any): ScreenDefinition { // 화면 정의 관련 API export const screenApi = { // 화면 목록 조회 + // Spring 백엔드: { success, data: { data: [...], total, page, size } } + // Node.js 백엔드: { success, data: [...], total, page, size, totalPages } getScreens: async (params: { page?: number; size?: number; @@ -61,13 +63,34 @@ export const screenApi = { }): Promise> => { const response = await apiClient.get("/screen-management/screens", { params }); const raw = response.data || {}; - const items: any[] = (raw.data ?? raw.items ?? []) as any[]; + + // Spring: raw.data = { data: [...], total, page, size } + // Node.js: raw.data = [...] + let items: any[]; + let paginationSource: any; + + if (Array.isArray(raw.data)) { + // Node.js 형식: data가 직접 배열 + items = raw.data; + paginationSource = raw; + } else if (raw.data && (Array.isArray(raw.data.data) || Array.isArray(raw.data.items) || Array.isArray(raw.data.list))) { + // Spring 형식: data가 객체, 내부에 data/items/list 배열 + items = raw.data.data ?? raw.data.items ?? raw.data.list ?? []; + paginationSource = raw.data; + } else if (Array.isArray(raw.items)) { + items = raw.items; + paginationSource = raw; + } else { + items = []; + paginationSource = raw; + } + const mapped: ScreenDefinition[] = items.map(mapRawScreen); - const page = raw.page ?? params.page ?? 1; - const size = raw.size ?? params.size ?? mapped.length; - const total = raw.total ?? mapped.length; - const total_pages = raw.totalPages ?? raw.total_pages ?? Math.max(1, Math.ceil(total / (size || 1))); + const page = paginationSource.page ?? params.page ?? 1; + const size = paginationSource.size ?? params.size ?? mapped.length; + const total = paginationSource.total ?? paginationSource.total_count ?? mapped.length; + const total_pages = paginationSource.totalPages ?? paginationSource.total_pages ?? paginationSource.total_page ?? Math.max(1, Math.ceil(total / (size || 1))); return { data: mapped, total, page, size, total_pages }; }, diff --git a/frontend/lib/registry/components/map/MapRenderer.tsx b/frontend/lib/registry/components/map/MapRenderer.tsx index eb5db1ca..9a86c2d7 100644 --- a/frontend/lib/registry/components/map/MapRenderer.tsx +++ b/frontend/lib/registry/components/map/MapRenderer.tsx @@ -10,7 +10,7 @@ import MapConfigPanel from "./MapConfigPanel"; * Map 컴포넌트 렌더러 (자동 등록) */ export class MapRenderer extends AutoRegisteringComponentRenderer { - static definition = { + static componentDefinition = { id: "map", name: "지도", name_eng: "Map Component", diff --git a/frontend/lib/registry/components/v2-location-swap-selector/LocationSwapSelectorComponent.tsx b/frontend/lib/registry/components/v2-location-swap-selector/LocationSwapSelectorComponent.tsx index 88e9002a..5dcadde7 100644 --- a/frontend/lib/registry/components/v2-location-swap-selector/LocationSwapSelectorComponent.tsx +++ b/frontend/lib/registry/components/v2-location-swap-selector/LocationSwapSelectorComponent.tsx @@ -1,14 +1,13 @@ "use client"; -import React, { useState, useEffect } from "react"; -import { ArrowLeftRight, ChevronDown } from "lucide-react"; +import React, { useState, useEffect, useRef, useMemo } from "react"; +import { ArrowLeftRight } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, - SelectValue, } from "@/components/ui/select"; import { cn } from "@/lib/utils"; import { apiClient } from "@/lib/api/client"; @@ -27,36 +26,32 @@ interface DataSourceConfig { staticOptions?: LocationOption[]; } +const DEFAULT_OPTIONS: LocationOption[] = [ + { value: "포항", label: "포항" }, + { value: "광양", label: "광양" }, +]; +const DEFAULT_STATIC_FALLBACK: DataSourceConfig = { type: "static", staticOptions: [] }; + +// 모듈 레벨 캐시 — 컴포넌트 리마운트에도 유지 +const dbLoadCache = new Map(); + export interface LocationSwapSelectorProps { - // 기본 props id?: string; style?: React.CSSProperties; isDesignMode?: boolean; - - // 데이터 소스 설정 dataSource?: DataSourceConfig; - - // 필드 매핑 departureField?: string; destinationField?: string; departureLabelField?: string; destinationLabelField?: string; - - // UI 설정 departureLabel?: string; destinationLabel?: string; showSwapButton?: boolean; swapButtonPosition?: "center" | "right"; variant?: "card" | "inline" | "minimal"; - - // 폼 데이터 formData?: Record; onFormDataChange?: (field: string, value: any) => void; - - // 🆕 사용자 정보 (DB에서 초기값 로드용) userId?: string; - - // componentConfig (화면 디자이너에서 전달) componentConfig?: { dataSource?: DataSourceConfig; departureField?: string; @@ -68,31 +63,30 @@ export interface LocationSwapSelectorProps { showSwapButton?: boolean; swapButtonPosition?: "center" | "right"; variant?: "card" | "inline" | "minimal"; - // 🆕 DB 초기값 로드 설정 - loadFromDb?: boolean; // DB에서 초기값 로드 여부 - dbTableName?: string; // 조회할 테이블명 (기본: vehicles) - dbKeyField?: string; // 키 필드 (기본: user_id) + loadFromDb?: boolean; + dbTableName?: string; + dbKeyField?: string; }; + // DynamicComponentRenderer에서 전달되는 추가 props (무시) + [key: string]: any; } -/** - * LocationSwapSelector 컴포넌트 - * 출발지/도착지 선택 및 교환 기능 - */ export function LocationSwapSelectorComponent(props: LocationSwapSelectorProps) { const { id, style, isDesignMode = false, - formData = {}, + formData, onFormDataChange, componentConfig, userId, } = props; - // componentConfig에서 설정 가져오기 (우선순위: componentConfig > props) + // 안전한 formData 참조 — undefined면 빈 객체 사용하되 매번 새로 만들지 않음 + const safeFormData = formData || {}; + const config = componentConfig || {}; - const dataSource = config.dataSource || props.dataSource || { type: "static", staticOptions: [] }; + const dataSource = config.dataSource || props.dataSource || DEFAULT_STATIC_FALLBACK; const departureField = config.departureField || props.departureField || "departure"; const destinationField = config.destinationField || props.destinationField || "destination"; const departureLabelField = config.departureLabelField || props.departureLabelField; @@ -101,399 +95,260 @@ export function LocationSwapSelectorComponent(props: LocationSwapSelectorProps) const destinationLabel = config.destinationLabel || props.destinationLabel || "도착지"; const showSwapButton = config.showSwapButton !== false && props.showSwapButton !== false; const variant = config.variant || props.variant || "card"; - - // 🆕 DB 초기값 로드 설정 - const loadFromDb = config.loadFromDb !== false; // 기본값 true + + const loadFromDb = config.loadFromDb !== false; const dbTableName = config.dbTableName || "vehicles"; const dbKeyField = config.dbKeyField || "user_id"; - // 기본 옵션 (포항/광양) - 한글로 저장 - const DEFAULT_OPTIONS: LocationOption[] = [ - { value: "포항", label: "포항" }, - { value: "광양", label: "광양" }, - ]; - - // 상태 const [options, setOptions] = useState(DEFAULT_OPTIONS); const [loading, setLoading] = useState(false); const [isSwapping, setIsSwapping] = useState(false); - const [dbLoaded, setDbLoaded] = useState(false); // DB 로드 완료 여부 - - // 로컬 선택 상태 (Select 컴포넌트용) - const [localDeparture, setLocalDeparture] = useState(""); - const [localDestination, setLocalDestination] = useState(""); - // 옵션 로드 + // formData에서 직접 읽기 — 이중 상태 없음 + const currentDeparture = safeFormData[departureField] || ""; + const currentDestination = safeFormData[destinationField] || ""; + + // refs + const onFormDataChangeRef = useRef(onFormDataChange); + onFormDataChangeRef.current = onFormDataChange; + const mountedRef = useRef(true); useEffect(() => { + mountedRef.current = true; + return () => { mountedRef.current = false; }; + }, []); + + // --- 옵션 로드 --- + const dataSourceKey = useMemo(() => JSON.stringify(dataSource), [dataSource]); + + useEffect(() => { + let cancelled = false; + const loadOptions = async () => { - console.log("[LocationSwapSelector] 옵션 로드 시작:", { dataSource, isDesignMode }); - - // 정적 옵션 처리 (기본값) - // type이 없거나 static이거나, table인데 tableName이 없는 경우 - const shouldUseStatic = - !dataSource.type || - dataSource.type === "static" || + const shouldUseStatic = + !dataSource.type || + dataSource.type === "static" || (dataSource.type === "table" && !dataSource.tableName) || (dataSource.type === "code" && !dataSource.codeCategory); - + if (shouldUseStatic) { const staticOpts = dataSource.staticOptions || []; - // 정적 옵션이 설정되어 있고, value가 유효한 경우 사용 - // (value가 필드명과 같으면 잘못 설정된 것이므로 기본값 사용) - const isValidOptions = staticOpts.length > 0 && - staticOpts[0]?.value && - staticOpts[0].value !== departureField && + const isValid = staticOpts.length > 0 && + staticOpts[0]?.value && + staticOpts[0].value !== departureField && staticOpts[0].value !== destinationField; - - if (isValidOptions) { - console.log("[LocationSwapSelector] 정적 옵션 사용:", staticOpts); - setOptions(staticOpts); - } else { - // 기본값 (포항/광양) - console.log("[LocationSwapSelector] 기본 옵션 사용 (잘못된 설정 감지):", { staticOpts, DEFAULT_OPTIONS }); - setOptions(DEFAULT_OPTIONS); - } + if (!cancelled) setOptions(isValid ? staticOpts : DEFAULT_OPTIONS); return; } if (dataSource.type === "code" && dataSource.codeCategory) { - // 코드 관리에서 가져오기 - setLoading(true); + if (!cancelled) setLoading(true); try { const response = await apiClient.get(`/code-management/codes`, { params: { categoryCode: dataSource.codeCategory }, }); - if (response.data.success && response.data.data) { - const codeOptions = response.data.data.map((code: any) => ({ + if (!cancelled && response.data.success && response.data.data) { + setOptions(response.data.data.map((code: any) => ({ value: code.code_value || code.codeValue || code.code, label: code.code_name || code.codeName || code.name, - })); - setOptions(codeOptions); + }))); } } catch (error) { console.error("코드 로드 실패:", error); } finally { - setLoading(false); + if (!cancelled) setLoading(false); } return; } if (dataSource.type === "table" && dataSource.tableName) { - // 테이블에서 가져오기 - setLoading(true); + if (!cancelled) setLoading(true); try { const response = await apiClient.get(`/dynamic-form/list/${dataSource.tableName}`, { params: { page: 1, pageSize: 1000 }, }); - if (response.data.success && response.data.data) { - // data가 배열인지 또는 data.rows인지 확인 - const rows = Array.isArray(response.data.data) - ? response.data.data + if (!cancelled && response.data.success && response.data.data) { + const rows = Array.isArray(response.data.data) + ? response.data.data : response.data.data.rows || []; - const tableOptions = rows.map((row: any) => ({ + setOptions(rows.map((row: any) => ({ value: String(row[dataSource.valueField || "id"] || ""), label: String(row[dataSource.labelField || "name"] || ""), - })); - setOptions(tableOptions); + }))); } } catch (error) { console.error("테이블 데이터 로드 실패:", error); } finally { - setLoading(false); + if (!cancelled) setLoading(false); } } }; loadOptions(); - }, [dataSource, isDesignMode]); + return () => { cancelled = true; }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dataSourceKey, isDesignMode]); - // 🆕 DB에서 초기값 로드 (새로고침 시에도 출발지/목적지 유지) + // --- DB 초기값 로드 (모듈 캐시로 1회 보장) --- useEffect(() => { - const loadFromDatabase = async () => { - // 디자인 모드이거나, DB 로드 비활성화이거나, userId가 없으면 스킵 - if (isDesignMode || !loadFromDb || !userId) { - console.log("[LocationSwapSelector] DB 로드 스킵:", { isDesignMode, loadFromDb, userId }); - return; - } + if (isDesignMode || !loadFromDb || !userId || options.length === 0) return; - // 이미 로드했으면 스킵 - if (dbLoaded) { - return; - } + const cacheKey = `${dbTableName}:${dbKeyField}:${userId}`; - try { - console.log("[LocationSwapSelector] DB에서 출발지/목적지 로드 시작:", { dbTableName, dbKeyField, userId }); - - const response = await apiClient.post( - `/table-management/tables/${dbTableName}/data`, - { - page: 1, - size: 1, - search: { [dbKeyField]: userId }, - autoFilter: true, - } - ); - - const vehicleData = response.data?.data?.data?.[0] || response.data?.data?.rows?.[0]; - - if (vehicleData) { - const dbDeparture = vehicleData[departureField] || vehicleData.departure; - const dbDestination = vehicleData[destinationField] || vehicleData.arrival || vehicleData.destination; - - console.log("[LocationSwapSelector] DB에서 로드된 값:", { dbDeparture, dbDestination }); - - // DB에 값이 있으면 로컬 상태 및 formData 업데이트 - if (dbDeparture && options.some(o => o.value === dbDeparture)) { - setLocalDeparture(dbDeparture); - onFormDataChange?.(departureField, dbDeparture); - - // 라벨도 업데이트 - if (departureLabelField) { - const opt = options.find(o => o.value === dbDeparture); - if (opt) { - onFormDataChange?.(departureLabelField, opt.label); - } - } - } - - if (dbDestination && options.some(o => o.value === dbDestination)) { - setLocalDestination(dbDestination); - onFormDataChange?.(destinationField, dbDestination); - - // 라벨도 업데이트 - if (destinationLabelField) { - const opt = options.find(o => o.value === dbDestination); - if (opt) { - onFormDataChange?.(destinationLabelField, opt.label); - } - } + // 이미 로드 시도함 + if (dbLoadCache.has(cacheKey)) { + const cached = dbLoadCache.get(cacheKey); + if (cached) { + const cb = onFormDataChangeRef.current; + if (cached.departure && options.some(o => o.value === cached.departure)) { + cb?.(departureField, cached.departure); + if (departureLabelField) { + const opt = options.find(o => o.value === cached.departure); + if (opt) cb?.(departureLabelField, opt.label); + } + } + if (cached.destination && options.some(o => o.value === cached.destination)) { + cb?.(destinationField, cached.destination); + if (destinationLabelField) { + const opt = options.find(o => o.value === cached.destination); + if (opt) cb?.(destinationLabelField, opt.label); } } - - setDbLoaded(true); - } catch (error) { - console.error("[LocationSwapSelector] DB 로드 실패:", error); - setDbLoaded(true); // 실패해도 다시 시도하지 않음 } - }; - - // 옵션이 로드된 후에 DB 로드 실행 - if (options.length > 0) { - loadFromDatabase(); - } - }, [userId, loadFromDb, dbTableName, dbKeyField, departureField, destinationField, options, isDesignMode, dbLoaded, onFormDataChange, departureLabelField, destinationLabelField]); - - // formData에서 초기값 동기화 (DB 로드 후에도 formData 변경 시 반영) - useEffect(() => { - // DB 로드가 완료되지 않았으면 스킵 (DB 값 우선) - if (loadFromDb && userId && !dbLoaded) { return; } - const depVal = formData[departureField]; - const destVal = formData[destinationField]; - - if (depVal && options.some(o => o.value === depVal)) { - setLocalDeparture(depVal); - } - if (destVal && options.some(o => o.value === destVal)) { - setLocalDestination(destVal); - } - }, [formData, departureField, destinationField, options, loadFromDb, userId, dbLoaded]); + // 로드 시작 전 캐시에 null 마킹 (중복 방지) + dbLoadCache.set(cacheKey, null); - // 출발지 변경 + const loadFromDatabase = async () => { + try { + const response = await apiClient.post( + `/table-management/tables/${dbTableName}/data`, + { page: 1, size: 1, search: { [dbKeyField]: userId }, autoFilter: true } + ); + + const vehicleData = response.data?.data?.data?.[0] || response.data?.data?.rows?.[0]; + if (!vehicleData) return; + + const dbDeparture = vehicleData[departureField] || vehicleData.departure || ""; + const dbDestination = vehicleData[destinationField] || vehicleData.arrival || vehicleData.destination || ""; + + // 캐시 저장 + dbLoadCache.set(cacheKey, { departure: dbDeparture, destination: dbDestination }); + + if (!mountedRef.current) return; + const cb = onFormDataChangeRef.current; + if (dbDeparture && options.some(o => o.value === dbDeparture)) { + cb?.(departureField, dbDeparture); + if (departureLabelField) { + const opt = options.find(o => o.value === dbDeparture); + if (opt) cb?.(departureLabelField, opt.label); + } + } + if (dbDestination && options.some(o => o.value === dbDestination)) { + cb?.(destinationField, dbDestination); + if (destinationLabelField) { + const opt = options.find(o => o.value === dbDestination); + if (opt) cb?.(destinationLabelField, opt.label); + } + } + } catch (error) { + console.error("[LocationSwapSelector] DB 로드 실패:", error); + } + }; + + loadFromDatabase(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [userId, options.length]); + + // --- 이벤트 핸들러 --- const handleDepartureChange = (selectedValue: string) => { - console.log("[LocationSwapSelector] 출발지 변경:", { - selectedValue, - departureField, - hasOnFormDataChange: !!onFormDataChange, - options - }); - - // 로컬 상태 업데이트 - setLocalDeparture(selectedValue); - - // 부모에게 전달 - if (onFormDataChange) { - console.log(`[LocationSwapSelector] onFormDataChange 호출: ${departureField} = ${selectedValue}`); - onFormDataChange(departureField, selectedValue); - // 라벨 필드도 업데이트 - if (departureLabelField) { - const selectedOption = options.find((opt) => opt.value === selectedValue); - if (selectedOption) { - console.log(`[LocationSwapSelector] onFormDataChange 호출: ${departureLabelField} = ${selectedOption.label}`); - onFormDataChange(departureLabelField, selectedOption.label); - } - } - } else { - console.warn("[LocationSwapSelector] ⚠️ onFormDataChange가 없습니다!"); + if (!onFormDataChange || selectedValue === currentDeparture) return; + onFormDataChange(departureField, selectedValue); + if (departureLabelField) { + const opt = options.find(o => o.value === selectedValue); + if (opt) onFormDataChange(departureLabelField, opt.label); } }; - // 도착지 변경 const handleDestinationChange = (selectedValue: string) => { - console.log("[LocationSwapSelector] 도착지 변경:", { - selectedValue, - destinationField, - hasOnFormDataChange: !!onFormDataChange, - options - }); - - // 로컬 상태 업데이트 - setLocalDestination(selectedValue); - - // 부모에게 전달 - if (onFormDataChange) { - console.log(`[LocationSwapSelector] onFormDataChange 호출: ${destinationField} = ${selectedValue}`); - onFormDataChange(destinationField, selectedValue); - // 라벨 필드도 업데이트 - if (destinationLabelField) { - const selectedOption = options.find((opt) => opt.value === selectedValue); - if (selectedOption) { - console.log(`[LocationSwapSelector] onFormDataChange 호출: ${destinationLabelField} = ${selectedOption.label}`); - onFormDataChange(destinationLabelField, selectedOption.label); - } - } - } else { - console.warn("[LocationSwapSelector] ⚠️ onFormDataChange가 없습니다!"); + if (!onFormDataChange || selectedValue === currentDestination) return; + onFormDataChange(destinationField, selectedValue); + if (destinationLabelField) { + const opt = options.find(o => o.value === selectedValue); + if (opt) onFormDataChange(destinationLabelField, opt.label); } }; - // 출발지/도착지 교환 const handleSwap = () => { + if (!onFormDataChange) return; setIsSwapping(true); - - // 로컬 상태 교환 - const tempDeparture = localDeparture; - const tempDestination = localDestination; - - setLocalDeparture(tempDestination); - setLocalDestination(tempDeparture); - - // 부모에게 전달 - if (onFormDataChange) { - onFormDataChange(departureField, tempDestination); - onFormDataChange(destinationField, tempDeparture); - - // 라벨도 교환 - if (departureLabelField && destinationLabelField) { - const depOption = options.find(o => o.value === tempDestination); - const destOption = options.find(o => o.value === tempDeparture); - onFormDataChange(departureLabelField, depOption?.label || ""); - onFormDataChange(destinationLabelField, destOption?.label || ""); - } + onFormDataChange(departureField, currentDestination); + onFormDataChange(destinationField, currentDeparture); + if (departureLabelField && destinationLabelField) { + const depOpt = options.find(o => o.value === currentDestination); + const destOpt = options.find(o => o.value === currentDeparture); + onFormDataChange(departureLabelField, depOpt?.label || ""); + onFormDataChange(destinationLabelField, destOpt?.label || ""); } - - // 애니메이션 효과 setTimeout(() => setIsSwapping(false), 300); }; - // 스타일에서 width, height 추출 const { width, height, ...restStyle } = style || {}; + const depLabel = options.find(o => o.value === currentDeparture)?.label || ""; + const destLabel = options.find(o => o.value === currentDestination)?.label || ""; - // 선택된 라벨 가져오기 - const getDepartureLabel = () => { - const opt = options.find(o => o.value === localDeparture); - return opt?.label || ""; - }; - - const getDestinationLabel = () => { - const opt = options.find(o => o.value === localDestination); - return opt?.label || ""; - }; + // Select에 전달할 값 — 빈 문자열이면 undefined (uncontrolled) + const selectDepValue = currentDeparture || undefined; + const selectDestValue = currentDestination || undefined; - // 디버그 로그 - console.log("[LocationSwapSelector] 렌더:", { - localDeparture, - localDestination, - options: options.map(o => `${o.value}:${o.label}`), - }); - - // Card 스타일 (이미지 참고) if (variant === "card") { return ( -
+
- {/* 출발지 */}
{departureLabel} - - {localDeparture ? ( - {getDepartureLabel()} - ) : ( - 선택 - )} + {currentDeparture + ? {depLabel} + : 선택} {options.map((option) => ( - - {option.label} - {option.value === localDestination && " (도착지)"} + + {option.label}{option.value === currentDestination && " (도착지)"} ))}
- {/* 교환 버튼 */} {showSwapButton && ( - )} - {/* 도착지 */}
{destinationLabel} - - {localDestination ? ( - {getDestinationLabel()} - ) : ( - 선택 - )} + {currentDestination + ? {destLabel} + : 선택} {options.map((option) => ( - - {option.label} - {option.value === localDeparture && " (출발지)"} + + {option.label}{option.value === currentDeparture && " (출발지)"} ))} @@ -504,70 +359,39 @@ export function LocationSwapSelectorComponent(props: LocationSwapSelectorProps) ); } - // Inline 스타일 if (variant === "inline") { return ( -
+
- - {localDeparture ? getDepartureLabel() : 선택} + {currentDeparture ? depLabel : 선택} {options.map((option) => ( - - {option.label} - {option.value === localDestination && " (도착지)"} + + {option.label}{option.value === currentDestination && " (도착지)"} ))}
- {showSwapButton && ( - )} -
- - {localDestination ? getDestinationLabel() : 선택} + {currentDestination ? destLabel : 선택} {options.map((option) => ( - - {option.label} - {option.value === localDeparture && " (출발지)"} + + {option.label}{option.value === currentDeparture && " (출발지)"} ))} @@ -577,64 +401,33 @@ export function LocationSwapSelectorComponent(props: LocationSwapSelectorProps) ); } - // Minimal 스타일 return ( -
- - {localDeparture ? getDepartureLabel() : {departureLabel}} + {currentDeparture ? depLabel : {departureLabel}} {options.map((option) => ( - - {option.label} - {option.value === localDestination && " (도착지)"} + + {option.label}{option.value === currentDestination && " (도착지)"} ))} - {showSwapButton && ( - )} - - - {localDestination ? getDestinationLabel() : {destinationLabel}} + {currentDestination ? destLabel : {destinationLabel}} {options.map((option) => ( - - {option.label} - {option.value === localDeparture && " (출발지)"} + + {option.label}{option.value === currentDeparture && " (출발지)"} ))} @@ -642,4 +435,3 @@ export function LocationSwapSelectorComponent(props: LocationSwapSelectorProps)
); } - diff --git a/frontend/lib/registry/components/v2-location-swap-selector/LocationSwapSelectorRenderer.tsx b/frontend/lib/registry/components/v2-location-swap-selector/LocationSwapSelectorRenderer.tsx index 64d99d6f..8ce0b9f0 100644 --- a/frontend/lib/registry/components/v2-location-swap-selector/LocationSwapSelectorRenderer.tsx +++ b/frontend/lib/registry/components/v2-location-swap-selector/LocationSwapSelectorRenderer.tsx @@ -12,17 +12,10 @@ export class LocationSwapSelectorRenderer extends AutoRegisteringComponentRender static componentDefinition = V2LocationSwapSelectorDefinition; render(): React.ReactElement { - const { component, formData, onFormDataChange, isDesignMode, style, ...restProps } = this.props; - - // component.componentConfig에서 설정 가져오기 + const { component, formData, onFormDataChange, isDesignMode, style, userId } = this.props; + const componentConfig = component?.componentConfig || {}; - - console.log("[LocationSwapSelectorRenderer] render:", { - componentConfig, - formData, - isDesignMode - }); - + return ( ); } diff --git a/frontend/next.config.mjs b/frontend/next.config.mjs index efc0aa7d..a528facf 100644 --- a/frontend/next.config.mjs +++ b/frontend/next.config.mjs @@ -1,5 +1,8 @@ /** @type {import('next').NextConfig} */ const nextConfig = { + // Leaflet 등 DOM 직접 조작 라이브러리와 Strict Mode 충돌 방지 + reactStrictMode: false, + // Docker 빌드 최적화 output: "standalone", @@ -22,7 +25,7 @@ const nextConfig = { // API 프록시 설정 - 백엔드로 요청 전달 // Docker: SERVER_API_URL 사용. 로컬: 127.0.0.1 사용 (localhost는 IPv6 ::1 로 해석되어 ECONNREFUSED 나는 경우 있음) async rewrites() { - const backendUrl = process.env.SERVER_API_URL || "http://127.0.0.1:8080"; + const backendUrl = process.env.SERVER_API_URL || "http://127.0.0.1:8081"; return [ { source: "/api/:path*", diff --git a/scripts/dev/start-all-parallel.bat b/scripts/dev/start-all-parallel.bat index 08049b48..09357b20 100644 --- a/scripts/dev/start-all-parallel.bat +++ b/scripts/dev/start-all-parallel.bat @@ -96,7 +96,7 @@ echo [완료] 모든 서비스가 시작되었습니다! echo ============================================ echo. echo [DATABASE] PostgreSQL: http://39.117.244.52:11132 -echo [BACKEND] Node.js API: http://localhost:8080/api +echo [BACKEND] Spring Boot API: http://localhost:8081/api echo [FRONTEND] Next.js: http://localhost:9771 echo. echo [서비스 상태 확인] diff --git a/scripts/dev/start-all-parallel.ps1 b/scripts/dev/start-all-parallel.ps1 index 732106c6..5d381fde 100644 --- a/scripts/dev/start-all-parallel.ps1 +++ b/scripts/dev/start-all-parallel.ps1 @@ -151,7 +151,7 @@ Write-Host "[완료] 모든 서비스가 시작되었습니다!" -ForegroundColo Write-Host "============================================" -ForegroundColor Cyan Write-Host "" Write-Host "[DATABASE] PostgreSQL: http://39.117.244.52:11132" -ForegroundColor White -Write-Host "[BACKEND] Node.js API: http://localhost:8080/api" -ForegroundColor White +Write-Host "[BACKEND] Spring Boot API: http://localhost:8081/api" -ForegroundColor White Write-Host "[FRONTEND] Next.js: http://localhost:9771" -ForegroundColor White Write-Host "" Write-Host "[서비스 상태 확인]" -ForegroundColor Yellow diff --git a/scripts/dev/start-all-parallel.sh b/scripts/dev/start-all-parallel.sh index 3f8f0ddc..465e47cf 100755 --- a/scripts/dev/start-all-parallel.sh +++ b/scripts/dev/start-all-parallel.sh @@ -7,10 +7,10 @@ START_TIME_FORMATTED=$(date '+%Y-%m-%d %H:%M:%S') echo "============================================" echo "WACE 솔루션 - 전체 서비스 시작 (병렬 최적화)" echo "============================================" -echo "🕐 시작 시간: $START_TIME_FORMATTED" +echo "시작 시간: $START_TIME_FORMATTED" echo "" -echo "🚀 백엔드와 프론트엔드를 병렬로 빌드 및 시작합니다..." +echo "백엔드(Spring Boot)와 프론트엔드를 병렬로 빌드 및 시작합니다..." echo "" # 기존 컨테이너 강제 삭제 (이름 충돌 방지) @@ -29,29 +29,29 @@ echo "1. 병렬 빌드 시작 (백엔드 + 프론트엔드)" echo "============================================" # 백엔드 빌드 (백그라운드) -echo "🔧 백엔드 빌드 시작..." +echo "백엔드(Spring Boot) 빌드 시작..." ( docker-compose -f docker/dev/docker-compose.backend.mac.yml build - echo "✅ 백엔드 빌드 완료" + echo "백엔드 빌드 완료" ) & BACKEND_PID=$! -# 프론트엔드 빌드 (백그라운드) -echo "🔧 프론트엔드 빌드 시작..." +# 프론트엔드 빌드 (백그라운드) +echo "프론트엔드 빌드 시작..." ( docker-compose -f docker/dev/docker-compose.frontend.mac.yml build - echo "✅ 프론트엔드 빌드 완료" + echo "프론트엔드 빌드 완료" ) & FRONTEND_PID=$! # 두 빌드가 모두 완료될 때까지 대기 -echo "⏳ 병렬 빌드 진행 중..." +echo "병렬 빌드 진행 중..." wait $BACKEND_PID wait $FRONTEND_PID PARALLEL_END=$(date +%s) PARALLEL_DURATION=$((PARALLEL_END - PARALLEL_START)) -echo "✅ 병렬 빌드 완료 (${PARALLEL_DURATION}초 소요)" +echo "병렬 빌드 완료 (${PARALLEL_DURATION}초 소요)" # 서비스 시작 echo "" @@ -66,12 +66,12 @@ docker-compose -f docker/dev/docker-compose.backend.mac.yml down -v 2>/dev/null docker-compose -f docker/dev/docker-compose.frontend.mac.yml down -v 2>/dev/null # 백엔드 시작 (백그라운드) -echo "🚀 백엔드 서비스 시작..." +echo "백엔드(Spring Boot) 서비스 시작..." docker-compose -f docker/dev/docker-compose.backend.mac.yml up -d & BACKEND_START_PID=$! # 프론트엔드 시작 (백그라운드) -echo "🚀 프론트엔드 서비스 시작..." +echo "프론트엔드 서비스 시작..." docker-compose -f docker/dev/docker-compose.frontend.mac.yml up -d & FRONTEND_START_PID=$! @@ -80,21 +80,21 @@ wait $BACKEND_START_PID wait $FRONTEND_START_PID echo "" -echo "⏳ 서비스 안정화 대기 중... (8초)" -sleep 8 +echo "서비스 안정화 대기 중... (15초)" +sleep 15 SERVICE_END=$(date +%s) SERVICE_DURATION=$((SERVICE_END - SERVICE_START)) -echo "✅ 서비스 시작 완료 (${SERVICE_DURATION}초 소요)" +echo "서비스 시작 완료 (${SERVICE_DURATION}초 소요)" echo "" echo "============================================" -echo "🎉 모든 서비스가 시작되었습니다!" +echo "모든 서비스가 시작되었습니다!" echo "============================================" echo "" echo "[DATABASE] PostgreSQL: http://39.117.244.52:11132" -echo "[BACKEND] Node.js API: http://localhost:8080/api" -echo "[FRONTEND] Next.js: http://localhost:9771" +echo "[BACKEND] Spring Boot API: http://localhost:8081/api" +echo "[FRONTEND] Next.js: http://localhost:9771" echo "" echo "서비스 상태 확인:" echo " 백엔드: docker-compose -f docker/dev/docker-compose.backend.mac.yml ps" @@ -107,7 +107,6 @@ echo "" echo "서비스 중지:" echo " 백엔드: docker-compose -f docker/dev/docker-compose.backend.mac.yml down" echo " 프론트엔드: docker-compose -f docker/dev/docker-compose.frontend.mac.yml down" -echo " 전체: ./stop-all.sh" echo "" echo "============================================" @@ -118,12 +117,12 @@ DURATION=$((END_TIME - START_TIME)) MINUTES=$((DURATION / 60)) SECONDS=$((DURATION % 60)) -echo "🕐 종료 시간: $END_TIME_FORMATTED" -echo "⏱️ 총 소요 시간: ${MINUTES}분 ${SECONDS}초" +echo "종료 시간: $END_TIME_FORMATTED" +echo "총 소요 시간: ${MINUTES}분 ${SECONDS}초" echo "" -echo "📊 단계별 소요 시간:" -echo " • 병렬 빌드: ${PARALLEL_DURATION}초" -echo " • 서비스 시작: ${SERVICE_DURATION}초" +echo "단계별 소요 시간:" +echo " 병렬 빌드: ${PARALLEL_DURATION}초" +echo " 서비스 시작: ${SERVICE_DURATION}초" echo "============================================" read -p "계속하려면 아무 키나 누르세요..." diff --git a/scripts/dev/start-backend.sh b/scripts/dev/start-backend.sh index 15495268..0e22e6aa 100755 --- a/scripts/dev/start-backend.sh +++ b/scripts/dev/start-backend.sh @@ -1,7 +1,7 @@ #!/bin/bash echo "============================================" -echo "WACE 솔루션 - 백엔드 (Node.js) 시작" +echo "WACE 솔루션 - 백엔드 (Spring Boot) 시작" echo "============================================" echo "" @@ -30,7 +30,7 @@ echo "백엔드 서비스가 시작되었습니다!" echo "============================================" echo "" echo "[DATABASE] PostgreSQL: http://39.117.244.52:11132" -echo "[BACKEND] Node.js API: http://localhost:8080/api" +echo "[BACKEND] Spring Boot API: http://localhost:8081/api" echo "" echo "상태 확인: docker-compose -f docker/dev/docker-compose.backend.mac.yml ps" echo "로그 확인: docker-compose -f docker/dev/docker-compose.backend.mac.yml logs -f" diff --git a/scripts/dev/start-npm.sh b/scripts/dev/start-npm.sh index 7b7fc54a..085b0543 100755 --- a/scripts/dev/start-npm.sh +++ b/scripts/dev/start-npm.sh @@ -1,7 +1,7 @@ #!/bin/bash echo "============================================" -echo "WACE 솔루션 - npm 직접 실행 (Docker 없이)" +echo "WACE 솔루션 - 직접 실행 (Docker 없이)" echo "============================================" echo "" @@ -14,20 +14,20 @@ FRONTEND_LOG="$LOG_DIR/frontend.log" # 기존 프로세스 정리 echo "[1/4] 기존 프로세스 정리 중..." -lsof -ti:8080 | xargs kill -9 2>/dev/null +lsof -ti:8081 | xargs kill -9 2>/dev/null lsof -ti:9771 | xargs kill -9 2>/dev/null echo " 완료" echo "" -# 백엔드 npm install + 실행 -echo "[2/4] 백엔드 의존성 설치 중..." -cd "$PROJECT_ROOT/backend-node" -npm install --silent +# 백엔드 빌드 + 실행 (Spring Boot) +echo "[2/4] 백엔드(Spring Boot) 빌드 중..." +cd "$PROJECT_ROOT/backend-spring" +./gradlew bootJar --no-daemon -q echo " 완료" echo "" -echo "[3/4] 백엔드 서버 시작 중 (포트 8080)..." -npm run dev > "$BACKEND_LOG" 2>&1 & +echo "[3/4] 백엔드 서버 시작 중 (포트 8081)..." +java -jar build/libs/*.jar > "$BACKEND_LOG" 2>&1 & BACKEND_PID=$! echo " PID: $BACKEND_PID" echo "" @@ -41,13 +41,13 @@ FRONTEND_PID=$! echo " PID: $FRONTEND_PID" echo "" -sleep 3 +sleep 5 echo "============================================" echo "모든 서비스가 시작되었습니다!" echo "============================================" echo "" -echo " [BACKEND] http://localhost:8080/api" +echo " [BACKEND] http://localhost:8081/api" echo " [FRONTEND] http://localhost:9771" echo "" echo " 백엔드 PID: $BACKEND_PID" diff --git a/scripts/prod/fix-backend-permissions.sh b/scripts/prod/fix-backend-permissions.sh index 16a661ea..44f90e91 100755 --- a/scripts/prod/fix-backend-permissions.sh +++ b/scripts/prod/fix-backend-permissions.sh @@ -49,7 +49,7 @@ docker-compose -f docker/prod/docker-compose.backend.prod.yml logs --tail=15 echo "" echo "7. 헬스체크 수행 중..." for i in {1..10}; do - if curl -s http://localhost:8080/health >/dev/null 2>&1; then + if curl -s http://localhost:8081/health >/dev/null 2>&1; then echo " ✅ 백엔드 서비스 정상 복구!" echo "" echo "🎉 수정 완료! 백엔드가 정상적으로 실행 중입니다." diff --git a/scripts/prod/start-all-linux.sh b/scripts/prod/start-all-linux.sh index e681d566..267aecdb 100644 --- a/scripts/prod/start-all-linux.sh +++ b/scripts/prod/start-all-linux.sh @@ -5,14 +5,14 @@ echo "WACE 솔루션 - 전체 서비스 시작 (분리형) - Linux" echo "============================================" echo "" -echo "🔄 최신 코드 가져오기..." +echo "최신 코드 가져오기..." echo "" git pull origin main || { - echo "❌ Git pull 실패. 계속 진행합니다..." + echo "Git pull 실패. 계속 진행합니다..." } echo "" -echo "🚀 백엔드와 프론트엔드를 순차적으로 시작합니다..." +echo "백엔드(Spring Boot)와 프론트엔드를 순차적으로 시작합니다..." echo "" # 시스템 정보 출력 @@ -24,8 +24,8 @@ echo "" # Docker 및 Docker Compose 버전 확인 echo "Docker 환경 확인:" -docker --version 2>/dev/null || echo " ❌ Docker가 설치되지 않았습니다." -docker-compose --version 2>/dev/null || echo " ❌ Docker Compose가 설치되지 않았습니다." +docker --version 2>/dev/null || echo " Docker가 설치되지 않았습니다." +docker-compose --version 2>/dev/null || echo " Docker Compose가 설치되지 않았습니다." echo "" # 기존 컨테이너 정리 @@ -33,24 +33,21 @@ echo "============================================" echo "0. 기존 서비스 정리 중..." echo "============================================" -# 기존 컨테이너 중지 및 제거 (무시하고 계속) docker-compose -f docker/prod/docker-compose.backend.prod.yml down -v 2>/dev/null || true docker-compose -f docker/prod/docker-compose.frontend.prod.yml down -v 2>/dev/null || true -# 사용하지 않는 이미지 정리 echo "사용하지 않는 Docker 이미지 정리 중..." docker image prune -f 2>/dev/null || true # 백엔드 먼저 시작 echo "" echo "============================================" -echo "1. 백엔드 서비스 시작 중..." +echo "1. 백엔드(Spring Boot) 서비스 시작 중..." echo "============================================" # 네트워크 생성 (존재하지 않는 경우) docker network create pms-network 2>/dev/null || echo "네트워크가 이미 존재합니다." -# 백엔드 빌드 및 시작 echo "백엔드 이미지 빌드 중..." docker-compose -f docker/prod/docker-compose.backend.prod.yml build --no-cache @@ -58,8 +55,8 @@ echo "백엔드 서비스 시작 중..." docker-compose -f docker/prod/docker-compose.backend.prod.yml up -d echo "" -echo "⏳ 백엔드 서비스 안정화 대기 중... (30초)" -sleep 30 +echo "백엔드(Spring Boot) 서비스 안정화 대기 중... (45초)" +sleep 45 # 백엔드 상태 확인 echo "백엔드 서비스 상태 확인:" @@ -78,7 +75,7 @@ echo "프론트엔드 서비스 시작 중..." docker-compose -f docker/prod/docker-compose.frontend.prod.yml up -d echo "" -echo "⏳ 프론트엔드 서비스 안정화 대기 중... (15초)" +echo "프론트엔드 서비스 안정화 대기 중... (15초)" sleep 15 # 프론트엔드 상태 확인 @@ -87,15 +84,15 @@ docker-compose -f docker/prod/docker-compose.frontend.prod.yml ps echo "" echo "============================================" -echo "🎉 모든 서비스가 시작되었습니다!" +echo "모든 서비스가 시작되었습니다!" echo "============================================" echo "" -echo "📊 서비스 접속 정보:" +echo "서비스 접속 정보:" echo " [DATABASE] PostgreSQL: http://39.117.244.52:11132" -echo " [BACKEND] Spring Boot: http://localhost:8080/api" +echo " [BACKEND] Spring Boot: http://localhost:8081/api" echo " [FRONTEND] Next.js: http://localhost:5555" echo "" -echo "🔧 관리 명령어:" +echo "관리 명령어:" echo " 서비스 상태 확인:" echo " 백엔드: docker-compose -f docker/prod/docker-compose.backend.prod.yml ps" echo " 프론트엔드: docker-compose -f docker/prod/docker-compose.frontend.prod.yml ps" @@ -104,38 +101,32 @@ echo "" echo " 로그 확인:" echo " 백엔드: docker-compose -f docker/prod/docker-compose.backend.prod.yml logs -f" echo " 프론트엔드: docker-compose -f docker/prod/docker-compose.frontend.prod.yml logs -f" -echo " 실시간: docker-compose -f docker/prod/docker-compose.backend.prod.yml -f docker-compose.frontend.linux.yml logs -f" echo "" echo " 서비스 중지:" echo " 백엔드: docker-compose -f docker/prod/docker-compose.backend.prod.yml down" echo " 프론트엔드: docker-compose -f docker/prod/docker-compose.frontend.prod.yml down" -echo " 전체: ./stop-all-linux.sh" -echo "" -echo " 시스템 모니터링:" -echo " Docker 상태: docker system df" -echo " 리소스 사용: docker stats" echo "" echo "============================================" # 서비스 헬스체크 echo "" -echo "🏥 서비스 헬스체크 수행 중..." +echo "서비스 헬스체크 수행 중..." echo "" -# 백엔드 헬스체크 (최대 60초 대기) +# 백엔드 헬스체크 (최대 90초 대기 - Spring Boot는 시작이 느림) echo "백엔드 헬스체크..." backend_healthy=false -for i in {1..12}; do - if curl -s http://localhost:8080/health >/dev/null 2>&1; then - echo " ✅ 백엔드 서비스 정상" +for i in {1..18}; do + if curl -s http://localhost:8081/health >/dev/null 2>&1; then + echo " 백엔드 서비스 정상" backend_healthy=true break else - echo " ⏳ 백엔드 응답 대기 중... ($i/12)" - if [ $i -eq 6 ]; then - echo " 📋 백엔드 컨테이너 상태 확인:" + echo " 백엔드 응답 대기 중... ($i/18)" + if [ $i -eq 9 ]; then + echo " 백엔드 컨테이너 상태 확인:" docker-compose -f docker/prod/docker-compose.backend.prod.yml ps - echo " 📋 백엔드 로그 (최근 10줄):" + echo " 백엔드 로그 (최근 10줄):" docker-compose -f docker/prod/docker-compose.backend.prod.yml logs --tail=10 fi sleep 5 @@ -143,30 +134,30 @@ for i in {1..12}; do done if [ "$backend_healthy" = false ]; then - echo " ❌ 백엔드 헬스체크 실패" - echo " 📋 상세 진단 정보:" + echo " 백엔드 헬스체크 실패" + echo " 상세 진단 정보:" echo " 컨테이너 상태:" docker-compose -f docker/prod/docker-compose.backend.prod.yml ps echo " 최근 로그:" docker-compose -f docker/prod/docker-compose.backend.prod.yml logs --tail=20 - echo " 포트 8080 사용 현황:" - netstat -tln 2>/dev/null | grep ':8080' || echo " 포트 8080이 사용되지 않음" + echo " 포트 8081 사용 현황:" + netstat -tln 2>/dev/null | grep ':8081' || echo " 포트 8081이 사용되지 않음" fi # 프론트엔드 헬스체크 (최대 30초 대기) echo "프론트엔드 헬스체크..." for i in {1..6}; do if curl -s http://localhost:5555 >/dev/null 2>&1; then - echo " ✅ 프론트엔드 서비스 정상" + echo " 프론트엔드 서비스 정상" break else - echo " ⏳ 프론트엔드 응답 대기 중... ($i/6)" + echo " 프론트엔드 응답 대기 중... ($i/6)" sleep 5 fi done echo "" -echo "🎯 시작 완료! 브라우저에서 http://localhost:5555 을 확인하세요." +echo "시작 완료! 브라우저에서 http://localhost:5555 을 확인하세요." echo "" -read -p "계속하려면 Enter 키를 누르세요..." \ No newline at end of file +read -p "계속하려면 Enter 키를 누르세요..." diff --git a/scripts/test-option-settings-responsive.ts b/scripts/test-option-settings-responsive.ts index 98ba7351..5df46c4b 100644 --- a/scripts/test-option-settings-responsive.ts +++ b/scripts/test-option-settings-responsive.ts @@ -10,7 +10,7 @@ import * as path from "path"; import * as fs from "fs"; const BASE_URL = "http://localhost:9771"; -const API_URL = "http://localhost:8080/api"; +const API_URL = "http://localhost:8081/api"; const PAGE_URL = `${BASE_URL}/screens/1421`; const CREDENTIALS = [ { userId: "SUPER", password: "1234" }, diff --git a/scripts/test-responsive-split-panel.ts b/scripts/test-responsive-split-panel.ts index f2eac313..0f981527 100644 --- a/scripts/test-responsive-split-panel.ts +++ b/scripts/test-responsive-split-panel.ts @@ -11,7 +11,7 @@ import * as path from "path"; import * as fs from "fs"; const BASE_URL = "http://localhost:9771"; -const API_URL = "http://localhost:8080/api"; +const API_URL = "http://localhost:8081/api"; const TABLE_MNG_PATH = "/admin/systemMng/tableMngList"; const USER_ID = "wace"; const PASSWORD = "qlalfqjsgh11"; diff --git a/start-all-separated.bat b/start-all-separated.bat index 7c580aca..954f6d80 100644 --- a/start-all-separated.bat +++ b/start-all-separated.bat @@ -50,7 +50,7 @@ echo 🎉 모든 서비스가 시작되었습니다! echo ============================================ echo. echo [DATABASE] PostgreSQL: http://39.117.244.52:11132 -echo [BACKEND] Spring Boot: http://localhost:8080/api +echo [BACKEND] Spring Boot: http://localhost:8081/api echo [FRONTEND] Next.js: http://localhost:9771 echo. echo 서비스 상태 확인: diff --git a/start-windows-simple.bat b/start-windows-simple.bat index a5c96fa7..4e019be6 100644 --- a/start-windows-simple.bat +++ b/start-windows-simple.bat @@ -72,7 +72,7 @@ echo ============================================ echo. echo 📱 접속 정보: echo • 프론트엔드: http://localhost:9771 -echo • 백엔드 API: http://localhost:8080/api +echo • 백엔드 API: http://localhost:8081/api echo • 데이터베이스: 39.117.244.52:11132 echo. echo 📊 서비스 상태 확인: diff --git a/test-backend-build.bat b/test-backend-build.bat index dad4aaee..002c6835 100644 --- a/test-backend-build.bat +++ b/test-backend-build.bat @@ -33,7 +33,7 @@ if %errorlevel% equ 0 ( echo docker-compose -f docker-compose.backend.win.yml logs -f echo. echo 🌐 헬스체크: - echo http://localhost:8080/health + echo http://localhost:8081/health ) else ( echo ❌ 백엔드 시작 실패! echo 로그를 확인하세요: docker-compose -f docker-compose.backend.win.yml logs diff --git a/values_logistream.yaml b/values_logistream.yaml index 870d4448..f81ffbbc 100644 --- a/values_logistream.yaml +++ b/values_logistream.yaml @@ -11,8 +11,8 @@ image: service: type: ClusterIP - # 백엔드 포트 - backendPort: 8080 + # 백엔드 포트 (Spring Boot) + backendPort: 8081 # 프론트엔드 포트 (메인 서비스) port: 3000 @@ -41,8 +41,8 @@ resources: # 환경 변수 (필요시 추가) env: - - name: NODE_ENV - value: production + - name: SPRING_PROFILES_ACTIVE + value: prod - name: DATABASE_HOST value: postgres-service.apps.svc.cluster.local # Kubernetes 내부 서비스명 - name: DATABASE_PORT @@ -86,7 +86,7 @@ persistence: storageClass: nfs-client # NCP 환경에 맞게 수정 accessMode: ReadWriteOnce size: 10Gi - mountPath: /app/backend/uploads + mountPath: /app/uploads # 추가 설정 (필요시) nodeSelector: {}