From 6654cf62bd0baae448687c8f985bd753132d6d3f Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Sun, 26 Oct 2025 11:48:47 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=B6=80=EC=A0=81=ED=95=A9=EB=AA=85?= =?UTF-8?q?=EA=B3=BC=20=EC=83=81=EC=84=B8=20=EB=82=B4=EC=9A=A9=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐ŸŽฏ ๋ถ€์ ํ•ฉ ์ •๋ณด ๊ตฌ์กฐํ™” ๊ฐœ์„ : ๐Ÿ“ ์ˆ˜์‹ ํ•จ ๊ฒ€ํ†  ๋ชจ๋‹ฌ ๊ฐœ์„ : - '์„ค๋ช…' โ†’ '๋ถ€์ ํ•ฉ๋ช…' + '์ƒ์„ธ ๋‚ด์šฉ'์œผ๋กœ ๋ถ„๋ฆฌ - ๋ถ€์ ํ•ฉ๋ช…: ๊ฐ„๋‹จํ•œ ์ œ๋ชฉ (ํ•„์ˆ˜ ์ž…๋ ฅ) - ์ƒ์„ธ ๋‚ด์šฉ: ์ž์„ธํ•œ ์„ค๋ช… (์„ ํƒ ์ž…๋ ฅ) - ์ €์žฅ ์‹œ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ œ๋ชฉ, ๋‚˜๋จธ์ง€๋Š” ์ƒ์„ธ ๋‚ด์šฉ์œผ๋กœ ๊ฒฐํ•ฉ ๐Ÿข ๊ด€๋ฆฌํ•จ ์ง„ํ–‰์ค‘ ํŽ˜์ด์ง€ ๊ฐœ์„ : - No. ์˜†์— ํ”„๋กœ์ ํŠธ๋ช… ํ‘œ์‹œ (์ž‘์€ ๊ธ€์”จ) - ๋ถ€์ ํ•ฉ๋ช…์„ ์นด๋“œ ํ—ค๋”์— ํฐ ์ œ๋ชฉ์œผ๋กœ ํ‘œ์‹œ - '๋ถ€์ ํ•ฉ ๋‚ด์šฉ' โ†’ '์ƒ์„ธ ๋‚ด์šฉ'์œผ๋กœ ๋ณ€๊ฒฝ - getIssueTitle(), getIssueDetail() ํ—ฌํผ ํ•จ์ˆ˜ ์ถ”๊ฐ€ ๐Ÿ“Š ํ˜„ํ™ฉํŒ ํŽ˜์ด์ง€ ๊ฐœ์„ : - No. ์˜†์— ํ”„๋กœ์ ํŠธ๋ช…๊ณผ ์นดํ…Œ๊ณ ๋ฆฌ ํƒœ๊ทธ ํ‘œ์‹œ - ๋ถ€์ ํ•ฉ๋ช…์„ ์นด๋“œ ํ—ค๋”์— ์ œ๋ชฉ์œผ๋กœ ํ‘œ์‹œ - '๋ถ€์ ํ•ฉ ๋‚ด์šฉ' โ†’ '์ƒ์„ธ ๋‚ด์šฉ'์œผ๋กœ ๋ณ€๊ฒฝ - ๋™์ผํ•œ ํ—ฌํผ ํ•จ์ˆ˜๋กœ ์ผ๊ด€์„ฑ ์œ ์ง€ ๐Ÿ’ก ํ•ต์‹ฌ ๊ฐœ์„ ์‚ฌํ•ญ: - ์ •๋ณด ๊ณ„์ธต ๊ตฌ์กฐ ๋ช…ํ™•ํ™” (์ œ๋ชฉ vs ์ƒ์„ธ) - ์‹œ๊ฐ์  ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ (ํ—ค๋”์— ์ค‘์š” ์ •๋ณด ์ง‘์ค‘) - ์ผ๊ด€๋œ ํ‘œ์‹œ ๋ฐฉ์‹ (์ˆ˜์‹ ํ•จ โ†’ ๊ด€๋ฆฌํ•จ โ†’ ํ˜„ํ™ฉํŒ) - ๊ธฐ์กด ๋ฐ์ดํ„ฐ ํ˜ธํ™˜์„ฑ ์œ ์ง€ ๐Ÿ”ง ๊ธฐ์ˆ ์  ๊ตฌํ˜„: - ์ฒซ ๋ฒˆ์งธ ์ค„์„ ์ œ๋ชฉ์œผ๋กœ ์ถ”์ถœ - ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ๋ฅผ ์ƒ์„ธ ๋‚ด์šฉ์œผ๋กœ ๋ถ„๋ฆฌ - ๊ธฐ์กด description ํ•„๋“œ ํ™œ์šฉ (DB ๋ณ€๊ฒฝ ์—†์Œ) - ํด๋ฐฑ ์ฒ˜๋ฆฌ๋กœ ์•ˆ์ •์„ฑ ํ™•๋ณด Expected Result: โœ… ๋ถ€์ ํ•ฉ ์ •๋ณด์˜ ์ฒด๊ณ„์  ๊ด€๋ฆฌ โœ… ํ•œ๋ˆˆ์— ํŒŒ์•… ๊ฐ€๋Šฅํ•œ ์ œ๋ชฉ ํ‘œ์‹œ โœ… ์ƒ์„ธ ๋‚ด์šฉ๊ณผ ์š”์•ฝ ์ •๋ณด ๋ถ„๋ฆฌ โœ… ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ ์ผ๊ด€์„ฑ ํ–ฅ์ƒ --- frontend/issues-dashboard.html | 41 ++++++++++++++++++++++----------- frontend/issues-inbox.html | 25 +++++++++++++++----- frontend/issues-management.html | 31 +++++++++++++++++++------ 3 files changed, 71 insertions(+), 26 deletions(-) diff --git a/frontend/issues-dashboard.html b/frontend/issues-dashboard.html index 72cd989..e91c54b 100644 --- a/frontend/issues-dashboard.html +++ b/frontend/issues-dashboard.html @@ -471,6 +471,20 @@ container.innerHTML = dateGroups; } + // ๋ถ€์ ํ•ฉ๋ช… ์ถ”์ถœ (์ฒซ ๋ฒˆ์งธ ์ค„) + function getIssueTitle(issue) { + const description = issue.final_description || issue.description || ''; + const lines = description.split('\n'); + return lines[0] || '๋ถ€์ ํ•ฉ๋ช… ์—†์Œ'; + } + + // ์ƒ์„ธ ๋‚ด์šฉ ์ถ”์ถœ (๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ) + function getIssueDetail(issue) { + const description = issue.final_description || issue.description || ''; + const lines = description.split('\n'); + return lines.slice(1).join('\n') || '์ƒ์„ธ ๋‚ด์šฉ ์—†์Œ'; + } + // ์ด์Šˆ ์นด๋“œ ์ƒ์„ฑ (๊ด€๋ฆฌํ•จ ์ง„ํ–‰ ์ค‘ ์Šคํƒ€์ผ, ์ฝ๊ธฐ ์ „์šฉ) function createIssueCard(issue) { const project = projects.find(p => p.id === issue.project_id); @@ -526,13 +540,17 @@
-
- No.${issue.project_sequence_no || '-'} -
- - - ${getCategoryText(issue.final_category || issue.category)} - +
+
+ No.${issue.project_sequence_no || '-'} +
+ ${projectName} + + + ${getCategoryText(issue.final_category || issue.category)} + +
+

${getIssueTitle(issue)}

${isUrgent() ? '๐Ÿ”ฅ ๊ธด๊ธ‰' : ''} @@ -548,13 +566,10 @@
- ๋ถ€์ ํ•ฉ ๋‚ด์šฉ + ์ƒ์„ธ ๋‚ด์šฉ
-
- ${(issue.final_description || issue.description || '์ค‘๋ณต์ž‘์—… ์‹ ๊ณ ์šฉ').split(' ')[0] || '๋ถ€์ ํ•ฉ'} -
-
- ${(issue.final_description || issue.description || '์ค‘๋ณต์ž‘์—… ์‹ ๊ณ ์šฉ').split(' ').slice(1).join(' ') || '์ƒ์„ธ ๋‚ด์šฉ ์—†์Œ'} +
+ ${getIssueDetail(issue)}
diff --git a/frontend/issues-inbox.html b/frontend/issues-inbox.html index 423854e..87fb7e2 100644 --- a/frontend/issues-inbox.html +++ b/frontend/issues-inbox.html @@ -377,9 +377,15 @@
- + + +
+ +
+ + placeholder="๋ถ€์ ํ•ฉ์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์„ค๋ช…์„ ์ž…๋ ฅํ•˜์„ธ์š”...">
@@ -1192,7 +1198,10 @@ // ํ˜„์žฌ ๊ฐ’๋“ค๋กœ ํผ ์ดˆ๊ธฐํ™” document.getElementById('reviewCategory').value = issue.category; - document.getElementById('reviewDescription').value = issue.description; + // ๊ธฐ์กด description์„ title๊ณผ description์œผ๋กœ ๋ถ„๋ฆฌ (์ฒซ ๋ฒˆ์งธ ์ค„์„ title๋กœ ์‚ฌ์šฉ) + const lines = issue.description.split('\n'); + document.getElementById('reviewTitle').value = lines[0] || ''; + document.getElementById('reviewDescription').value = lines.slice(1).join('\n') || issue.description; document.getElementById('reviewModal').classList.remove('hidden'); } @@ -1209,13 +1218,17 @@ const projectId = document.getElementById('reviewProjectId').value; const category = document.getElementById('reviewCategory').value; + const title = document.getElementById('reviewTitle').value.trim(); const description = document.getElementById('reviewDescription').value.trim(); - if (!description) { - alert('์„ค๋ช…์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.'); + if (!title) { + alert('๋ถ€์ ํ•ฉ๋ช…์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.'); return; } + // ๋ถ€์ ํ•ฉ๋ช…๊ณผ ์ƒ์„ธ ๋‚ด์šฉ์„ ํ•ฉ์ณ์„œ ์ €์žฅ (์ฒซ ๋ฒˆ์งธ ์ค„์— ์ œ๋ชฉ, ๋‚˜๋จธ์ง€๋Š” ์ƒ์„ธ ๋‚ด์šฉ) + const combinedDescription = title + (description ? '\n' + description : ''); + try { const response = await fetch(`/api/inbox/${currentIssueId}/review`, { method: 'POST', @@ -1226,7 +1239,7 @@ body: JSON.stringify({ project_id: projectId ? parseInt(projectId) : null, category: category, - description: description + description: combinedDescription }) }); diff --git a/frontend/issues-management.html b/frontend/issues-management.html index af8ae33..d35dcbe 100644 --- a/frontend/issues-management.html +++ b/frontend/issues-management.html @@ -692,18 +692,35 @@ } } + // ๋ถ€์ ํ•ฉ๋ช… ์ถ”์ถœ (์ฒซ ๋ฒˆ์งธ ์ค„) + function getIssueTitle(issue) { + const description = issue.final_description || issue.description || ''; + const lines = description.split('\n'); + return lines[0] || '๋ถ€์ ํ•ฉ๋ช… ์—†์Œ'; + } + + // ์ƒ์„ธ ๋‚ด์šฉ ์ถ”์ถœ (๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ) + function getIssueDetail(issue) { + const description = issue.final_description || issue.description || ''; + const lines = description.split('\n'); + return lines.slice(1).join('\n') || '์ƒ์„ธ ๋‚ด์šฉ ์—†์Œ'; + } + // ์ง„ํ–‰ ์ค‘ ์นด๋“œ ์ƒ์„ฑ function createInProgressRow(issue, project) { return `
-
-
- No.${issue.project_sequence_no || '-'} -
+
+
+
+ No.${issue.project_sequence_no || '-'} +
+
+ ${project ? project.project_name : 'ํ”„๋กœ์ ํŠธ ๋ฏธ์ง€์ •'}
-

${project ? project.project_name : 'ํ”„๋กœ์ ํŠธ ๋ฏธ์ง€์ •'}

+

${getIssueTitle(issue)}