Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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<RevisionDetail> details = revisionService.getRevisionDetails(revisionRequest.getId());
List<RevisionDetail> 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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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;

Expand All @@ -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,
Expand All @@ -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);
}
Expand All @@ -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);
}

// 카테고리 중복 검증
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

// 시안에 달린 디자이너 코멘트 조회 + 확인 처리
Expand All @@ -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<RevisionDetail> 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) {

Expand Down
Original file line number Diff line number Diff line change
@@ -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<RevisionDetail> 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);
}
}