diff --git a/dap-gateway/src/main/resources/static/admin/scaffold.html b/dap-gateway/src/main/resources/static/admin/scaffold.html index 8db12a4c..f2bae4cb 100644 --- a/dap-gateway/src/main/resources/static/admin/scaffold.html +++ b/dap-gateway/src/main/resources/static/admin/scaffold.html @@ -1660,25 +1660,42 @@ } document.getElementById('toolForm').addEventListener('submit', function(e) { - if (!groupedTools.length) return; - e.preventDefault(); - e.stopImmediatePropagation(); - try { - const useCaseName = document.getElementById('toolGroupUseCaseName').value.trim(); - if (!/^[A-Z][A-Za-z0-9]*$/.test(useCaseName)) throw new Error('UseCase 이름은 PascalCase로 입력해주세요. 예: Customer'); - const current = currentToolDefinition(); - const tools = groupedTools.some(item => item.methodName === current.methodName) ? groupedTools : [...groupedTools, current]; - const data = Object.fromEntries(new FormData(this).entries()); - fetch('/api/v1/scaffold/tool-group', { - method: 'POST', headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({useCaseName, moduleName: data.moduleName, author: data.author, date: data.date, tools}) - }).then(response => response.text()).then(result => { - const resultBox = document.getElementById('resultBox'); - resultBox.style.display = 'block'; resultBox.className = result.startsWith('Error:') ? 'error' : 'success'; - resultBox.textContent = result; - }); - } catch (error) { - alert(error.message); + const useCaseName = document.getElementById('toolGroupUseCaseName').value.trim(); + if (useCaseName) { + e.preventDefault(); + e.stopImmediatePropagation(); + if (!/^[A-Z][A-Za-z0-9]*$/.test(useCaseName)) { + alert('UseCase 이름은 PascalCase로 입력해주세요. 예: Customer'); + return; + } + try { + const current = currentToolDefinition(); + const tools = groupedTools.some(item => item.methodName === current.methodName) ? groupedTools : [...groupedTools, current]; + const data = Object.fromEntries(new FormData(this).entries()); + + const btn = this.querySelector('button[type="submit"]'); + const originalText = btn.innerHTML; + btn.innerHTML = ' 처리중...'; + btn.disabled = true; + + fetch('/api/v1/scaffold/tool-group', { + method: 'POST', headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({useCaseName, moduleName: data.moduleName, author: data.author, date: data.date, tools}) + }).then(response => response.text()).then(result => { + const resultBox = document.getElementById('resultBox'); + resultBox.style.display = 'block'; resultBox.className = result.startsWith('Error:') ? 'error' : 'success'; + resultBox.textContent = result + (result.startsWith('Error:') ? '' : "\n\n> Note: Please sync Gradle in your IDE to reflect source code generation."); + }).catch(error => { + const resultBox = document.getElementById('resultBox'); + resultBox.style.display = 'block'; resultBox.className = 'error'; + resultBox.textContent = "Network error: " + error; + }).finally(() => { + btn.innerHTML = originalText; + btn.disabled = false; + }); + } catch (error) { + alert(error.message); + } } });