From bb1419f9078ffd4c052f36c25c40c343f8d4a05c Mon Sep 17 00:00:00 2001 From: joowojr Date: Tue, 18 Feb 2025 13:51:26 +0900 Subject: [PATCH 1/5] =?UTF-8?q?CLAP-451=20Refactor:=20departement=20fetch?= =?UTF-8?q?=20join=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #590 --- .../persistense/repository/task/TaskCustomRepositoryImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java index 2042b1f8..bce5ad0c 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java @@ -55,6 +55,10 @@ public List findTeamStatus(Long memberId, FilterTeamStatusRequest fi BooleanBuilder builder = createFilterBuilder(memberId, filter); return queryFactory .selectFrom(taskEntity) + .leftJoin(taskEntity.requester) + .leftJoin(taskEntity.requester.department).fetchJoin() + .leftJoin(taskEntity.processor) + .leftJoin(taskEntity.processor.department).fetchJoin() .where(builder) .fetch(); } From 2dd45f0b2afc3a758b4c0257c3982e241b8e5341 Mon Sep 17 00:00:00 2001 From: joowojr Date: Tue, 18 Feb 2025 14:52:16 +0900 Subject: [PATCH 2/5] =?UTF-8?q?CLAP-451=20Fix:=20Memeber=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20command=EA=B0=80=20=EC=9D=BC=EC=96=B4?= =?UTF-8?q?=EB=82=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=EC=97=90?= =?UTF-8?q?=EC=84=9C=20department=EB=A5=BC=20fetch=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #590 --- .../outbound/persistense/TaskPersistenceAdapter.java | 5 +++++ .../persistense/repository/task/TaskRepository.java | 9 +++++++-- .../port/inbound/domain/MemberService.java | 11 ++++++++++- .../application/port/outbound/task/LoadTaskPort.java | 4 ++-- .../service/admin/DeleteMemberService.java | 9 +++------ .../service/admin/ManageMemberService.java | 11 ++++------- .../service/admin/SendInvitationService.java | 8 +++----- .../service/history/CommandCommentService.java | 12 +----------- .../service/history/FindTaskHistoriesService.java | 7 ++----- .../service/history/PostCommentService.java | 2 +- .../service/member/MemberInfoService.java | 9 ++++----- .../service/member/ResetPasswordService.java | 4 ++-- .../service/member/UpdateMemberInfoService.java | 3 ++- .../notification/UpdateNotificationService.java | 1 + .../service/task/ApprovalTaskService.java | 2 +- .../service/task/TerminateTaskService.java | 6 +++++- .../task/UpdateTaskOrderAndStstusService.java | 2 +- .../application/service/task/UpdateTaskService.java | 9 ++++++--- 18 files changed, 60 insertions(+), 54 deletions(-) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java index 820f6568..cbcbe844 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java @@ -125,4 +125,9 @@ public List findTasksByMemberIdAndStatus(final Long memberId, final List findTaskWithProcessorDepartment(Long taskId) { + return taskRepository.findTaskWithProcessorDepartment(taskId).map(taskPersistenceMapper::toDomain); + } + } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskRepository.java index 112cda40..0c60c57a 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskRepository.java @@ -39,5 +39,10 @@ Optional findTopByProcessor_MemberIdAndTaskStatusAndProcessorOrderAf Optional findTopByProcessor_MemberIdAndTaskStatusAndTaskIdGreaterThanOrderByTaskIdAsc(Long processorId, TaskStatus status, Long taskId); - -} \ No newline at end of file + @Query("SELECT t FROM TaskEntity t " + + "LEFT JOIN FETCH t.requester rq " + + "LEFT JOIN FETCH t.processor p " + + "LEFT JOIN FETCH p.department " + + "WHERE t.taskId = :taskId") + Optional findTaskWithProcessorDepartment(@Param("taskId") Long taskId); + } \ No newline at end of file diff --git a/src/main/java/clap/server/application/port/inbound/domain/MemberService.java b/src/main/java/clap/server/application/port/inbound/domain/MemberService.java index a8899189..84ab2865 100644 --- a/src/main/java/clap/server/application/port/inbound/domain/MemberService.java +++ b/src/main/java/clap/server/application/port/inbound/domain/MemberService.java @@ -2,7 +2,6 @@ import clap.server.application.port.outbound.member.LoadMemberPort; import clap.server.domain.model.member.Member; -import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; import clap.server.exception.ApplicationException; import clap.server.exception.code.MemberErrorCode; import lombok.RequiredArgsConstructor; @@ -44,4 +43,14 @@ public List findReviewers() { return loadMemberPort.findReviewers(); } + public Member findActiveMemberWithDepartment(Long memberId) { + return loadMemberPort.findActiveMemberByIdWithFetchDepartment(memberId).orElseThrow( + () -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND)); + } + + public Member findMemberWithDepartment(Long memberId) { + return loadMemberPort.findByIdWithFetchDepartment(memberId).orElseThrow( + () -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND)); + } + } diff --git a/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java b/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java index 43067966..dbd134b3 100644 --- a/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java +++ b/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java @@ -3,8 +3,6 @@ import clap.server.adapter.inbound.web.dto.task.request.FilterTaskBoardRequest; import clap.server.adapter.inbound.web.dto.task.request.FilterTaskListRequest; import clap.server.adapter.inbound.web.dto.task.request.FilterTeamStatusRequest; -import clap.server.adapter.inbound.web.dto.task.response.TeamTaskResponse; -import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; import clap.server.domain.model.task.Task; import org.springframework.data.domain.Page; @@ -42,4 +40,6 @@ public interface LoadTaskPort { List findTeamStatus(Long memberId, FilterTeamStatusRequest filter); List findTasksByMemberIdAndStatus(Long memberId, List taskStatuses); + + Optional findTaskWithProcessorDepartment(Long taskId); } diff --git a/src/main/java/clap/server/application/service/admin/DeleteMemberService.java b/src/main/java/clap/server/application/service/admin/DeleteMemberService.java index 046b2bd2..3935e478 100644 --- a/src/main/java/clap/server/application/service/admin/DeleteMemberService.java +++ b/src/main/java/clap/server/application/service/admin/DeleteMemberService.java @@ -2,28 +2,25 @@ import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; import clap.server.application.port.inbound.admin.DeleteMemberUsecase; +import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.outbound.member.CommandMemberPort; -import clap.server.application.port.outbound.member.LoadMemberPort; import clap.server.common.annotation.architecture.ApplicationService; import clap.server.domain.model.member.Member; import clap.server.domain.policy.member.ManagerInfoUpdatePolicy; -import clap.server.exception.ApplicationException; -import clap.server.exception.code.MemberErrorCode; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @ApplicationService @RequiredArgsConstructor public class DeleteMemberService implements DeleteMemberUsecase { - private final LoadMemberPort loadMemberPort; + private final MemberService memberService; private final CommandMemberPort commandMemberPort; private final ManagerInfoUpdatePolicy managerInfoUpdatePolicy; @Transactional @Override public void deleteMember(Long memberId) { - Member member = loadMemberPort.findById(memberId) - .orElseThrow(() -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND)); + Member member = memberService.findMemberWithDepartment(memberId); if (member.getMemberInfo().getRole() == MemberRole.ROLE_MANAGER) { managerInfoUpdatePolicy.validateNoRemainingTasks(member); diff --git a/src/main/java/clap/server/application/service/admin/ManageMemberService.java b/src/main/java/clap/server/application/service/admin/ManageMemberService.java index 1ace0c6c..b87380ea 100644 --- a/src/main/java/clap/server/application/service/admin/ManageMemberService.java +++ b/src/main/java/clap/server/application/service/admin/ManageMemberService.java @@ -6,23 +6,22 @@ import clap.server.application.mapper.response.MemberResponseMapper; import clap.server.application.port.inbound.admin.MemberDetailUsecase; import clap.server.application.port.inbound.admin.UpdateMemberUsecase; +import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.outbound.member.CommandMemberPort; import clap.server.application.port.outbound.member.LoadDepartmentPort; -import clap.server.application.port.outbound.member.LoadMemberPort; import clap.server.common.annotation.architecture.ApplicationService; import clap.server.domain.model.member.Department; import clap.server.domain.model.member.Member; import clap.server.domain.policy.member.ManagerInfoUpdatePolicy; import clap.server.exception.ApplicationException; import clap.server.exception.code.DepartmentErrorCode; -import clap.server.exception.code.MemberErrorCode; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @ApplicationService @RequiredArgsConstructor class ManageMemberService implements UpdateMemberUsecase, MemberDetailUsecase { - private final LoadMemberPort loadMemberPort; + private final MemberService memberService; private final CommandMemberPort commandMemberPort; private final LoadDepartmentPort loadDepartmentPort; private final ManagerInfoUpdatePolicy managerInfoUpdatePolicy; @@ -30,8 +29,7 @@ class ManageMemberService implements UpdateMemberUsecase, MemberDetailUsecase { @Override @Transactional public void updateMemberInfo(Long adminId, Long memberId, UpdateMemberRequest request) { - Member member = loadMemberPort.findByIdWithFetchDepartment(memberId).orElseThrow( - () -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND)); + Member member = memberService.findMemberWithDepartment(memberId); Department department = loadDepartmentPort.findById(request.departmentId()).orElseThrow(() -> new ApplicationException(DepartmentErrorCode.DEPARTMENT_NOT_FOUND)); managerInfoUpdatePolicy.validateDepartment(department, request.role()); @@ -48,8 +46,7 @@ public void updateMemberInfo(Long adminId, Long memberId, UpdateMemberRequest re @Override @Transactional(readOnly = true) public MemberDetailsResponse getMemberDetail(Long memberId) { - Member member = loadMemberPort.findByIdWithFetchDepartment(memberId).orElseThrow( - () -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND));; + Member member = memberService.findMemberWithDepartment(memberId); return MemberResponseMapper.toMemberDetailsResponse(member); } } diff --git a/src/main/java/clap/server/application/service/admin/SendInvitationService.java b/src/main/java/clap/server/application/service/admin/SendInvitationService.java index 86653863..c7bff839 100644 --- a/src/main/java/clap/server/application/service/admin/SendInvitationService.java +++ b/src/main/java/clap/server/application/service/admin/SendInvitationService.java @@ -2,13 +2,12 @@ import clap.server.adapter.inbound.web.dto.admin.request.SendInvitationRequest; import clap.server.application.port.inbound.admin.SendInvitationUsecase; +import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.outbound.member.CommandMemberPort; import clap.server.application.port.outbound.member.LoadMemberPort; import clap.server.common.annotation.architecture.ApplicationService; import clap.server.common.utils.InitialPasswordGenerator; import clap.server.domain.model.member.Member; -import clap.server.exception.ApplicationException; -import clap.server.exception.code.MemberErrorCode; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.transaction.annotation.Transactional; @@ -17,6 +16,7 @@ @RequiredArgsConstructor public class SendInvitationService implements SendInvitationUsecase { private final LoadMemberPort loadMemberPort; + private final MemberService memberService; private final CommandMemberPort commandMemberPort; private final SendInvitationEmailService sendInvitationEmailService; private final InitialPasswordGenerator passwordGenerator; @@ -25,8 +25,7 @@ public class SendInvitationService implements SendInvitationUsecase { @Override @Transactional public void sendInvitation(SendInvitationRequest request) { - Member member = loadMemberPort.findById(request.memberId()) - .orElseThrow(() -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND)); + Member member = memberService.findMemberWithDepartment(request.memberId()); String initialPassword = passwordGenerator.generateRandomPassword(); String encodedPassword = passwordEncoder.encode(initialPassword); @@ -37,7 +36,6 @@ public void sendInvitation(SendInvitationRequest request) { commandMemberPort.save(member); - sendInvitationEmailService.sendInvitationEmail( member.getMemberInfo().getEmail(), member.getMemberInfo().getName(), diff --git a/src/main/java/clap/server/application/service/history/CommandCommentService.java b/src/main/java/clap/server/application/service/history/CommandCommentService.java index 2eff6a12..4f9fef79 100644 --- a/src/main/java/clap/server/application/service/history/CommandCommentService.java +++ b/src/main/java/clap/server/application/service/history/CommandCommentService.java @@ -2,29 +2,19 @@ import clap.server.adapter.inbound.web.dto.history.request.EditCommentRequest; import clap.server.application.port.inbound.domain.CommentService; +import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.history.DeleteCommentUsecase; import clap.server.application.port.inbound.history.EditCommentUsecase; -import clap.server.application.port.inbound.domain.MemberService; -import clap.server.application.port.outbound.task.CommandAttachmentPort; import clap.server.application.port.outbound.task.CommandCommentPort; -import clap.server.application.port.outbound.task.LoadAttachmentPort; -import clap.server.application.port.outbound.task.LoadCommentPort; -import clap.server.application.port.outbound.taskhistory.CommandTaskHistoryPort; import clap.server.common.annotation.architecture.ApplicationService; import clap.server.domain.model.member.Member; -import clap.server.domain.model.task.Attachment; import clap.server.domain.model.task.Comment; import clap.server.exception.ApplicationException; -import clap.server.exception.DomainException; import clap.server.exception.code.CommentErrorCode; -import clap.server.exception.code.MemberErrorCode; -import clap.server.exception.code.TaskErrorCode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.annotation.Transactional; -import java.util.Objects; - @ApplicationService @RequiredArgsConstructor @Slf4j diff --git a/src/main/java/clap/server/application/service/history/FindTaskHistoriesService.java b/src/main/java/clap/server/application/service/history/FindTaskHistoriesService.java index 7ff7a37d..9fe7ef14 100644 --- a/src/main/java/clap/server/application/service/history/FindTaskHistoriesService.java +++ b/src/main/java/clap/server/application/service/history/FindTaskHistoriesService.java @@ -4,12 +4,10 @@ import clap.server.application.mapper.response.TaskHistoryResponseMapper; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.history.FindTaskHistoriesUsecase; -import clap.server.application.port.outbound.task.LoadAttachmentPort; - -import clap.server.application.port.outbound.taskhistory.LoadTaskHistoryPort; import clap.server.application.port.outbound.task.LoadTaskPort; +import clap.server.application.port.outbound.taskhistory.LoadTaskHistoryPort; import clap.server.common.annotation.architecture.ApplicationService; -import clap.server.domain.model.task.Attachment; +import clap.server.domain.model.member.Member; import clap.server.domain.model.task.Task; import clap.server.domain.model.task.TaskHistory; import clap.server.exception.DomainException; @@ -26,7 +24,6 @@ public class FindTaskHistoriesService implements FindTaskHistoriesUsecase { private final MemberService memberService; private final LoadTaskPort loadTaskPort; private final LoadTaskHistoryPort loadTaskHistoryPort; - private final LoadAttachmentPort loadAttachmentPort; @Override public FindTaskHistoryResponse findTaskHistories(Long memberId, Long taskId) { diff --git a/src/main/java/clap/server/application/service/history/PostCommentService.java b/src/main/java/clap/server/application/service/history/PostCommentService.java index 7912fc7b..24c6c9db 100644 --- a/src/main/java/clap/server/application/service/history/PostCommentService.java +++ b/src/main/java/clap/server/application/service/history/PostCommentService.java @@ -37,7 +37,7 @@ public class PostCommentService implements SaveCommentUsecase, SaveCommentAttach private final TaskService taskService; private final CommandCommentPort commandCommentPort; private final S3UploadPort s3UploadPort; - private final CommandAttachmentPort commandAttachmentPort; + private final CommandTaskHistoryPort commandTaskHistoryPort; private final SendNotificationService sendNotificationService; private final TaskCommentPolicy taskCommentPolicy; diff --git a/src/main/java/clap/server/application/service/member/MemberInfoService.java b/src/main/java/clap/server/application/service/member/MemberInfoService.java index 4ebf3a2a..2aa6162a 100644 --- a/src/main/java/clap/server/application/service/member/MemberInfoService.java +++ b/src/main/java/clap/server/application/service/member/MemberInfoService.java @@ -2,6 +2,7 @@ import clap.server.adapter.inbound.web.dto.member.response.MemberDetailInfoResponse; import clap.server.adapter.inbound.web.dto.member.response.MemberProfileResponse; +import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.member.MemberDetailInfoUsecase; import clap.server.application.port.inbound.member.MemberProfileUsecase; import clap.server.application.port.outbound.member.LoadMemberPort; @@ -18,21 +19,19 @@ @ApplicationService @RequiredArgsConstructor class MemberInfoService implements MemberProfileUsecase , MemberDetailInfoUsecase { - private final LoadMemberPort loadMemberPort; + private final MemberService memberService; @Override @Transactional(readOnly = true) public MemberProfileResponse getMemberProfile(Long memberId) { - Member member = loadMemberPort.findActiveMemberByIdWithFetchDepartment(memberId).orElseThrow( - () -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND)); + Member member = memberService.findActiveMemberWithDepartment(memberId); return toMemberProfileResponse(member); } @Override @Transactional(readOnly = true) public MemberDetailInfoResponse getMemberInfo(Long memberId) { - Member member = loadMemberPort.findActiveMemberByIdWithFetchDepartment(memberId).orElseThrow( - () -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND)); + Member member = memberService.findActiveMemberWithDepartment(memberId); return toMemberDetailInfoResponse(member); } } diff --git a/src/main/java/clap/server/application/service/member/ResetPasswordService.java b/src/main/java/clap/server/application/service/member/ResetPasswordService.java index 488def12..546ee5d0 100644 --- a/src/main/java/clap/server/application/service/member/ResetPasswordService.java +++ b/src/main/java/clap/server/application/service/member/ResetPasswordService.java @@ -31,7 +31,7 @@ class ResetPasswordService implements ResetPasswordUsecase, ResetInitialPassword @Override public void resetPassword(Long memberId, String inputPassword) { - Member member = memberService.findActiveMember(memberId); + Member member = memberService.findActiveMemberWithDepartment(memberId); String encodedPassword = passwordEncoder.encode(inputPassword); member.resetPassword(encodedPassword); commandMemberPort.save(member); @@ -39,7 +39,7 @@ public void resetPassword(Long memberId, String inputPassword) { @Override public void resetPasswordAndActivateMember(Long memberId, String password) { - Member member = memberService.findById(memberId); + Member member = memberService.findMemberWithDepartment(memberId); member.resetPasswordAndActivateMember(passwordEncoder.encode(password)); commandMemberPort.save(member); } diff --git a/src/main/java/clap/server/application/service/member/UpdateMemberInfoService.java b/src/main/java/clap/server/application/service/member/UpdateMemberInfoService.java index 9d1db7c9..2a50bccf 100644 --- a/src/main/java/clap/server/application/service/member/UpdateMemberInfoService.java +++ b/src/main/java/clap/server/application/service/member/UpdateMemberInfoService.java @@ -4,6 +4,7 @@ import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.member.UpdateMemberInfoUsecase; import clap.server.application.port.outbound.member.CommandMemberPort; +import clap.server.application.port.outbound.member.LoadMemberPort; import clap.server.application.port.outbound.s3.S3UploadPort; import clap.server.common.annotation.architecture.ApplicationService; import clap.server.domain.model.member.Member; @@ -22,7 +23,7 @@ class UpdateMemberInfoService implements UpdateMemberInfoUsecase { @Override public void updateMemberInfo(Long memberId, UpdateMemberInfoRequest request, MultipartFile profileImage) { - Member member = memberService.findActiveMember(memberId); + Member member = memberService.findActiveMemberWithDepartment(memberId); if(request.isProfileImageDeleted()){ member.setImageUrl(null); } diff --git a/src/main/java/clap/server/application/service/notification/UpdateNotificationService.java b/src/main/java/clap/server/application/service/notification/UpdateNotificationService.java index d297165a..e0b6f978 100644 --- a/src/main/java/clap/server/application/service/notification/UpdateNotificationService.java +++ b/src/main/java/clap/server/application/service/notification/UpdateNotificationService.java @@ -8,6 +8,7 @@ import clap.server.domain.model.member.Member; import lombok.RequiredArgsConstructor; +@Deprecated @ApplicationService @RequiredArgsConstructor public class UpdateNotificationService implements EnableKakaoUsecase, EnableEmailUsecase { diff --git a/src/main/java/clap/server/application/service/task/ApprovalTaskService.java b/src/main/java/clap/server/application/service/task/ApprovalTaskService.java index aec4d1e5..953d28d8 100644 --- a/src/main/java/clap/server/application/service/task/ApprovalTaskService.java +++ b/src/main/java/clap/server/application/service/task/ApprovalTaskService.java @@ -48,7 +48,7 @@ public class ApprovalTaskService implements ApprovalTaskUsecase { public ApprovalTaskResponse approvalTaskByReviewer(Long reviewerId, Long taskId, ApprovalTaskRequest approvalTaskRequest) { Member reviewer = memberService.findReviewer(reviewerId); Task task = taskService.findById(taskId); - Member processor = memberService.findActiveMember(approvalTaskRequest.processorId()); + Member processor = memberService.findActiveMemberWithDepartment(approvalTaskRequest.processorId()); Category category = categoryService.findById(approvalTaskRequest.categoryId()); Label label = null; if (approvalTaskRequest.labelId() != null) { diff --git a/src/main/java/clap/server/application/service/task/TerminateTaskService.java b/src/main/java/clap/server/application/service/task/TerminateTaskService.java index 04f0d256..9febdec4 100644 --- a/src/main/java/clap/server/application/service/task/TerminateTaskService.java +++ b/src/main/java/clap/server/application/service/task/TerminateTaskService.java @@ -5,12 +5,15 @@ import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; import clap.server.application.port.inbound.domain.TaskService; import clap.server.application.port.inbound.task.TerminateTaskUsecase; +import clap.server.application.port.outbound.task.LoadTaskPort; import clap.server.application.port.outbound.taskhistory.CommandTaskHistoryPort; import clap.server.application.service.webhook.SendNotificationService; import clap.server.common.annotation.architecture.ApplicationService; import clap.server.domain.model.member.Member; import clap.server.domain.model.task.Task; import clap.server.domain.model.task.TaskHistory; +import clap.server.exception.ApplicationException; +import clap.server.exception.code.TaskErrorCode; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @@ -19,13 +22,14 @@ @Transactional public class TerminateTaskService implements TerminateTaskUsecase { private final TaskService taskService; + private final LoadTaskPort loadTaskPort; private final CommandTaskHistoryPort commandTaskHistoryPort; private final SendNotificationService sendNotificationService; private final UpdateProcessorTaskCountService updateProcessorTaskCountService; @Override public void terminateTask(Long memberId, Long taskId, String reason) { - Task task = taskService.findById(taskId); + Task task = loadTaskPort.findTaskWithProcessorDepartment(taskId).orElseThrow(()-> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND)); // 작업 종료의 경우. 작업 반려는 count를 업데이트를 하지 않음 if(task.getProcessor()!=null) { diff --git a/src/main/java/clap/server/application/service/task/UpdateTaskOrderAndStstusService.java b/src/main/java/clap/server/application/service/task/UpdateTaskOrderAndStstusService.java index ba1581b0..d29af3aa 100644 --- a/src/main/java/clap/server/application/service/task/UpdateTaskOrderAndStstusService.java +++ b/src/main/java/clap/server/application/service/task/UpdateTaskOrderAndStstusService.java @@ -52,7 +52,7 @@ public class UpdateTaskOrderAndStstusService implements UpdateTaskOrderAndStatus @Transactional public void updateTaskOrderAndStatus(Long processorId, UpdateTaskOrderRequest request, TaskStatus targetStatus) { validateRequest(targetStatus); - Member processor = memberService.findActiveMember(processorId); + Member processor = memberService.findActiveMemberWithDepartment(processorId); Task targetTask = taskService.findById(request.targetTaskId()); processorValidationPolicy.validateProcessor(processorId, targetTask); diff --git a/src/main/java/clap/server/application/service/task/UpdateTaskService.java b/src/main/java/clap/server/application/service/task/UpdateTaskService.java index f9511f1c..a6ec48b0 100644 --- a/src/main/java/clap/server/application/service/task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/service/task/UpdateTaskService.java @@ -9,6 +9,7 @@ import clap.server.application.port.inbound.domain.TaskService; import clap.server.application.port.inbound.task.UpdateTaskProcessorUsecase; import clap.server.application.port.inbound.task.UpdateTaskStatusUsecase; +import clap.server.application.port.outbound.task.LoadTaskPort; import clap.server.application.port.outbound.taskhistory.CommandTaskHistoryPort; import clap.server.application.service.webhook.SendNotificationService; import clap.server.common.annotation.architecture.ApplicationService; @@ -32,6 +33,7 @@ @Slf4j public class UpdateTaskService implements UpdateTaskStatusUsecase, UpdateTaskProcessorUsecase { private final MemberService memberService; + private final LoadTaskPort loadTaskPort; private final TaskService taskService; private final SendNotificationService sendNotificationService; private final UpdateProcessorTaskCountService updateProcessorTaskCountService; @@ -41,7 +43,7 @@ public class UpdateTaskService implements UpdateTaskStatusUsecase, UpdateTaskPro @Transactional public void updateTaskStatus(Long memberId, Long taskId, TaskStatus targetTaskStatus) { memberService.findActiveMember(memberId); - Task task = taskService.findById(taskId); + Task task = loadTaskPort.findTaskWithProcessorDepartment(taskId).orElseThrow(()-> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND)); if (!TASK_UPDATABLE_STATUS.contains(targetTaskStatus)) { throw new ApplicationException(TaskErrorCode.TASK_STATUS_NOT_ALLOWED); @@ -49,6 +51,7 @@ public void updateTaskStatus(Long memberId, Long taskId, TaskStatus targetTaskSt if (!task.getTaskStatus().equals(targetTaskStatus)) { // 작업 종료에서의 상태 전환은 count를 업데이트를 하지 않음 + log.debug("왜안돼", task.getProcessor().getMemberId()); if(task.getProcessor()!=null) { updateProcessorTaskCountService.handleTaskStatusChange(task.getProcessor(), task.getTaskStatus(), targetTaskStatus); } @@ -67,9 +70,9 @@ public void updateTaskStatus(Long memberId, Long taskId, TaskStatus targetTaskSt public void updateTaskProcessor(Long taskId, Long memberId, UpdateTaskProcessorRequest request) { memberService.findActiveMember(memberId); - Task task = taskService.findById(taskId); + Task task = loadTaskPort.findTaskWithProcessorDepartment(taskId).orElseThrow(()-> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND)); - Member processor = memberService.findActiveMember(request.processorId()); + Member processor = memberService.findActiveMemberWithDepartment(request.processorId()); if (REMAINING_TASK_STATUS.contains(task.getTaskStatus())) { updateProcessorTaskCountService.handleProcessorChange(task.getProcessor(), processor, task.getTaskStatus()); } From 62c99058d1384f82632426201e16328febc652fe Mon Sep 17 00:00:00 2001 From: joowojr Date: Tue, 18 Feb 2025 14:59:36 +0900 Subject: [PATCH 3/5] =?UTF-8?q?CLAP-451=20Fix:=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EC=82=AC=ED=95=AD=EC=97=90=20=EB=94=B0=EB=A5=B8=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #590 --- .../application/service/task/ApprovalTaskServiceTest.java | 4 ++-- .../service/task/UpdateTaskBoardServiceTest.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/java/clap/server/application/service/task/ApprovalTaskServiceTest.java b/src/test/java/clap/server/application/service/task/ApprovalTaskServiceTest.java index 12facf2f..7df78cd9 100644 --- a/src/test/java/clap/server/application/service/task/ApprovalTaskServiceTest.java +++ b/src/test/java/clap/server/application/service/task/ApprovalTaskServiceTest.java @@ -82,7 +82,7 @@ void approvalTask() { when(memberService.findReviewer(reviewerId)).thenReturn(reviewer); when(taskService.findById(taskId)).thenReturn(task); - when(memberService.findActiveMember(approvalTaskRequest.processorId())).thenReturn(processor); + when(memberService.findActiveMemberWithDepartment(approvalTaskRequest.processorId())).thenReturn(processor); when(categoryService.findById(approvalTaskRequest.categoryId())).thenReturn(category); when(taskService.upsert(task)).thenReturn(task); @@ -106,7 +106,7 @@ void approvalTaskWithIncrementTaskCount() { when(memberService.findReviewer(reviewerId)).thenReturn(reviewer); when(taskService.findById(taskId)).thenReturn(task); - when(memberService.findActiveMember(approvalTaskRequest.processorId())).thenReturn(processor); + when(memberService.findActiveMemberWithDepartment(approvalTaskRequest.processorId())).thenReturn(processor); when(categoryService.findById(approvalTaskRequest.categoryId())).thenReturn(category); when(taskService.upsert(task)).thenReturn(task); diff --git a/src/test/java/clap/server/application/service/task/UpdateTaskBoardServiceTest.java b/src/test/java/clap/server/application/service/task/UpdateTaskBoardServiceTest.java index a9782e34..4dd33b3c 100644 --- a/src/test/java/clap/server/application/service/task/UpdateTaskBoardServiceTest.java +++ b/src/test/java/clap/server/application/service/task/UpdateTaskBoardServiceTest.java @@ -57,7 +57,7 @@ void updateTaskOrder_moveToTop() { Task nextTask = mock(Task.class); Task prevTask = mock(Task.class); - when(memberService.findActiveMember(processorId)).thenReturn(processor); + when(memberService.findActiveMemberWithDepartment(processorId)).thenReturn(processor); when(taskService.findById(request.targetTaskId())).thenReturn(targetTask); when(targetTask.getTaskStatus()).thenReturn(taskStatus); when(taskService.findByIdAndStatus(request.nextTaskId(), taskStatus)).thenReturn(nextTask); @@ -87,7 +87,7 @@ void updateTaskOrder_moveToBottom() { Task prevTask = mock(Task.class); Task nextTask = mock(Task.class); - when(memberService.findActiveMember(processorId)).thenReturn(processor); + when(memberService.findActiveMemberWithDepartment(processorId)).thenReturn(processor); when(taskService.findById(request.targetTaskId())).thenReturn(targetTask); when(targetTask.getTaskStatus()).thenReturn(taskStatus); when(taskService.findByIdAndStatus(request.prevTaskId(), taskStatus)).thenReturn(prevTask); @@ -119,7 +119,7 @@ void updateTaskOrder_moveToMiddle() { Task prevTask = mock(Task.class); Task nextTask = mock(Task.class); - when(memberService.findActiveMember(processorId)).thenReturn(processor); + when(memberService.findActiveMemberWithDepartment(processorId)).thenReturn(processor); when(taskService.findById(request.targetTaskId())).thenReturn(targetTask); when(targetTask.getTaskStatus()).thenReturn(taskStatus); when(taskService.findByIdAndStatus(request.prevTaskId(), taskStatus)).thenReturn(prevTask); From 227e7e951e5a21787e12038a65ec9cfa639b1319 Mon Sep 17 00:00:00 2001 From: joowojr Date: Tue, 18 Feb 2025 15:08:39 +0900 Subject: [PATCH 4/5] =?UTF-8?q?CLAP-451=20Fix:=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20stubbing=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #590 --- .../application/service/task/UpdateTaskBoardServiceTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/test/java/clap/server/application/service/task/UpdateTaskBoardServiceTest.java b/src/test/java/clap/server/application/service/task/UpdateTaskBoardServiceTest.java index 4dd33b3c..38de11eb 100644 --- a/src/test/java/clap/server/application/service/task/UpdateTaskBoardServiceTest.java +++ b/src/test/java/clap/server/application/service/task/UpdateTaskBoardServiceTest.java @@ -57,7 +57,6 @@ void updateTaskOrder_moveToTop() { Task nextTask = mock(Task.class); Task prevTask = mock(Task.class); - when(memberService.findActiveMemberWithDepartment(processorId)).thenReturn(processor); when(taskService.findById(request.targetTaskId())).thenReturn(targetTask); when(targetTask.getTaskStatus()).thenReturn(taskStatus); when(taskService.findByIdAndStatus(request.nextTaskId(), taskStatus)).thenReturn(nextTask); @@ -87,7 +86,6 @@ void updateTaskOrder_moveToBottom() { Task prevTask = mock(Task.class); Task nextTask = mock(Task.class); - when(memberService.findActiveMemberWithDepartment(processorId)).thenReturn(processor); when(taskService.findById(request.targetTaskId())).thenReturn(targetTask); when(targetTask.getTaskStatus()).thenReturn(taskStatus); when(taskService.findByIdAndStatus(request.prevTaskId(), taskStatus)).thenReturn(prevTask); @@ -119,7 +117,6 @@ void updateTaskOrder_moveToMiddle() { Task prevTask = mock(Task.class); Task nextTask = mock(Task.class); - when(memberService.findActiveMemberWithDepartment(processorId)).thenReturn(processor); when(taskService.findById(request.targetTaskId())).thenReturn(targetTask); when(targetTask.getTaskStatus()).thenReturn(taskStatus); when(taskService.findByIdAndStatus(request.prevTaskId(), taskStatus)).thenReturn(prevTask); From 1665be3246b7c9abfa7a5b1c3e67704a1daa275e Mon Sep 17 00:00:00 2001 From: joowojr Date: Tue, 18 Feb 2025 15:13:16 +0900 Subject: [PATCH 5/5] =?UTF-8?q?CLAP-451=20Refactor:=20findTaskWithProcesso?= =?UTF-8?q?rDepartment=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #590 --- .../server/application/port/inbound/domain/TaskService.java | 4 ++++ .../application/service/task/TerminateTaskService.java | 3 +-- .../server/application/service/task/UpdateTaskService.java | 5 ++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/clap/server/application/port/inbound/domain/TaskService.java b/src/main/java/clap/server/application/port/inbound/domain/TaskService.java index 2234e667..10c3b7df 100644 --- a/src/main/java/clap/server/application/port/inbound/domain/TaskService.java +++ b/src/main/java/clap/server/application/port/inbound/domain/TaskService.java @@ -28,4 +28,8 @@ public Task upsert(Task task) { public Task findByIdAndStatus(Long taskId, TaskStatus status) { return loadTaskPort.findByIdAndStatus(taskId, status).orElseThrow(() -> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND)); } + + public Task findTaskWithProcessorDepartment(Long taskId){ + return loadTaskPort.findTaskWithProcessorDepartment(taskId).orElseThrow(()-> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND)); + } } diff --git a/src/main/java/clap/server/application/service/task/TerminateTaskService.java b/src/main/java/clap/server/application/service/task/TerminateTaskService.java index 9febdec4..571404b2 100644 --- a/src/main/java/clap/server/application/service/task/TerminateTaskService.java +++ b/src/main/java/clap/server/application/service/task/TerminateTaskService.java @@ -22,14 +22,13 @@ @Transactional public class TerminateTaskService implements TerminateTaskUsecase { private final TaskService taskService; - private final LoadTaskPort loadTaskPort; private final CommandTaskHistoryPort commandTaskHistoryPort; private final SendNotificationService sendNotificationService; private final UpdateProcessorTaskCountService updateProcessorTaskCountService; @Override public void terminateTask(Long memberId, Long taskId, String reason) { - Task task = loadTaskPort.findTaskWithProcessorDepartment(taskId).orElseThrow(()-> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND)); + Task task = taskService.findTaskWithProcessorDepartment(taskId); // 작업 종료의 경우. 작업 반려는 count를 업데이트를 하지 않음 if(task.getProcessor()!=null) { diff --git a/src/main/java/clap/server/application/service/task/UpdateTaskService.java b/src/main/java/clap/server/application/service/task/UpdateTaskService.java index a6ec48b0..d9691871 100644 --- a/src/main/java/clap/server/application/service/task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/service/task/UpdateTaskService.java @@ -33,7 +33,6 @@ @Slf4j public class UpdateTaskService implements UpdateTaskStatusUsecase, UpdateTaskProcessorUsecase { private final MemberService memberService; - private final LoadTaskPort loadTaskPort; private final TaskService taskService; private final SendNotificationService sendNotificationService; private final UpdateProcessorTaskCountService updateProcessorTaskCountService; @@ -43,7 +42,7 @@ public class UpdateTaskService implements UpdateTaskStatusUsecase, UpdateTaskPro @Transactional public void updateTaskStatus(Long memberId, Long taskId, TaskStatus targetTaskStatus) { memberService.findActiveMember(memberId); - Task task = loadTaskPort.findTaskWithProcessorDepartment(taskId).orElseThrow(()-> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND)); + Task task = taskService.findTaskWithProcessorDepartment(taskId); if (!TASK_UPDATABLE_STATUS.contains(targetTaskStatus)) { throw new ApplicationException(TaskErrorCode.TASK_STATUS_NOT_ALLOWED); @@ -70,7 +69,7 @@ public void updateTaskStatus(Long memberId, Long taskId, TaskStatus targetTaskSt public void updateTaskProcessor(Long taskId, Long memberId, UpdateTaskProcessorRequest request) { memberService.findActiveMember(memberId); - Task task = loadTaskPort.findTaskWithProcessorDepartment(taskId).orElseThrow(()-> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND)); + Task task = taskService.findTaskWithProcessorDepartment(taskId); Member processor = memberService.findActiveMemberWithDepartment(request.processorId()); if (REMAINING_TASK_STATUS.contains(task.getTaskStatus())) {