diff --git a/batch-quartz/bin/src/main/resources/templates/pages/sign/sign-in.html b/batch-quartz/bin/src/main/resources/templates/pages/sign/sign-in.html index 1ad5ac4..8d1a989 100644 --- a/batch-quartz/bin/src/main/resources/templates/pages/sign/sign-in.html +++ b/batch-quartz/bin/src/main/resources/templates/pages/sign/sign-in.html @@ -3,7 +3,7 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layouts/signin-layout}" lang="ko" xml:lang="ko"> - 로그인 페이지 + Sign In
diff --git a/batch-quartz/src/main/java/com/spring/infra/quartz/QuartzConfig.java b/batch-quartz/src/main/java/com/spring/infra/quartz/QuartzConfig.java index fd7549c..74a7fef 100644 --- a/batch-quartz/src/main/java/com/spring/infra/quartz/QuartzConfig.java +++ b/batch-quartz/src/main/java/com/spring/infra/quartz/QuartzConfig.java @@ -77,7 +77,7 @@ public class QuartzConfig { factory.setDataSource(dataSource); factory.setTransactionManager(transactionManager); factory.setJobFactory(jobFactory); - factory.setAutoStartup(false); + factory.setAutoStartup(true); factory.setWaitForJobsToCompleteOnShutdown(true); return factory; } diff --git a/batch-quartz/src/main/resources/static/favicon.ico b/batch-quartz/src/main/resources/static/favicon.ico index 039dc7a..aef809c 100644 Binary files a/batch-quartz/src/main/resources/static/favicon.ico and b/batch-quartz/src/main/resources/static/favicon.ico differ diff --git a/batch-quartz/src/main/resources/static/js/apis/schedule-api.js b/batch-quartz/src/main/resources/static/js/apis/schedule-api.js index 586e6cf..fed5341 100644 --- a/batch-quartz/src/main/resources/static/js/apis/schedule-api.js +++ b/batch-quartz/src/main/resources/static/js/apis/schedule-api.js @@ -13,18 +13,18 @@ const scheduleService = { }, pauseJob: async (groupName, jobName) => { - const response = await apiClient.get(`/api/schedule/pause/${groupName}/${jobName}`); - return response.data.data; + await apiClient.get(`/api/schedule/pause/${groupName}/${jobName}`); + return true; }, resumeJob: async (groupName, jobName) => { - const response = await apiClient.get(`/api/schedule/resume/${groupName}/${jobName}`); - return response.data.data; + await apiClient.get(`/api/schedule/resume/${groupName}/${jobName}`); + return true; }, triggerJob: async (groupName, jobName) => { - const response = await apiClient.get(`/api/schedule/trigger/${groupName}/${jobName}`); - return response.data.data; + await apiClient.get(`/api/schedule/trigger/${groupName}/${jobName}`); + return true; }, rescheduleJob: async (jobGroup, jobName, cronExpression) => { diff --git a/batch-quartz/src/main/resources/static/js/pages/dashboard/dashboard.js b/batch-quartz/src/main/resources/static/js/pages/dashboard/dashboard.js index adb846a..9cd4ed6 100644 --- a/batch-quartz/src/main/resources/static/js/pages/dashboard/dashboard.js +++ b/batch-quartz/src/main/resources/static/js/pages/dashboard/dashboard.js @@ -6,6 +6,7 @@ let selectedMonth; document.addEventListener('DOMContentLoaded', () => { initMonthPicker(); fetchDataAndRender(); + setupEventListeners(); }); const initMonthPicker = () => { @@ -38,6 +39,12 @@ const fetchDataAndRender = async () => { renderRecentJobsTable(recentJobs); }; +const setupEventListeners = () => { + document.getElementById('refreshBtn').addEventListener('click', async (e) => { + fetchDataAndRender(); + }); +}; + const chartOptions = { responsive: true, maintainAspectRatio: false, diff --git a/batch-quartz/src/main/resources/static/js/pages/fragments/header.js b/batch-quartz/src/main/resources/static/js/pages/fragments/header.js index c775569..bef24a4 100644 --- a/batch-quartz/src/main/resources/static/js/pages/fragments/header.js +++ b/batch-quartz/src/main/resources/static/js/pages/fragments/header.js @@ -1,16 +1,17 @@ import signService from '../../apis/sign-api.js'; document.addEventListener('DOMContentLoaded', () => { - const signOutButton = document.getElementById('signOut'); - const toggleSidebar = document.getElementById('toggleSidebar'); + setupEventListeners(); +}); - signOutButton.addEventListener('click', (e) => { +const setupEventListeners = () => { + document.getElementById('signOut').addEventListener('click', (e) => { e.preventDefault(); signService.signOut(); }); - toggleSidebar.addEventListener('click', (e) => { + document.getElementById('toggleSidebar').addEventListener('click', () => { const body = document.body; body.classList.toggle("toggle-sidebar"); }); -}); +}; \ No newline at end of file diff --git a/batch-quartz/src/main/resources/static/js/pages/schedule/schedule.js b/batch-quartz/src/main/resources/static/js/pages/schedule/schedule.js index 8a3da92..4414a5a 100644 --- a/batch-quartz/src/main/resources/static/js/pages/schedule/schedule.js +++ b/batch-quartz/src/main/resources/static/js/pages/schedule/schedule.js @@ -12,7 +12,12 @@ const setupEventListeners = () => { e.preventDefault(); fetchDataAndRender(); }); - document.getElementById('refreshJobBtn').addEventListener('click', refreshJobs); + document.getElementById('refreshJobBtn').addEventListener('click', () => { + const confirmUpdate = confirm('스케줄 재적용 하시겠습니까?'); + if (confirmUpdate) { + refreshJobs(); + } + }); }; const fetchDataAndRender = async () => { @@ -99,16 +104,21 @@ const getStatusBadgeClass = (status) => { const setupDetailModalEventListeners = (group, name) => { document.getElementById('pauseJobBtn').onclick = () => updateJobStatus(group, name, 'PAUSED', scheduleService.pauseJob); document.getElementById('resumeJobBtn').onclick = () => updateJobStatus(group, name, 'NORMAL', scheduleService.resumeJob); - document.getElementById('updateCronBtn').onclick = () => updateCronExpression(group, name); + document.getElementById('updateCronBtn').onclick = () => { + const confirmUpdate = confirm('스케줄을 수정하시겠습니까?'); + if (confirmUpdate) { + updateCronExpression(group, name); + } + } }; const updateCronExpression = async (group, name) => { const newCronExpression = document.getElementById('cronExpression').value; if (await scheduleService.rescheduleJob(group, name, newCronExpression)) { - alert('스케쥴이 수정 되었습니다.'); + alert('스케줄이 수정 되었습니다.'); fetchDataAndRender(); } else { - alert('스케쥴 수정이 실패했습니다.'); + alert('스케줄 수정이 실패했습니다.'); } }; @@ -128,7 +138,8 @@ const updateJobControlButtons = (status) => { }; const updateJobStatus = async (group, name, newStatus, action) => { - if (await action(group, name)) { + const result = await action(group, name); + if (result) { const statusElement = document.querySelector('#scheduleDetailContent .badge'); statusElement.className = `badge ${getStatusBadgeClass(newStatus)}`; statusElement.textContent = newStatus; diff --git a/batch-quartz/src/main/resources/static/js/pages/user/user-management.js b/batch-quartz/src/main/resources/static/js/pages/user/user-management.js index 30cc616..60dd6de 100644 --- a/batch-quartz/src/main/resources/static/js/pages/user/user-management.js +++ b/batch-quartz/src/main/resources/static/js/pages/user/user-management.js @@ -6,6 +6,7 @@ let users = []; document.addEventListener('DOMContentLoaded', () => { fetchDataAndRender(); setupEventListeners(); + manageTooltips.init(); }); const setupEventListeners = () => { @@ -77,6 +78,7 @@ const updateUser = async () => { await userService.changeRoleApprove(getModifiedRows(users, updatedUsers, "id")); alert('회원정보가 수정 되었습니다.'); + manageTooltips.hideAll(); fetchDataAndRender(); }; @@ -84,4 +86,15 @@ const deleteUser = async (id) => { await userService.deleteUser(id); alert('사용자가 삭제되었습니다.'); fetchDataAndRender(); +}; + +const manageTooltips = { + init: () => { + document.querySelectorAll('[data-bs-toggle="tooltip"]') + .forEach(el => new bootstrap.Tooltip(el)); + }, + hideAll: () => { + const tooltip = bootstrap.Tooltip.getInstance('#updateUserBtn'); + setTimeout(() => tooltip.hide(), 100); + } }; \ No newline at end of file diff --git a/batch-quartz/src/main/resources/templates/pages/dashboard/dashboard.html b/batch-quartz/src/main/resources/templates/pages/dashboard/dashboard.html index 71de3ec..ba184d4 100644 --- a/batch-quartz/src/main/resources/templates/pages/dashboard/dashboard.html +++ b/batch-quartz/src/main/resources/templates/pages/dashboard/dashboard.html @@ -25,11 +25,14 @@
-
-
+
+
+
@@ -86,10 +89,10 @@ - - - - + + + + diff --git a/batch-quartz/src/main/resources/templates/pages/schedule/schedule.html b/batch-quartz/src/main/resources/templates/pages/schedule/schedule.html index ec1a4c4..fc1bbf2 100644 --- a/batch-quartz/src/main/resources/templates/pages/schedule/schedule.html +++ b/batch-quartz/src/main/resources/templates/pages/schedule/schedule.html @@ -64,11 +64,11 @@
그룹명 잡 이름 실행 시간 상태 그룹명 잡 이름 실행 시간 상태
- - - - - + + + + + @@ -81,7 +81,7 @@ -
그룹 잡 이름 스케줄 상태 액션 그룹 잡 이름 스케줄 상태 액션