From 0b284242eb586f9bfee64188d64f7a349ab2072a Mon Sep 17 00:00:00 2001 From: Jonghun Lim Date: Sat, 4 Jul 2026 17:08:38 +0900 Subject: [PATCH] =?UTF-8?q?Refactor(Revision):=20RevisionService=20?= =?UTF-8?q?=EC=97=AD=ED=95=A0=EB=B3=84=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20?= =?UTF-8?q?QueryService=20=EB=8F=84=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../facade/DesignerRevisionFacade.java | 12 ++++--- .../facade/InstructorRevisionFacade.java | 16 +++++---- .../service/DesignerRevisionService.java | 28 +++++++++++++++ ...ce.java => InstructorRevisionService.java} | 28 ++------------- .../service/RevisionQueryService.java | 36 +++++++++++++++++++ 5 files changed, 82 insertions(+), 38 deletions(-) create mode 100644 src/main/java/ditda/backend/domain/commission/revision/service/DesignerRevisionService.java rename src/main/java/ditda/backend/domain/commission/revision/service/{RevisionService.java => InstructorRevisionService.java} (67%) create mode 100644 src/main/java/ditda/backend/domain/commission/revision/service/RevisionQueryService.java diff --git a/src/main/java/ditda/backend/domain/commission/revision/facade/DesignerRevisionFacade.java b/src/main/java/ditda/backend/domain/commission/revision/facade/DesignerRevisionFacade.java index 46894b1..f49a31e 100644 --- a/src/main/java/ditda/backend/domain/commission/revision/facade/DesignerRevisionFacade.java +++ b/src/main/java/ditda/backend/domain/commission/revision/facade/DesignerRevisionFacade.java @@ -14,7 +14,8 @@ import ditda.backend.domain.commission.revision.entity.RevisionDetail; import ditda.backend.domain.commission.revision.entity.RevisionRequest; import ditda.backend.domain.commission.revision.mapper.RevisionMapper; -import ditda.backend.domain.commission.revision.service.RevisionService; +import ditda.backend.domain.commission.revision.service.DesignerRevisionService; +import ditda.backend.domain.commission.revision.service.RevisionQueryService; import lombok.RequiredArgsConstructor; @Component @@ -24,7 +25,8 @@ public class DesignerRevisionFacade { private final DesignerCommissionService designerCommissionService; private final DraftQueryService draftQueryService; - private final RevisionService revisionService; + private final RevisionQueryService revisionQueryService; + private final DesignerRevisionService designerRevisionService; private final RevisionMapper revisionMapper; @Transactional @@ -40,15 +42,15 @@ public DesignerRevisionDetailResponse getRevisionDetail(Long designerId, Long co CommissionDraft latestDraft = draftQueryService.getLatestDraftOfSelectedApplication(commissionId); // 수정 요청 조회 + 확인 처리 - RevisionRequest revisionRequest = revisionService.getRevisionRequestAndCheck(latestDraft.getId()); + RevisionRequest revisionRequest = designerRevisionService.getRevisionRequestAndCheck(latestDraft.getId()); // 수정 요청 항목 - List details = revisionService.getRevisionDetails(revisionRequest.getId()); + List details = revisionQueryService.getRevisionDetails(revisionRequest.getId()); // 썸네일 CommissionDraftFile thumbnail = draftQueryService.findThumbnail(latestDraft.getId()); - int currentRevisionCount = revisionService.calculateCurrentRevisionCount(commission); + int currentRevisionCount = revisionQueryService.calculateCurrentRevisionCount(commission); int remainingRevisionCount = commission.getRemainingRevisionCount(currentRevisionCount); return revisionMapper.toDesignerRevisionDetailResponse( diff --git a/src/main/java/ditda/backend/domain/commission/revision/facade/InstructorRevisionFacade.java b/src/main/java/ditda/backend/domain/commission/revision/facade/InstructorRevisionFacade.java index 4f1675f..ed3d045 100644 --- a/src/main/java/ditda/backend/domain/commission/revision/facade/InstructorRevisionFacade.java +++ b/src/main/java/ditda/backend/domain/commission/revision/facade/InstructorRevisionFacade.java @@ -12,7 +12,8 @@ import ditda.backend.domain.commission.revision.dto.response.InstructorRevisionDetailResponse; import ditda.backend.domain.commission.revision.exception.RevisionErrorCode; import ditda.backend.domain.commission.revision.mapper.RevisionMapper; -import ditda.backend.domain.commission.revision.service.RevisionService; +import ditda.backend.domain.commission.revision.service.InstructorRevisionService; +import ditda.backend.domain.commission.revision.service.RevisionQueryService; import ditda.backend.global.apipayload.exception.GeneralException; import lombok.RequiredArgsConstructor; @@ -22,7 +23,8 @@ public class InstructorRevisionFacade { private final InstructorCommissionService instructorCommissionService; - private final RevisionService revisionService; + private final RevisionQueryService revisionQueryService; + private final InstructorRevisionService instructorRevisionService; private final DraftQueryService draftQueryService; private final RevisionMapper revisionMapper; @@ -39,13 +41,13 @@ public InstructorRevisionDetailResponse getRevisionDetail(Long instructorId, Lon CommissionDraft latestDraft = draftQueryService.getLatestDraftOfSelectedApplication(commissionId); // 시안에 달린 디자이너 코멘트 조회 + 확인 처리 - String designerComment = revisionService.getDesignerCommentAndCheck(latestDraft.getId()); + String designerComment = instructorRevisionService.getDesignerCommentAndCheck(latestDraft.getId()); // 썸네일 CommissionDraftFile thumbnail = draftQueryService.findThumbnail(latestDraft.getId()); // 현재 수정 차수 - int currentRevisionCount = revisionService.calculateCurrentRevisionCount(commission); + int currentRevisionCount = revisionQueryService.calculateCurrentRevisionCount(commission); return revisionMapper.toInstructorRevisionDetailResponse( commission, @@ -69,7 +71,7 @@ public void createRevision(Long instructorId, Long commissionId, RevisionCreateR validateDistinctCategories(request); // 수정 횟수 한도 검증 - int current = revisionService.calculateCurrentRevisionCount(commission); + int current = revisionQueryService.calculateCurrentRevisionCount(commission); if (commission.isRevisionLimitExceeded(current)) { throw new GeneralException(RevisionErrorCode.REVISION_LIMIT_EXCEEDED); } @@ -78,12 +80,12 @@ public void createRevision(Long instructorId, Long commissionId, RevisionCreateR CommissionDraft latestDraft = draftQueryService.getLatestDraftOfSelectedApplication(commissionId); // 시안에 이미 수정 요청이 존재하는지 검증 - if (revisionService.hasRevisionRequestOnDraft(latestDraft.getId())) { + if (revisionQueryService.hasRevisionRequestOnDraft(latestDraft.getId())) { throw new GeneralException(RevisionErrorCode.REVISION_ALREADY_REQUESTED); } // 수정 요청 저장 - revisionService.createRevisionRequest(commission, latestDraft, request); + instructorRevisionService.createRevisionRequest(commission, latestDraft, request); } // 카테고리 중복 검증 diff --git a/src/main/java/ditda/backend/domain/commission/revision/service/DesignerRevisionService.java b/src/main/java/ditda/backend/domain/commission/revision/service/DesignerRevisionService.java new file mode 100644 index 0000000..72dce35 --- /dev/null +++ b/src/main/java/ditda/backend/domain/commission/revision/service/DesignerRevisionService.java @@ -0,0 +1,28 @@ +package ditda.backend.domain.commission.revision.service; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import ditda.backend.domain.commission.revision.entity.RevisionRequest; +import ditda.backend.domain.commission.revision.exception.RevisionErrorCode; +import ditda.backend.domain.commission.revision.repository.RevisionRequestRepository; +import ditda.backend.global.apipayload.exception.GeneralException; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class DesignerRevisionService { + + private final RevisionRequestRepository revisionRequestRepository; + + // 시안 수정에 달린 요청 조회 + 확인 처리 + @Transactional + public RevisionRequest getRevisionRequestAndCheck(Long draftId) { + RevisionRequest request = revisionRequestRepository.findByTargetDraftId(draftId) + .orElseThrow(() -> new GeneralException(RevisionErrorCode.REVISION_REQUEST_NOT_FOUND)); + request.check(); + return request; + } + +} diff --git a/src/main/java/ditda/backend/domain/commission/revision/service/RevisionService.java b/src/main/java/ditda/backend/domain/commission/revision/service/InstructorRevisionService.java similarity index 67% rename from src/main/java/ditda/backend/domain/commission/revision/service/RevisionService.java rename to src/main/java/ditda/backend/domain/commission/revision/service/InstructorRevisionService.java index 9096d94..1699904 100644 --- a/src/main/java/ditda/backend/domain/commission/revision/service/RevisionService.java +++ b/src/main/java/ditda/backend/domain/commission/revision/service/InstructorRevisionService.java @@ -10,20 +10,18 @@ import ditda.backend.domain.commission.revision.dto.request.RevisionCreateRequest; import ditda.backend.domain.commission.revision.entity.RevisionDetail; import ditda.backend.domain.commission.revision.entity.RevisionRequest; -import ditda.backend.domain.commission.revision.exception.RevisionErrorCode; import ditda.backend.domain.commission.revision.repository.RevisionDetailRepository; import ditda.backend.domain.commission.revision.repository.RevisionRequestRepository; import ditda.backend.domain.commission.revision.repository.RevisionResponseRepository; -import ditda.backend.global.apipayload.exception.GeneralException; import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor @Transactional(readOnly = true) -public class RevisionService { +public class InstructorRevisionService { - private final RevisionRequestRepository revisionRequestRepository; private final RevisionResponseRepository revisionResponseRepository; + private final RevisionRequestRepository revisionRequestRepository; private final RevisionDetailRepository revisionDetailRepository; // 시안에 달린 디자이너 코멘트 조회 + 확인 처리 @@ -37,28 +35,6 @@ public String getDesignerCommentAndCheck(Long draftId) { .orElse(null); } - @Transactional - public RevisionRequest getRevisionRequestAndCheck(Long draftId) { - RevisionRequest request = revisionRequestRepository.findByTargetDraftId(draftId) - .orElseThrow(() -> new GeneralException(RevisionErrorCode.REVISION_REQUEST_NOT_FOUND)); - request.check(); - return request; - } - - public List getRevisionDetails(Long revisionRequestId) { - return revisionDetailRepository.findAllByRevisionRequest_Id(revisionRequestId); - } - - // 현재 차수 계산 (0부터 시작) - public int calculateCurrentRevisionCount(Commission commission) { - return revisionRequestRepository.countByCommissionId(commission.getId()); - } - - // 수정 요청이 존재하는지 여부 - public boolean hasRevisionRequestOnDraft(Long draftId) { - return revisionRequestRepository.existsByTargetDraftId(draftId); - } - @Transactional public void createRevisionRequest(Commission commission, CommissionDraft draft, RevisionCreateRequest request) { diff --git a/src/main/java/ditda/backend/domain/commission/revision/service/RevisionQueryService.java b/src/main/java/ditda/backend/domain/commission/revision/service/RevisionQueryService.java new file mode 100644 index 0000000..2af9861 --- /dev/null +++ b/src/main/java/ditda/backend/domain/commission/revision/service/RevisionQueryService.java @@ -0,0 +1,36 @@ +package ditda.backend.domain.commission.revision.service; + +import java.util.List; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import ditda.backend.domain.commission.core.entity.Commission; +import ditda.backend.domain.commission.revision.entity.RevisionDetail; +import ditda.backend.domain.commission.revision.repository.RevisionDetailRepository; +import ditda.backend.domain.commission.revision.repository.RevisionRequestRepository; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class RevisionQueryService { + + private final RevisionDetailRepository revisionDetailRepository; + private final RevisionRequestRepository revisionRequestRepository; + + // 수정 내용 조회 + public List getRevisionDetails(Long revisionRequestId) { + return revisionDetailRepository.findAllByRevisionRequest_Id(revisionRequestId); + } + + // 현재 차수 계산 (0부터 시작) + public int calculateCurrentRevisionCount(Commission commission) { + return revisionRequestRepository.countByCommissionId(commission.getId()); + } + + // 수정 요청이 존재하는지 여부 + public boolean hasRevisionRequestOnDraft(Long draftId) { + return revisionRequestRepository.existsByTargetDraftId(draftId); + } +}