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 @@ -125,4 +125,9 @@ public List<Task> findTasksByMemberIdAndStatus(final Long memberId, final List<T
.collect(Collectors.toList());
}

@Override
public Optional<Task> findTaskWithProcessorDepartment(Long taskId) {
return taskRepository.findTaskWithProcessorDepartment(taskId).map(taskPersistenceMapper::toDomain);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ public List<TaskEntity> 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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,10 @@ Optional<TaskEntity> findTopByProcessor_MemberIdAndTaskStatusAndProcessorOrderAf

Optional<TaskEntity> findTopByProcessor_MemberIdAndTaskStatusAndTaskIdGreaterThanOrderByTaskIdAsc(Long processorId, TaskStatus status, Long taskId);


}
@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<TaskEntity> findTaskWithProcessorDepartment(@Param("taskId") Long taskId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -44,4 +43,14 @@ public List<Member> 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));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -42,4 +40,6 @@ public interface LoadTaskPort {
List<Task> findTeamStatus(Long memberId, FilterTeamStatusRequest filter);

List<Task> findTasksByMemberIdAndStatus(Long memberId, List<TaskStatus> taskStatuses);

Optional<Task> findTaskWithProcessorDepartment(Long taskId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,30 @@
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;

@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());
Expand All @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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);
Expand All @@ -37,7 +36,6 @@ public void sendInvitation(SendInvitationRequest request) {

commandMemberPort.save(member);


sendInvitationEmailService.sendInvitationEmail(
member.getMemberInfo().getEmail(),
member.getMemberInfo().getName(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ 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);
}

@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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import clap.server.domain.model.member.Member;
import lombok.RequiredArgsConstructor;

@Deprecated
@ApplicationService
@RequiredArgsConstructor
public class UpdateNotificationService implements EnableKakaoUsecase, EnableEmailUsecase {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -25,7 +28,7 @@ public class TerminateTaskService implements TerminateTaskUsecase {

@Override
public void terminateTask(Long memberId, Long taskId, String reason) {
Task task = taskService.findById(taskId);
Task task = taskService.findTaskWithProcessorDepartment(taskId);

// 작업 종료의 경우. 작업 반려는 count를 업데이트를 하지 않음
if(task.getProcessor()!=null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
Loading