문의 상태값 수정: IN_PROGRESS → RESPONDED
eapim-portal CI / build (push) Has been cancelled
eapim-portal Test / test (push) Has been cancelled

- 문의 상태 필드 및 관련 로직/뷰 업데이트
- Validation 패턴 및 테스트 코드 반영
- 뷰 상태 배지 및 응답 섹션 표시 로직 수정
This commit is contained in:
Rinjae
2026-06-19 10:16:16 +09:00
parent 10ff5d6f2f
commit 17c27e4398
5 changed files with 12 additions and 12 deletions
@@ -25,7 +25,7 @@ public class InquiryDTO {
@Size(max = 4000, message = "제목은 50자를 초과할 수 없습니다.") @Size(max = 4000, message = "제목은 50자를 초과할 수 없습니다.")
private String inquiryDetail; private String inquiryDetail;
@Pattern(regexp = "^(PENDING|IN_PROGRESS|CLOSED)$", message = "유효하지 않은 문의 상태입니다.") @Pattern(regexp = "^(PENDING|RESPONDED|CLOSED)$", message = "유효하지 않은 문의 상태입니다.")
private String inquiryStatus; private String inquiryStatus;
private String inquirerName; private String inquirerName;
@@ -3,7 +3,7 @@ package com.eactive.apim.portal.djb.community.qna.constant;
public final class DjbInquiryStatus { public final class DjbInquiryStatus {
public static final String PENDING = "PENDING"; public static final String PENDING = "PENDING";
public static final String IN_PROGRESS = "IN_PROGRESS"; public static final String RESPONDED = "RESPONDED";
public static final String CLOSED = "CLOSED"; public static final String CLOSED = "CLOSED";
private DjbInquiryStatus() { private DjbInquiryStatus() {
@@ -17,8 +17,8 @@
<div class="inquiry-detail-header"> <div class="inquiry-detail-header">
<div class="inquiry-header-top"> <div class="inquiry-header-top">
<span class="inquiry-status-badge" <span class="inquiry-status-badge"
th:classappend="${inquiry.inquiryStatus == 'IN_PROGRESS' ? 'inquiry-status-badge--completed' : (inquiry.inquiryStatus == 'CLOSED' ? 'inquiry-status-badge--closed' : 'inquiry-status-badge--pending')}" th:classappend="${inquiry.inquiryStatus == 'RESPONDED' ? 'inquiry-status-badge--completed' : (inquiry.inquiryStatus == 'CLOSED' ? 'inquiry-status-badge--closed' : 'inquiry-status-badge--pending')}"
th:text="${inquiry.inquiryStatus == 'IN_PROGRESS' ? '답변완료' : (inquiry.inquiryStatus == 'CLOSED' ? '종료' : '답변대기')}"> th:text="${inquiry.inquiryStatus == 'RESPONDED' ? '답변완료' : (inquiry.inquiryStatus == 'CLOSED' ? '종료' : '답변대기')}">
답변대기 답변대기
</span> </span>
<div class="inquiry-header-right"> <div class="inquiry-header-right">
@@ -39,7 +39,7 @@
</div> </div>
<!-- Admin Response Section --> <!-- Admin Response Section -->
<div class="inquiry-response-section" th:if="${inquiry.inquiryStatus == 'IN_PROGRESS' or inquiry.inquiryStatus == 'CLOSED'}"> <div class="inquiry-response-section" th:if="${inquiry.inquiryStatus == 'RESPONDED' or inquiry.inquiryStatus == 'CLOSED'}">
<div class="inquiry-response-header"> <div class="inquiry-response-header">
<span class="response-label">관리자 답변</span> <span class="response-label">관리자 답변</span>
<span class="response-date" th:text="${#temporals.format(inquiry.responseDate, 'yyyy.MM.dd')}">2025.11.02</span> <span class="response-date" th:text="${#temporals.format(inquiry.responseDate, 'yyyy.MM.dd')}">2025.11.02</span>
@@ -70,8 +70,8 @@
<div class="row-cell" style="width: 100px;" data-label="작성자" th:text="${inquiry.maskedInquirerName}">홍**</div> <div class="row-cell" style="width: 100px;" data-label="작성자" th:text="${inquiry.maskedInquirerName}">홍**</div>
<div class="row-cell" style="width: 120px;" data-label="처리상태"> <div class="row-cell" style="width: 120px;" data-label="처리상태">
<span class="inquiry-status-badge" <span class="inquiry-status-badge"
th:classappend="${inquiry.inquiryStatus == 'IN_PROGRESS' ? 'inquiry-status-badge--completed' : (inquiry.inquiryStatus == 'CLOSED' ? 'inquiry-status-badge--closed' : 'inquiry-status-badge--pending')}" th:classappend="${inquiry.inquiryStatus == 'RESPONDED' ? 'inquiry-status-badge--completed' : (inquiry.inquiryStatus == 'CLOSED' ? 'inquiry-status-badge--closed' : 'inquiry-status-badge--pending')}"
th:text="${inquiry.inquiryStatus == 'IN_PROGRESS' ? '답변완료' : (inquiry.inquiryStatus == 'CLOSED' ? '종료' : '답변대기')}"> th:text="${inquiry.inquiryStatus == 'RESPONDED' ? '답변완료' : (inquiry.inquiryStatus == 'CLOSED' ? '종료' : '답변대기')}">
답변대기 답변대기
</span> </span>
</div> </div>
@@ -54,7 +54,7 @@ class InquiryCommentPermissionCheckerTest {
@Test @Test
void canWrite_inProgressTrue() { void canWrite_inProgressTrue() {
assertTrue(checker.canWrite(inquiry("IN_PROGRESS"))); assertTrue(checker.canWrite(inquiry("RESPONDED")));
} }
@Test @Test
@@ -64,14 +64,14 @@ class InquiryCommentPermissionCheckerTest {
@Test @Test
void canDelete_ownerInOpenTrue() { void canDelete_ownerInOpenTrue() {
Inquiry i = inquiry("IN_PROGRESS"); Inquiry i = inquiry("RESPONDED");
InquiryComment c = comment("alice", i); InquiryComment c = comment("alice", i);
assertTrue(checker.canDelete(c, user("alice"))); assertTrue(checker.canDelete(c, user("alice")));
} }
@Test @Test
void canDelete_otherUserFalse() { void canDelete_otherUserFalse() {
Inquiry i = inquiry("IN_PROGRESS"); Inquiry i = inquiry("RESPONDED");
InquiryComment c = comment("alice", i); InquiryComment c = comment("alice", i);
assertFalse(checker.canDelete(c, user("bob"))); assertFalse(checker.canDelete(c, user("bob")));
} }
@@ -102,7 +102,7 @@ class InquiryCommentPermissionCheckerTest {
@Test @Test
void assertDeletable_notOwnerThrowsNotOwned() { void assertDeletable_notOwnerThrowsNotOwned() {
Inquiry i = inquiry("IN_PROGRESS"); Inquiry i = inquiry("RESPONDED");
InquiryComment c = comment("alice", i); InquiryComment c = comment("alice", i);
assertThrows(InquiryCommentNotOwnedException.class, assertThrows(InquiryCommentNotOwnedException.class,
() -> checker.assertDeletable(c, user("bob"))); () -> checker.assertDeletable(c, user("bob")));
@@ -110,7 +110,7 @@ class InquiryCommentPermissionCheckerTest {
@Test @Test
void assertDeletable_ownerInOpenOk() { void assertDeletable_ownerInOpenOk() {
Inquiry i = inquiry("IN_PROGRESS"); Inquiry i = inquiry("RESPONDED");
InquiryComment c = comment("alice", i); InquiryComment c = comment("alice", i);
assertDoesNotThrow(() -> checker.assertDeletable(c, user("alice"))); assertDoesNotThrow(() -> checker.assertDeletable(c, user("alice")));
} }