diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/request/FilterTeamStatusRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/request/FilterTeamStatusRequest.java index 1ce4e159..f7e366d6 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/request/FilterTeamStatusRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/request/FilterTeamStatusRequest.java @@ -1,28 +1,26 @@ package clap.server.adapter.inbound.web.dto.task.request; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import java.util.List; public record FilterTeamStatusRequest( - @Schema(description = "정렬 기준 (기여도순, 기본)", example = "기여도순") - SortBy sortBy, // Enum 타입으로 수정 + @Schema(description = "정렬 기준 (기여도순, 기본)", example = "DEFAULT") + @NotNull + SortBy sortBy, @Schema(description = "1차 카테고리 ID 목록", example = "[10, 20, 30]") + @NotBlank List mainCategoryIds, @Schema(description = "2차 카테고리 ID 목록", example = "[1, 2, 3]") List categoryIds, @Schema(description = "작업 타이틀 검색", example = "타이틀1") + @NotNull String taskTitle ) { - public FilterTeamStatusRequest { - // 기본값 설정 - sortBy = (sortBy == null) ? SortBy.DEFAULT : sortBy; // 기본값을 DEFAULT로 설정 - mainCategoryIds = mainCategoryIds == null ? List.of() : mainCategoryIds; - categoryIds = categoryIds == null ? List.of() : categoryIds; - taskTitle = taskTitle == null ? "" : taskTitle; - } } diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamTaskItemResponse.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamTaskItemResponse.java index 1b52b0d4..bba3eeba 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamTaskItemResponse.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamTaskItemResponse.java @@ -24,5 +24,4 @@ public static record LabelInfo( LabelColor labelColor ) { } - } \ No newline at end of file diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamTaskResponse.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamTaskResponse.java index 3d6526fc..fc3e101e 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamTaskResponse.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamTaskResponse.java @@ -1,7 +1,5 @@ package clap.server.adapter.inbound.web.dto.task.response; -import com.querydsl.core.annotations.QueryProjection; - import java.util.List; public record TeamTaskResponse( @@ -14,8 +12,4 @@ public record TeamTaskResponse( int totalTaskCount, List tasks ) { - @QueryProjection - public TeamTaskResponse { - tasks = (tasks == null) ? List.of() : tasks; - } } diff --git a/src/main/java/clap/server/adapter/inbound/web/history/CommandCommentController.java b/src/main/java/clap/server/adapter/inbound/web/history/CommandCommentController.java index cba5c45b..7203d57b 100644 --- a/src/main/java/clap/server/adapter/inbound/web/history/CommandCommentController.java +++ b/src/main/java/clap/server/adapter/inbound/web/history/CommandCommentController.java @@ -17,7 +17,6 @@ @Tag(name = "03. Task History", description = "히스토리 및 댓글 관련 API") @WebAdapter -@RestController @RequiredArgsConstructor @RequestMapping("/api/comments") public class CommandCommentController { diff --git a/src/main/java/clap/server/adapter/inbound/web/history/FindTaskHistoryController.java b/src/main/java/clap/server/adapter/inbound/web/history/FindTaskHistoryController.java index 276656e4..975171bc 100644 --- a/src/main/java/clap/server/adapter/inbound/web/history/FindTaskHistoryController.java +++ b/src/main/java/clap/server/adapter/inbound/web/history/FindTaskHistoryController.java @@ -20,7 +20,6 @@ @Tag(name = "03. Task History") @WebAdapter -@RestController @RequiredArgsConstructor @RequestMapping("/api/tasks") public class FindTaskHistoryController { diff --git a/src/main/java/clap/server/adapter/inbound/web/history/PostCommentController.java b/src/main/java/clap/server/adapter/inbound/web/history/PostCommentController.java index 26b75c9a..18b020ec 100644 --- a/src/main/java/clap/server/adapter/inbound/web/history/PostCommentController.java +++ b/src/main/java/clap/server/adapter/inbound/web/history/PostCommentController.java @@ -22,9 +22,8 @@ @Tag(name = "03. Task History") @WebAdapter -@RestController @RequiredArgsConstructor -@RequestMapping("/api/comments") +@RequestMapping("/api/tasks") public class PostCommentController { private final SaveCommentUsecase saveCommentUsecase; @@ -32,7 +31,7 @@ public class PostCommentController { @LogType(LogStatus.COMMENT_ADDED) @Operation(summary = "댓글 작성") @Parameter(name = "taskId", description = "댓글 작성할 작업 고유 ID", required = true, in = ParameterIn.PATH) - @PostMapping("/{taskId}") + @PostMapping("/{taskId}/comments") @Secured({"ROLE_MANAGER", "ROLE_USER"}) public void createComment( @AuthenticationPrincipal SecurityUserDetails userInfo, @@ -43,7 +42,7 @@ public void createComment( @Operation(summary = "댓글 작성(첨부 파일)") @Parameter(name = "taskId", description = "댓글 작성할 작업 고유 ID", required = true, in = ParameterIn.PATH) - @PostMapping(value = "/attachment/{taskId}", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) + @PostMapping(value = "/{taskId}/comments/attachment", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) @Secured({"ROLE_MANAGER", "ROLE_USER"}) public void createAttachmentComment( @AuthenticationPrincipal SecurityUserDetails userInfo, diff --git a/src/main/java/clap/server/adapter/inbound/web/label/FindLabelController.java b/src/main/java/clap/server/adapter/inbound/web/label/FindLabelController.java index 7ea56180..8a5b9e26 100644 --- a/src/main/java/clap/server/adapter/inbound/web/label/FindLabelController.java +++ b/src/main/java/clap/server/adapter/inbound/web/label/FindLabelController.java @@ -18,7 +18,6 @@ @Tag(name = "02. Task [조회]", description = "담당자 및 관리자 공통으로 사용") @WebAdapter -@RestController @RequiredArgsConstructor @RequestMapping("/api/labels") public class FindLabelController { diff --git a/src/main/java/clap/server/adapter/inbound/web/log/LogController.java b/src/main/java/clap/server/adapter/inbound/web/log/LogController.java index 63b2df25..9f3d19b7 100644 --- a/src/main/java/clap/server/adapter/inbound/web/log/LogController.java +++ b/src/main/java/clap/server/adapter/inbound/web/log/LogController.java @@ -20,7 +20,6 @@ @Tag(name = "05. Admin [로깅]") @WebAdapter -@RestController @RequestMapping("/api/managements/logs") @RequiredArgsConstructor public class LogController { diff --git a/src/main/java/clap/server/adapter/inbound/web/notification/FindNotificationController.java b/src/main/java/clap/server/adapter/inbound/web/notification/FindNotificationController.java index ccd1e32e..e7b5ab63 100644 --- a/src/main/java/clap/server/adapter/inbound/web/notification/FindNotificationController.java +++ b/src/main/java/clap/server/adapter/inbound/web/notification/FindNotificationController.java @@ -23,7 +23,6 @@ @Tag(name = "04. Notification") @WebAdapter -@RestController @RequestMapping("/api/notifications") @RequiredArgsConstructor public class FindNotificationController { diff --git a/src/main/java/clap/server/adapter/inbound/web/notification/ManagementNotificationController.java b/src/main/java/clap/server/adapter/inbound/web/notification/ManagementNotificationController.java index 70b4fa84..caf3e710 100644 --- a/src/main/java/clap/server/adapter/inbound/web/notification/ManagementNotificationController.java +++ b/src/main/java/clap/server/adapter/inbound/web/notification/ManagementNotificationController.java @@ -16,7 +16,6 @@ @Tag(name = "04. Notification") @WebAdapter -@RestController @RequestMapping("/api/notifications") @RequiredArgsConstructor public class ManagementNotificationController { diff --git a/src/main/java/clap/server/adapter/inbound/web/notification/SubscribeEmitterController.java b/src/main/java/clap/server/adapter/inbound/web/notification/SubscribeEmitterController.java index d557a768..aa09476d 100644 --- a/src/main/java/clap/server/adapter/inbound/web/notification/SubscribeEmitterController.java +++ b/src/main/java/clap/server/adapter/inbound/web/notification/SubscribeEmitterController.java @@ -16,7 +16,6 @@ @Tag(name = "SSE 관리 - 회원 등록(최초 접속시)") @WebAdapter -@RestController @RequestMapping("/api/sse") @RequiredArgsConstructor public class SubscribeEmitterController { diff --git a/src/main/java/clap/server/adapter/inbound/web/statistics/FindStatisticsController.java b/src/main/java/clap/server/adapter/inbound/web/statistics/FindStatisticsController.java index 76e2b7ed..63514fba 100644 --- a/src/main/java/clap/server/adapter/inbound/web/statistics/FindStatisticsController.java +++ b/src/main/java/clap/server/adapter/inbound/web/statistics/FindStatisticsController.java @@ -40,12 +40,12 @@ public ResponseEntity> aggregateTaskStatistics(@Request return switch (statisticsType) { case REQUEST_BY_PERIOD -> ResponseEntity.ok(findTaskProcessUsecase.aggregatePeriodTaskRequest(periodType.getType())); - case PROCESS_BY_PERIOD -> ResponseEntity.ok(findTaskProcessUsecase - .aggregatePeriodTaskProcess(periodType.getType())); + case PROCESS_BY_PERIOD -> + ResponseEntity.ok(findTaskProcessUsecase.aggregatePeriodTaskProcess(periodType.getType())); case REQUEST_BY_CATEGORY -> ResponseEntity.ok(findTaskProcessUsecase.aggregateCategoryTaskRequest(periodType.getType())); - case PROCESS_BY_MANAGER -> ResponseEntity.ok(findTaskProcessUsecase - .aggregateManagerTaskProcess(periodType.getType())); + case PROCESS_BY_MANAGER -> + ResponseEntity.ok(findTaskProcessUsecase.aggregateManagerTaskProcess(periodType.getType())); default -> throw new StatisticsException(STATISTICS_BAD_REQUEST); }; } diff --git a/src/main/java/clap/server/adapter/inbound/web/task/ChangeTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/ChangeTaskController.java index ae11dcd6..82b3bf21 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/ChangeTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/ChangeTaskController.java @@ -28,7 +28,6 @@ @Tag(name = "02. Task [검토자]") @WebAdapter -@RestController @RequiredArgsConstructor @RequestMapping("/api/tasks") public class ChangeTaskController { diff --git a/src/main/java/clap/server/adapter/inbound/web/task/FindApprovalTaskFormController.java b/src/main/java/clap/server/adapter/inbound/web/task/FindApprovalTaskFormController.java index 80073d07..0f037c92 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/FindApprovalTaskFormController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/FindApprovalTaskFormController.java @@ -14,7 +14,6 @@ @Tag(name = "02. Task [조회]", description = "작업 조회 API") @WebAdapter -@RestController @RequiredArgsConstructor @RequestMapping("/api/tasks") public class FindApprovalTaskFormController { diff --git a/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java index 2aeae1fb..a5abd243 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java @@ -23,7 +23,6 @@ @Tag(name = "02. Task [조회]", description = "작업 조회 API") @WebAdapter -@RestController @RequiredArgsConstructor @RequestMapping("/api/tasks") public class FindTaskController { diff --git a/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java index e0747b68..b721536e 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java @@ -31,7 +31,6 @@ @Tag(name = "02. Task [생성/수정]", description = "작업 생성/수정 API") @WebAdapter -@RestController @RequiredArgsConstructor @RequestMapping("/api/tasks") public class ManagementTaskController { diff --git a/src/main/java/clap/server/adapter/inbound/web/task/TaskBoardController.java b/src/main/java/clap/server/adapter/inbound/web/task/TaskBoardController.java index ee7ed370..e08939fd 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/TaskBoardController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/TaskBoardController.java @@ -24,7 +24,6 @@ @Tag(name = "02. Task [담당자]") @WebAdapter -@RestController @RequiredArgsConstructor @RequestMapping("/api/task-board") public class TaskBoardController { diff --git a/src/main/java/clap/server/adapter/inbound/web/task/TeamStatusController.java b/src/main/java/clap/server/adapter/inbound/web/task/TeamStatusController.java index e307c88e..8b07fe47 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/TeamStatusController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/TeamStatusController.java @@ -2,10 +2,11 @@ import clap.server.adapter.inbound.web.dto.task.request.FilterTeamStatusRequest; import clap.server.adapter.inbound.web.dto.task.response.TeamStatusResponse; -import clap.server.application.service.task.TeamStatusService; +import clap.server.application.port.inbound.task.FilterTeamStatusUsecase; import clap.server.common.annotation.architecture.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.security.access.annotation.Secured; @@ -20,13 +21,13 @@ @RequiredArgsConstructor @WebAdapter public class TeamStatusController { + private final FilterTeamStatusUsecase filterTeamStatusUsecase; - private final TeamStatusService teamStatusService; - @Operation(summary = "팀 현황 필터링 조회 API") - @GetMapping("/filter") + @Operation(summary = "팀 현황 조회 API") + @GetMapping() @Secured("ROLE_MANAGER") - public ResponseEntity filterTeamStatus(@ModelAttribute FilterTeamStatusRequest filter) { - TeamStatusResponse response = teamStatusService.filterTeamStatus(filter); + public ResponseEntity filterTeamStatus(@ModelAttribute @Valid FilterTeamStatusRequest filter) { + TeamStatusResponse response = filterTeamStatusUsecase.filterTeamStatus(filter); return ResponseEntity.ok(response != null ? response : new TeamStatusResponse(List.of(), 0, 0, 0)); } diff --git a/src/main/java/clap/server/adapter/inbound/web/task/TerminateTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/TerminateTaskController.java index 9a9a20d4..36208ce6 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/TerminateTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/TerminateTaskController.java @@ -15,7 +15,6 @@ @Tag(name = "02. Task [거부 & 종료]") @WebAdapter -@RestController @RequiredArgsConstructor @RequestMapping("/api/tasks") public class TerminateTaskController { diff --git a/src/main/java/clap/server/adapter/outbound/persistense/NotificationPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/NotificationPersistenceAdapter.java index 3f3098ac..05d7537d 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/NotificationPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/NotificationPersistenceAdapter.java @@ -1,10 +1,7 @@ package clap.server.adapter.outbound.persistense; -import clap.server.adapter.inbound.web.dto.common.SliceResponse; -import clap.server.adapter.inbound.web.dto.notification.response.FindNotificationListResponse; import clap.server.adapter.outbound.persistense.mapper.NotificationPersistenceMapper; import clap.server.adapter.outbound.persistense.repository.notification.NotificationRepository; -import clap.server.application.mapper.NotificationMapper; import clap.server.application.port.outbound.notification.CommandNotificationPort; import clap.server.application.port.outbound.notification.LoadNotificationPort; import clap.server.common.annotation.architecture.PersistenceAdapter; @@ -32,14 +29,10 @@ public Optional findById(Long notificationId) { } @Override - public SliceResponse findAllByReceiverId(Long receiverId, Pageable pageable) { - Slice notificationList = notificationRepository + public Slice findAllByReceiverId(Long receiverId, Pageable pageable) { + return notificationRepository .findAllByReceiver_MemberIdOrderByCreatedAtDesc(receiverId, pageable) .map(notificationPersistenceMapper::toDomain); - - return NotificationMapper.toSliceOfFindNoticeListResponse( - notificationList.map(NotificationMapper::toFindNoticeListResponse) - ); } @Override 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 ab03cac5..2a485511 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java @@ -106,14 +106,15 @@ public Optional findNextOrderTaskByTaskIdAndStatus(Long processorId, TaskS @Override public List findTaskBoardByFilter(Long processorId, List statuses, LocalDateTime fromDate, FilterTaskBoardRequest request) { - return taskRepository.findTasksByFilter(processorId, statuses, fromDate, request) + return taskRepository.findTasksByFilter(processorId, statuses, fromDate, request) .stream() .map(taskPersistenceMapper::toDomain).toList(); } @Override - public List findTeamStatus(Long memberId, FilterTeamStatusRequest filter) { - return taskRepository.findTeamStatus(memberId, filter); + public List findTeamStatus(Long memberId, FilterTeamStatusRequest filter) { + return taskRepository.findTeamStatus(memberId, filter).stream() + .map(taskPersistenceMapper::toDomain).toList(); } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java index dfcd6fe3..3fb983fd 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java @@ -15,7 +15,7 @@ public interface TaskCustomRepository { Page findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest); - List findTeamStatus(Long memberId, FilterTeamStatusRequest filter); + List findTeamStatus(Long memberId, FilterTeamStatusRequest filter); Page findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest); Page findAllTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest); List findTasksByFilter(Long processorId, List statuses, LocalDateTime localDateTime, FilterTaskBoardRequest request); 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 aa36df9b..7f9a026d 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 @@ -8,6 +8,7 @@ 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 com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.dsl.DateTimePath; @@ -58,8 +59,15 @@ public Page findTasksAssignedByManager(Long processorId, Pageable pa } @Override - public List findTeamStatus(Long memberId, FilterTeamStatusRequest filter) { - // filter가 null인 경우에도 기본적으로 모든 데이터를 조회하도록 처리 + public List findTeamStatus(Long memberId, FilterTeamStatusRequest filter) { + BooleanBuilder builder = createFilterBuilder(memberId, filter); + return queryFactory + .selectFrom(taskEntity) + .where(builder) + .fetch(); + } + + private BooleanBuilder createFilterBuilder(Long memberId, FilterTeamStatusRequest filter) { BooleanBuilder builder = new BooleanBuilder(); // 필터가 null인 경우, 기본적으로 모든 데이터 조회 @@ -87,74 +95,7 @@ public List findTeamStatus(Long memberId, FilterTeamStatusRequ builder.and(taskEntity.category.categoryId.in(filter.categoryIds())); } } - - // 정렬 조건 적용 - SortBy sortBy = (filter != null && filter.sortBy() != null) ? filter.sortBy() : SortBy.DEFAULT; - - assert filter != null; - // 쿼리 실행 - List taskEntities = queryFactory - .selectFrom(taskEntity) - .where(builder) - .fetch(); - - // null 또는 빈 리스트 처리 - if (taskEntities == null || taskEntities.isEmpty()) { - return List.of(); // 빈 리스트 반환 - } - - List members = taskEntities.stream() - .collect(Collectors.groupingBy(t -> t.getProcessor().getMemberId(), LinkedHashMap::new, Collectors.toList())) - .entrySet().stream() - .map(entry -> { - List taskResponses = entry.getValue().stream() - .map(taskEntity -> new TeamTaskItemResponse( - taskEntity.getTaskId(), - taskEntity.getTaskCode(), - taskEntity.getTitle(), - taskEntity.getCategory().getMainCategory().getName(), - taskEntity.getCategory().getName(), - taskEntity.getLabel() != null ? - new TeamTaskItemResponse.LabelInfo( - taskEntity.getLabel().getLabelName(), - taskEntity.getLabel().getLabelColor() - ) : null, - taskEntity.getRequester().getNickname(), - taskEntity.getRequester().getImageUrl(), - taskEntity.getRequester().getDepartment().getName(), - taskEntity.getProcessorOrder(), - taskEntity.getTaskStatus(), - taskEntity.getCreatedAt() - )).collect(Collectors.toList()); - - int inProgressTaskCount = (int) entry.getValue().stream().filter(t -> t.getTaskStatus() == TaskStatus.IN_PROGRESS).count(); - int inReviewingTaskCount = (int) entry.getValue().stream().filter(t -> t.getTaskStatus() == TaskStatus.IN_REVIEWING).count(); - int totalTaskCount = inProgressTaskCount + inReviewingTaskCount; - - return new TeamTaskResponse( - entry.getKey(), - entry.getValue().get(0).getProcessor().getNickname(), - entry.getValue().get(0).getProcessor().getImageUrl(), - entry.getValue().get(0).getProcessor().getDepartment().getName(), - (int) entry.getValue().stream().filter(t -> t.getTaskStatus() == TaskStatus.IN_PROGRESS).count(), - (int) entry.getValue().stream().filter(t -> t.getTaskStatus() == TaskStatus.IN_REVIEWING).count(), - entry.getValue().size(), - taskResponses - ); - }).collect(Collectors.toList()); - - // 기여도순 (진행 중 + 검토 중 작업 개수 합 기준 내림차순) - if (sortBy.equals(CONTRIBUTE)) members.sort((a, b) -> b.totalTaskCount() - a.totalTaskCount()); - // 기본순 (닉네임 오름차순) - else members.sort(Comparator.comparing(TeamTaskResponse::nickname)); - - return members; - } - - - - private boolean isValidTitle(FilterTeamStatusRequest filter) { - return filter.taskTitle() != null && !filter.taskTitle().isEmpty(); + return builder; } @Override 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 cf2c4ab5..53d4c271 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 @@ -49,9 +49,6 @@ List findTasksWithTaskStatusAndCompletedAt( Optional findTopByProcessor_MemberIdAndTaskStatusAndProcessorOrderAfterOrderByProcessorOrderAsc( Long processorId, TaskStatus taskStatus, Long processorOrder); -// @Query("SELECT t FROM TaskEntity t JOIN FETCH t.processor p WHERE (:memberId IS NULL OR p.memberId = :memberId) ") - List findTeamStatus(@Param("memberId") Long memberId, FilterTeamStatusRequest filter); - Optional findTopByProcessor_MemberIdAndTaskStatusAndTaskIdLessThanOrderByTaskIdDesc(Long processorId, TaskStatus taskStatus, Long taskId); Optional findTopByProcessor_MemberIdAndTaskStatusAndTaskIdGreaterThanOrderByTaskIdAsc(Long processorId, TaskStatus status, Long taskId); diff --git a/src/main/java/clap/server/application/mapper/AttachmentMapper.java b/src/main/java/clap/server/application/mapper/AttachmentMapper.java index cb0326c7..121dd9fe 100644 --- a/src/main/java/clap/server/application/mapper/AttachmentMapper.java +++ b/src/main/java/clap/server/application/mapper/AttachmentMapper.java @@ -1,8 +1,6 @@ package clap.server.application.mapper; -import clap.server.adapter.inbound.web.dto.task.response.AttachmentResponse; import clap.server.domain.model.task.Attachment; -import clap.server.domain.model.task.Comment; import clap.server.domain.model.task.Task; import org.springframework.web.multipart.MultipartFile; @@ -10,7 +8,6 @@ import java.util.stream.IntStream; import static clap.server.domain.model.task.Attachment.createAttachment; -import static clap.server.domain.model.task.Attachment.createCommentAttachment; public class AttachmentMapper { private AttachmentMapper() { @@ -28,18 +25,5 @@ public static List toTaskAttachments(Task task, List .toList(); } - - public static List toAttachmentResponseList(List attachments) { - return attachments.stream() - .map(attachment -> new AttachmentResponse( - attachment.getAttachmentId(), - attachment.getOriginalName(), - attachment.getFileSize(), - attachment.getFileUrl(), - attachment.getCreatedAt() - )) - .toList(); - } - } diff --git a/src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java b/src/main/java/clap/server/application/mapper/response/AdminResponseMapper.java similarity index 63% rename from src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java rename to src/main/java/clap/server/application/mapper/response/AdminResponseMapper.java index 9bc5490b..68bf27c9 100644 --- a/src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java +++ b/src/main/java/clap/server/application/mapper/response/AdminResponseMapper.java @@ -1,20 +1,22 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse; import clap.server.domain.model.member.Member; -import org.springframework.stereotype.Component; import java.util.List; -@Component -public class RetrieveAllMemberMapper { - public List toResponseList(List members) { +public class AdminResponseMapper { + private AdminResponseMapper() { + throw new IllegalStateException("Utility class"); + } + + public static List toResponseList(List members) { return members.stream() - .map(this::toResponse) + .map(AdminResponseMapper::toRetrieveAllMemberResponse) .toList(); } - public RetrieveAllMemberResponse toResponse(Member member) { + public static RetrieveAllMemberResponse toRetrieveAllMemberResponse(Member member) { return new RetrieveAllMemberResponse( member.getMemberId(), member.getMemberInfo().getName(), @@ -27,4 +29,4 @@ public RetrieveAllMemberResponse toResponse(Member member) { member.getCreatedAt() ); } -} \ No newline at end of file +} diff --git a/src/main/java/clap/server/application/mapper/response/AttachmentResponseMapper.java b/src/main/java/clap/server/application/mapper/response/AttachmentResponseMapper.java new file mode 100644 index 00000000..0dffaef0 --- /dev/null +++ b/src/main/java/clap/server/application/mapper/response/AttachmentResponseMapper.java @@ -0,0 +1,24 @@ +package clap.server.application.mapper.response; + +import clap.server.adapter.inbound.web.dto.task.response.AttachmentResponse; +import clap.server.domain.model.task.Attachment; + +import java.util.List; + +public class AttachmentResponseMapper { + private AttachmentResponseMapper() { + throw new IllegalArgumentException("Utility class"); + } + + public static List toAttachmentResponseList(List attachments) { + return attachments.stream() + .map(attachment -> new AttachmentResponse( + attachment.getAttachmentId(), + attachment.getOriginalName(), + attachment.getFileSize(), + attachment.getFileUrl(), + attachment.getCreatedAt() + )) + .toList(); + } +} diff --git a/src/main/java/clap/server/application/mapper/AuthResponseMapper.java b/src/main/java/clap/server/application/mapper/response/AuthResponseMapper.java similarity index 77% rename from src/main/java/clap/server/application/mapper/AuthResponseMapper.java rename to src/main/java/clap/server/application/mapper/response/AuthResponseMapper.java index b423a4ab..dd4869e9 100644 --- a/src/main/java/clap/server/application/mapper/AuthResponseMapper.java +++ b/src/main/java/clap/server/application/mapper/response/AuthResponseMapper.java @@ -1,14 +1,12 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.auth.response.LoginResponse; -import clap.server.adapter.inbound.web.dto.auth.response.MemberInfoResponse; import clap.server.adapter.inbound.web.dto.auth.response.ReissueTokenResponse; import clap.server.domain.model.auth.CustomJwts; -import clap.server.domain.model.member.Member; public class AuthResponseMapper { private AuthResponseMapper() { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("Utility class"); } public static LoginResponse toLoginResponse(final String accessToken, final String refreshToken) { diff --git a/src/main/java/clap/server/application/mapper/CategoryResponseMapper.java b/src/main/java/clap/server/application/mapper/response/CategoryResponseMapper.java similarity index 89% rename from src/main/java/clap/server/application/mapper/CategoryResponseMapper.java rename to src/main/java/clap/server/application/mapper/response/CategoryResponseMapper.java index 54f4cf9c..3be73c7d 100644 --- a/src/main/java/clap/server/application/mapper/CategoryResponseMapper.java +++ b/src/main/java/clap/server/application/mapper/response/CategoryResponseMapper.java @@ -1,4 +1,4 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.admin.response.FindAllCategoryResponse; import clap.server.adapter.inbound.web.dto.admin.response.FindMainCategoryResponse; @@ -8,6 +8,7 @@ import java.util.List; public class CategoryResponseMapper { + private CategoryResponseMapper() {throw new IllegalStateException("Utility class");} public static FindAllCategoryResponse toFindAllCategoryResponse( Long id, diff --git a/src/main/java/clap/server/application/mapper/DepartmentResponseMapper.java b/src/main/java/clap/server/application/mapper/response/DepartmentResponseMapper.java similarity index 71% rename from src/main/java/clap/server/application/mapper/DepartmentResponseMapper.java rename to src/main/java/clap/server/application/mapper/response/DepartmentResponseMapper.java index d52a0a60..0c115702 100644 --- a/src/main/java/clap/server/application/mapper/DepartmentResponseMapper.java +++ b/src/main/java/clap/server/application/mapper/response/DepartmentResponseMapper.java @@ -1,9 +1,12 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.admin.response.FindAllDepartmentsResponse; import clap.server.domain.model.member.Department; public class DepartmentResponseMapper { + private DepartmentResponseMapper() { + throw new IllegalStateException("Utility class"); + } public static FindAllDepartmentsResponse toFindAllDepartmentsResponse(Department department) { return new FindAllDepartmentsResponse(department.getDepartmentId(), department.getName()); } diff --git a/src/main/java/clap/server/application/mapper/LabelResponseMapper.java b/src/main/java/clap/server/application/mapper/response/LabelResponseMapper.java similarity index 80% rename from src/main/java/clap/server/application/mapper/LabelResponseMapper.java rename to src/main/java/clap/server/application/mapper/response/LabelResponseMapper.java index b1a26d5a..3b5be2df 100644 --- a/src/main/java/clap/server/application/mapper/LabelResponseMapper.java +++ b/src/main/java/clap/server/application/mapper/response/LabelResponseMapper.java @@ -1,4 +1,4 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.label.response.FindLabelListResponse; import clap.server.domain.model.task.Label; @@ -6,7 +6,7 @@ public class LabelResponseMapper { private LabelResponseMapper() { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("Utility class"); } public static FindLabelListResponse toFindLabelListResponse(Label label) { diff --git a/src/main/java/clap/server/application/mapper/LogMapper.java b/src/main/java/clap/server/application/mapper/response/LogResponseMapper.java similarity index 86% rename from src/main/java/clap/server/application/mapper/LogMapper.java rename to src/main/java/clap/server/application/mapper/response/LogResponseMapper.java index 04e494ae..0c6ea191 100644 --- a/src/main/java/clap/server/application/mapper/LogMapper.java +++ b/src/main/java/clap/server/application/mapper/response/LogResponseMapper.java @@ -1,11 +1,14 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.log.response.AnonymousLogResponse; import clap.server.adapter.inbound.web.dto.log.response.MemberLogResponse; import clap.server.domain.model.log.AnonymousLog; import clap.server.domain.model.log.MemberLog; -public class LogMapper { +public class LogResponseMapper { + private LogResponseMapper() { + throw new IllegalStateException("Utility class"); + } public static AnonymousLogResponse toAnonymousLogResponse(AnonymousLog anonymousLog) { return new AnonymousLogResponse( anonymousLog.getLogId(), diff --git a/src/main/java/clap/server/application/mapper/MemberResponseMapper.java b/src/main/java/clap/server/application/mapper/response/MemberResponseMapper.java similarity index 96% rename from src/main/java/clap/server/application/mapper/MemberResponseMapper.java rename to src/main/java/clap/server/application/mapper/response/MemberResponseMapper.java index 518ec7dc..39b07923 100644 --- a/src/main/java/clap/server/application/mapper/MemberResponseMapper.java +++ b/src/main/java/clap/server/application/mapper/response/MemberResponseMapper.java @@ -1,4 +1,4 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.admin.response.MemberDetailsResponse; @@ -9,7 +9,7 @@ public class MemberResponseMapper { private MemberResponseMapper() { - throw new IllegalArgumentException(); + throw new IllegalStateException("Utility class"); } public static MemberProfileResponse toMemberProfileResponse(Member member) { diff --git a/src/main/java/clap/server/application/mapper/NotificationMapper.java b/src/main/java/clap/server/application/mapper/response/NotificationResponseMapper.java similarity index 85% rename from src/main/java/clap/server/application/mapper/NotificationMapper.java rename to src/main/java/clap/server/application/mapper/response/NotificationResponseMapper.java index 4cc1b150..eff87496 100644 --- a/src/main/java/clap/server/application/mapper/NotificationMapper.java +++ b/src/main/java/clap/server/application/mapper/response/NotificationResponseMapper.java @@ -1,4 +1,4 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.common.SliceResponse; import clap.server.adapter.inbound.web.dto.notification.response.CountNotificationResponse; @@ -6,8 +6,8 @@ import clap.server.domain.model.notification.Notification; import org.springframework.data.domain.Slice; -public class NotificationMapper { - private NotificationMapper() {throw new IllegalArgumentException();} +public class NotificationResponseMapper { + private NotificationResponseMapper() {throw new IllegalStateException("Utility class");} public static FindNotificationListResponse toFindNoticeListResponse(Notification notification) { return new FindNotificationListResponse( @@ -31,9 +31,9 @@ public static SliceResponse toSliceOfFindNoticeLis ); } - public static CountNotificationResponse toCountNotificationResponse(Long userId, Integer count) { + public static CountNotificationResponse toCountNotificationResponse(Long memberId, Integer count) { return new CountNotificationResponse( - userId, + memberId, count ); } diff --git a/src/main/java/clap/server/application/mapper/FindTaskStatisticsMapper.java b/src/main/java/clap/server/application/mapper/response/StatisticsResponseMapper.java similarity index 66% rename from src/main/java/clap/server/application/mapper/FindTaskStatisticsMapper.java rename to src/main/java/clap/server/application/mapper/response/StatisticsResponseMapper.java index c1a226f2..0b6f4aa7 100644 --- a/src/main/java/clap/server/application/mapper/FindTaskStatisticsMapper.java +++ b/src/main/java/clap/server/application/mapper/response/StatisticsResponseMapper.java @@ -1,13 +1,13 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.statistics.StatisticsResponse; import java.util.List; import java.util.Map; -public class FindTaskStatisticsMapper { - private FindTaskStatisticsMapper() { - throw new IllegalArgumentException(); +public class StatisticsResponseMapper { + private StatisticsResponseMapper() { + throw new IllegalArgumentException("Utility class"); } public static List toStatisticsResponse(Map map){ diff --git a/src/main/java/clap/server/application/mapper/TaskHistoryResponseMapper.java b/src/main/java/clap/server/application/mapper/response/TaskHistoryResponseMapper.java similarity index 97% rename from src/main/java/clap/server/application/mapper/TaskHistoryResponseMapper.java rename to src/main/java/clap/server/application/mapper/response/TaskHistoryResponseMapper.java index 1330e3af..bf65372d 100644 --- a/src/main/java/clap/server/application/mapper/TaskHistoryResponseMapper.java +++ b/src/main/java/clap/server/application/mapper/response/TaskHistoryResponseMapper.java @@ -1,4 +1,4 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.history.response.FindTaskHistoryResponse; @@ -11,7 +11,7 @@ public class TaskHistoryResponseMapper { private TaskHistoryResponseMapper() { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("Utility class"); } public static FindTaskHistoryResponse toFindTaskHistoryResponse(List taskHistories, List attachments) { diff --git a/src/main/java/clap/server/application/mapper/TaskResponseMapper.java b/src/main/java/clap/server/application/mapper/response/TaskResponseMapper.java similarity index 73% rename from src/main/java/clap/server/application/mapper/TaskResponseMapper.java rename to src/main/java/clap/server/application/mapper/response/TaskResponseMapper.java index 1d3effdb..0f2a12f3 100644 --- a/src/main/java/clap/server/application/mapper/TaskResponseMapper.java +++ b/src/main/java/clap/server/application/mapper/response/TaskResponseMapper.java @@ -1,9 +1,7 @@ -package clap.server.application.mapper; +package clap.server.application.mapper.response; import clap.server.adapter.inbound.web.dto.task.response.*; -import clap.server.adapter.outbound.persistense.entity.task.LabelEntity; -import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; import clap.server.domain.model.member.Member; import clap.server.domain.model.task.Attachment; @@ -15,8 +13,6 @@ import java.util.Map; import java.util.stream.Collectors; -import static clap.server.application.mapper.AttachmentMapper.toAttachmentResponseList; - public class TaskResponseMapper { private TaskResponseMapper() { throw new IllegalArgumentException(); @@ -74,7 +70,7 @@ public static FilterPendingApprovalResponse toFilterPendingApprovalTasksResponse } public static FindTaskDetailsResponse toFindTaskDetailResponse(Task task, List attachments) { - List attachmentResponses = toAttachmentResponseList(attachments); + List attachmentResponses = AttachmentResponseMapper.toAttachmentResponseList(attachments); return new FindTaskDetailsResponse( task.getTaskId(), task.getTaskCode(), @@ -158,7 +154,7 @@ public static TaskItemResponse.LabelInfo toLabelInfo(Label label) { } public static FindTaskDetailsForManagerResponse toFindTaskDetailForManagerResponse(Task task, List attachments) { - List attachmentResponses = toAttachmentResponseList(attachments); + List attachmentResponses = AttachmentResponseMapper.toAttachmentResponseList(attachments); return new FindTaskDetailsForManagerResponse( task.getTaskId(), task.getTaskCode(), @@ -196,60 +192,4 @@ public static FindManagersResponse toFindManagersResponse(Member manager, int re ); } - public static TeamStatusResponse toTeamStatusResponse(List taskEntities) { - // 담당자별로 그룹화 - Map> tasksByProcessor = taskEntities.stream() - .collect(Collectors.groupingBy(taskEntity -> taskEntity.getProcessor().getMemberId())); - - List memberResponses = tasksByProcessor.entrySet().stream() - .map(entry -> { - List teamtaskItemResponses = entry.getValue().stream() - .map(TaskResponseMapper::toTeamTaskItemResponse) - .collect(Collectors.toList()); - - return new TeamTaskResponse( - entry.getKey(), - entry.getValue().get(0).getProcessor().getNickname(), - entry.getValue().get(0).getProcessor().getImageUrl(), - entry.getValue().get(0).getProcessor().getDepartment().getName(), - (int) entry.getValue().stream().filter(t -> t.getTaskStatus() == TaskStatus.IN_PROGRESS).count(), - (int) entry.getValue().stream().filter(t -> t.getTaskStatus() == TaskStatus.IN_REVIEWING).count(), - entry.getValue().size(), - teamtaskItemResponses - ); - }) - .collect(Collectors.toList()); - - return new TeamStatusResponse(memberResponses); - } - - public static TeamTaskItemResponse toTeamTaskItemResponse(TaskEntity taskEntity) { - return new TeamTaskItemResponse( - taskEntity.getTaskId(), - taskEntity.getTaskCode(), - taskEntity.getTitle(), - taskEntity.getCategory().getMainCategory().getName(), - taskEntity.getCategory().getName(), - taskEntity.getLabel() != null ? toLabelInfo(taskEntity.getLabel()) : null, - taskEntity.getRequester().getNickname(), - taskEntity.getRequester().getImageUrl(), - taskEntity.getRequester().getDepartment().getName(), - taskEntity.getProcessorOrder(), - taskEntity.getTaskStatus(), - taskEntity.getCreatedAt() - ); - } - - public static TeamTaskItemResponse.LabelInfo toLabelInfo(LabelEntity label) { // Label → LabelEntity로 변경 - return new TeamTaskItemResponse.LabelInfo( - label.getLabelName(), - label.getLabelColor() - ); - } - - - - - - } diff --git a/src/main/java/clap/server/application/mapper/response/TeamTaskResponseMapper.java b/src/main/java/clap/server/application/mapper/response/TeamTaskResponseMapper.java new file mode 100644 index 00000000..01c52d91 --- /dev/null +++ b/src/main/java/clap/server/application/mapper/response/TeamTaskResponseMapper.java @@ -0,0 +1,68 @@ +package clap.server.application.mapper.response; + +import clap.server.adapter.inbound.web.dto.task.response.TeamTaskItemResponse; +import clap.server.adapter.inbound.web.dto.task.response.TeamTaskResponse; +import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; +import clap.server.domain.model.task.Task; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class TeamTaskResponseMapper { + + public static List toTeamTaskResponses(List tasks) { + return tasks.stream() + .collect(Collectors.groupingBy(t -> t.getProcessor().getMemberId(), LinkedHashMap::new, Collectors.toList())) + .entrySet().stream() + .map(TeamTaskResponseMapper::toTeamTaskResponse) + .collect(Collectors.toList()); + } + + private static TeamTaskResponse toTeamTaskResponse(Map.Entry> entry) { + List taskResponses = entry.getValue().stream() + .map(TeamTaskResponseMapper::toTeamTaskItemResponse) + .collect(Collectors.toList()); + + int inProgressTaskCount = (int) entry.getValue().stream().filter(t -> t.getTaskStatus() == TaskStatus.IN_PROGRESS).count(); + int inReviewingTaskCount = (int) entry.getValue().stream().filter(t -> t.getTaskStatus() == TaskStatus.IN_REVIEWING).count(); + + Task firstTask = entry.getValue().get(0); + return new TeamTaskResponse( + entry.getKey(), + firstTask.getProcessor().getNickname(), + firstTask.getProcessor().getImageUrl(), + firstTask.getProcessor().getDepartment().getName(), + inProgressTaskCount, + inReviewingTaskCount, + entry.getValue().size(), + taskResponses + ); + } + + private static TeamTaskItemResponse toTeamTaskItemResponse(Task task) { + return new TeamTaskItemResponse( + task.getTaskId(), + task.getTaskCode(), + task.getTitle(), + task.getCategory().getMainCategory().getName(), + task.getCategory().getName(), + toLabelInfo(task), + task.getRequester().getNickname(), + task.getRequester().getImageUrl(), + task.getRequester().getDepartment().getName(), + task.getProcessorOrder(), + task.getTaskStatus(), + task.getCreatedAt() + ); + } + + private static TeamTaskItemResponse.LabelInfo toLabelInfo(Task task) { + return task.getLabel() != null ? + new TeamTaskItemResponse.LabelInfo( + task.getLabel().getLabelName(), + task.getLabel().getLabelColor() + ) : null; + } +} diff --git a/src/main/java/clap/server/application/port/inbound/domain/LogService.java b/src/main/java/clap/server/application/port/inbound/domain/LogService.java index 8071143a..8b46c6ae 100644 --- a/src/main/java/clap/server/application/port/inbound/domain/LogService.java +++ b/src/main/java/clap/server/application/port/inbound/domain/LogService.java @@ -29,8 +29,8 @@ public void createAnonymousLog(HttpServletRequest request, int statusCode, Stri commandLogPort.saveAnonymousLog(anonymousLog); } - public void createMemberLog(HttpServletRequest request, int statusCode, String customCode,LogStatus logStatus, Object responseBody, String requestBody, Long userId) { - Member member = memberService.findById(userId); + public void createMemberLog(HttpServletRequest request, int statusCode, String customCode,LogStatus logStatus, Object responseBody, String requestBody, Long memberId) { + Member member = memberService.findById(memberId); MemberLog memberLog = MemberLog.createMemberLog(request, statusCode, customCode, logStatus, responseBody, requestBody, member); commandLogPort.saveMemberLog(memberLog); } diff --git a/src/main/java/clap/server/application/port/inbound/history/DeleteCommentUsecase.java b/src/main/java/clap/server/application/port/inbound/history/DeleteCommentUsecase.java index 1355faf4..9897b204 100644 --- a/src/main/java/clap/server/application/port/inbound/history/DeleteCommentUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/history/DeleteCommentUsecase.java @@ -2,5 +2,5 @@ public interface DeleteCommentUsecase { - void deleteComment(Long userId, Long commentId); + void deleteComment(Long memberId, Long commentId); } diff --git a/src/main/java/clap/server/application/port/inbound/history/EditCommentUsecase.java b/src/main/java/clap/server/application/port/inbound/history/EditCommentUsecase.java index 4de7eb1b..8d74a7a4 100644 --- a/src/main/java/clap/server/application/port/inbound/history/EditCommentUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/history/EditCommentUsecase.java @@ -4,5 +4,5 @@ public interface EditCommentUsecase { - void editComment(Long userId, Long commentId, EditCommentRequest request); + void editComment(Long memberId, Long commentId, EditCommentRequest request); } diff --git a/src/main/java/clap/server/application/port/inbound/history/FindTaskHistoriesUsecase.java b/src/main/java/clap/server/application/port/inbound/history/FindTaskHistoriesUsecase.java index 2381a8ad..b5b1dbfe 100644 --- a/src/main/java/clap/server/application/port/inbound/history/FindTaskHistoriesUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/history/FindTaskHistoriesUsecase.java @@ -3,5 +3,5 @@ import clap.server.adapter.inbound.web.dto.history.response.FindTaskHistoryResponse; public interface FindTaskHistoriesUsecase { - FindTaskHistoryResponse findTaskHistories(Long userId, Long taskId); + FindTaskHistoryResponse findTaskHistories(Long memberId, Long taskId); } diff --git a/src/main/java/clap/server/application/port/inbound/history/SaveCommentAttachmentUsecase.java b/src/main/java/clap/server/application/port/inbound/history/SaveCommentAttachmentUsecase.java index 8b2daf3e..47331d14 100644 --- a/src/main/java/clap/server/application/port/inbound/history/SaveCommentAttachmentUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/history/SaveCommentAttachmentUsecase.java @@ -4,5 +4,5 @@ public interface SaveCommentAttachmentUsecase { - void saveCommentAttachment(Long userId, Long taskId, MultipartFile file); + void saveCommentAttachment(Long memberId, Long taskId, MultipartFile file); } diff --git a/src/main/java/clap/server/application/port/inbound/history/SaveCommentUsecase.java b/src/main/java/clap/server/application/port/inbound/history/SaveCommentUsecase.java index 6d4cc7de..b74549bc 100644 --- a/src/main/java/clap/server/application/port/inbound/history/SaveCommentUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/history/SaveCommentUsecase.java @@ -4,5 +4,5 @@ public interface SaveCommentUsecase { - void save(Long userId, Long taskId, CreateCommentRequest request); + void save(Long memberId, Long taskId, CreateCommentRequest request); } diff --git a/src/main/java/clap/server/application/port/inbound/notification/CountNotificationUseCase.java b/src/main/java/clap/server/application/port/inbound/notification/CountNotificationUseCase.java index 36d25dc6..8495f067 100644 --- a/src/main/java/clap/server/application/port/inbound/notification/CountNotificationUseCase.java +++ b/src/main/java/clap/server/application/port/inbound/notification/CountNotificationUseCase.java @@ -4,5 +4,5 @@ public interface CountNotificationUseCase { - CountNotificationResponse countNotification(Long userId); + CountNotificationResponse countNotification(Long memberId); } diff --git a/src/main/java/clap/server/application/port/inbound/notification/EnableAgitUsecase.java b/src/main/java/clap/server/application/port/inbound/notification/EnableAgitUsecase.java index d172c371..aabf59b6 100644 --- a/src/main/java/clap/server/application/port/inbound/notification/EnableAgitUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/notification/EnableAgitUsecase.java @@ -2,5 +2,5 @@ public interface EnableAgitUsecase { - void enableAgit(Long userId); + void enableAgit(Long memberId); } diff --git a/src/main/java/clap/server/application/port/inbound/notification/EnableEmailUsecase.java b/src/main/java/clap/server/application/port/inbound/notification/EnableEmailUsecase.java index e0ae34bc..7240fb7d 100644 --- a/src/main/java/clap/server/application/port/inbound/notification/EnableEmailUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/notification/EnableEmailUsecase.java @@ -2,5 +2,5 @@ public interface EnableEmailUsecase { - void enableEmail(Long userId); + void enableEmail(Long memberId); } diff --git a/src/main/java/clap/server/application/port/inbound/notification/EnableKakaoUsecase.java b/src/main/java/clap/server/application/port/inbound/notification/EnableKakaoUsecase.java index 28d49a7b..842d4be4 100644 --- a/src/main/java/clap/server/application/port/inbound/notification/EnableKakaoUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/notification/EnableKakaoUsecase.java @@ -2,5 +2,5 @@ public interface EnableKakaoUsecase { - void enableKakao(Long userId); + void enableKakao(Long memberId); } diff --git a/src/main/java/clap/server/application/port/inbound/notification/UpdateNotificationUsecase.java b/src/main/java/clap/server/application/port/inbound/notification/UpdateNotificationUsecase.java index d9c1ccac..a98c438b 100644 --- a/src/main/java/clap/server/application/port/inbound/notification/UpdateNotificationUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/notification/UpdateNotificationUsecase.java @@ -1,5 +1,5 @@ package clap.server.application.port.inbound.notification; public interface UpdateNotificationUsecase { - void updateNotification(Long userId, Long notificationId); + void updateNotification(Long memberId, Long notificationId); } diff --git a/src/main/java/clap/server/application/port/inbound/task/ApprovalTaskUsecase.java b/src/main/java/clap/server/application/port/inbound/task/ApprovalTaskUsecase.java index 299fac31..530e1733 100644 --- a/src/main/java/clap/server/application/port/inbound/task/ApprovalTaskUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/ApprovalTaskUsecase.java @@ -5,6 +5,6 @@ import clap.server.adapter.inbound.web.dto.task.response.FindApprovalFormResponse; public interface ApprovalTaskUsecase { - ApprovalTaskResponse approvalTaskByReviewer(Long userId, Long taskId, ApprovalTaskRequest approvalTaskRequest); + ApprovalTaskResponse approvalTaskByReviewer(Long memberId, Long taskId, ApprovalTaskRequest approvalTaskRequest); FindApprovalFormResponse findApprovalForm(Long managerId, Long taskId); } diff --git a/src/main/java/clap/server/application/port/inbound/task/FilterTeamStatusUsecase.java b/src/main/java/clap/server/application/port/inbound/task/FilterTeamStatusUsecase.java index 646a9975..3fcb422b 100644 --- a/src/main/java/clap/server/application/port/inbound/task/FilterTeamStatusUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/FilterTeamStatusUsecase.java @@ -1,6 +1,5 @@ package clap.server.application.port.inbound.task; - import clap.server.adapter.inbound.web.dto.task.request.FilterTeamStatusRequest; import clap.server.adapter.inbound.web.dto.task.response.TeamStatusResponse; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java b/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java index 33612b2c..8e2f4396 100644 --- a/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java @@ -13,7 +13,7 @@ public interface FindTaskListUsecase { PageResponse findTasksAssignedByManager(Long memberId, Pageable pageable, FilterTaskListRequest findTaskListRequest); - PageResponse findPendingApprovalTasks(Long userId, Pageable pageable, FilterTaskListRequest filterTaskListRequest); + PageResponse findPendingApprovalTasks(Long memberId, Pageable pageable, FilterTaskListRequest filterTaskListRequest); - PageResponse findAllTasks(Long userId, Pageable pageable, FilterTaskListRequest filterTaskListRequest); + PageResponse findAllTasks(Long memberId, Pageable pageable, FilterTaskListRequest filterTaskListRequest); } diff --git a/src/main/java/clap/server/application/port/inbound/task/LoadTeamStatusUsecase.java b/src/main/java/clap/server/application/port/inbound/task/LoadTeamStatusUsecase.java index e7e67f45..f21b93a4 100644 --- a/src/main/java/clap/server/application/port/inbound/task/LoadTeamStatusUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/LoadTeamStatusUsecase.java @@ -4,6 +4,7 @@ import clap.server.adapter.inbound.web.dto.task.response.TeamStatusResponse; import org.springframework.data.domain.Pageable; +@Deprecated public interface LoadTeamStatusUsecase { TeamStatusResponse getTeamStatus(Long memberId, FilterTeamStatusRequest filter); } diff --git a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskLabelUsecase.java b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskLabelUsecase.java index e1a266c7..8e8f262d 100644 --- a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskLabelUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskLabelUsecase.java @@ -4,5 +4,5 @@ import clap.server.adapter.inbound.web.dto.task.response.UpdateTaskResponse; public interface UpdateTaskLabelUsecase { - void updateTaskLabel(Long taskId, Long userId, UpdateTaskLabelRequest request); + void updateTaskLabel(Long taskId, Long memberId, UpdateTaskLabelRequest request); } diff --git a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskProcessorUsecase.java b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskProcessorUsecase.java index 9fb8d28c..1fc82a3f 100644 --- a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskProcessorUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskProcessorUsecase.java @@ -3,5 +3,5 @@ import clap.server.adapter.inbound.web.dto.task.request.UpdateTaskProcessorRequest; public interface UpdateTaskProcessorUsecase { - void updateTaskProcessor(Long taskId, Long userId, UpdateTaskProcessorRequest request); + void updateTaskProcessor(Long taskId, Long memberId, UpdateTaskProcessorRequest request); } diff --git a/src/main/java/clap/server/application/port/outbound/notification/LoadNotificationPort.java b/src/main/java/clap/server/application/port/outbound/notification/LoadNotificationPort.java index 73d92f40..b740fdc8 100644 --- a/src/main/java/clap/server/application/port/outbound/notification/LoadNotificationPort.java +++ b/src/main/java/clap/server/application/port/outbound/notification/LoadNotificationPort.java @@ -1,9 +1,9 @@ package clap.server.application.port.outbound.notification; -import clap.server.adapter.inbound.web.dto.common.SliceResponse; -import clap.server.adapter.inbound.web.dto.notification.response.FindNotificationListResponse; import clap.server.domain.model.notification.Notification; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; + import java.util.List; import java.util.Optional; @@ -12,7 +12,7 @@ public interface LoadNotificationPort { Optional findById(Long notificationId); - SliceResponse findAllByReceiverId(Long receiverId, Pageable pageable); + Slice findAllByReceiverId(Long receiverId, Pageable pageable); List findNotificationsByMemberId(Long memberId); 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 e94f726d..a0f64d7e 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 @@ -4,6 +4,7 @@ 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; @@ -38,5 +39,5 @@ public interface LoadTaskPort { List findTaskBoardByFilter(Long processorId, List statuses, LocalDateTime untilDateTime, FilterTaskBoardRequest request); - List findTeamStatus(Long memberId, FilterTeamStatusRequest filter); + List findTeamStatus(Long memberId, FilterTeamStatusRequest filter); } 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 862588d9..42095227 100644 --- a/src/main/java/clap/server/application/service/admin/DeleteMemberService.java +++ b/src/main/java/clap/server/application/service/admin/DeleteMemberService.java @@ -3,15 +3,15 @@ import clap.server.application.port.inbound.admin.DeleteMemberUsecase; 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.exception.ApplicationException; import clap.server.exception.code.MemberErrorCode; import lombok.RequiredArgsConstructor; import org.hibernate.Hibernate; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -@Service +@ApplicationService @RequiredArgsConstructor public class DeleteMemberService implements DeleteMemberUsecase { private final LoadMemberPort loadMemberPort; diff --git a/src/main/java/clap/server/application/service/admin/FindAllCategoryService.java b/src/main/java/clap/server/application/service/admin/FindAllCategoryService.java index aa3dbc03..4a227848 100644 --- a/src/main/java/clap/server/application/service/admin/FindAllCategoryService.java +++ b/src/main/java/clap/server/application/service/admin/FindAllCategoryService.java @@ -2,7 +2,7 @@ import clap.server.adapter.inbound.web.dto.admin.response.FindAllCategoryResponse; import clap.server.adapter.inbound.web.dto.admin.response.FindSubCategoryResponse; -import clap.server.application.mapper.CategoryResponseMapper; +import clap.server.application.mapper.response.CategoryResponseMapper; import clap.server.application.port.inbound.admin.FindAllCategoryUsecase; import clap.server.application.port.outbound.task.LoadCategoryPort; import clap.server.common.annotation.architecture.ApplicationService; diff --git a/src/main/java/clap/server/application/service/admin/FindAllDepartmentsService.java b/src/main/java/clap/server/application/service/admin/FindAllDepartmentsService.java index 9b6f8cb5..f8bfaf80 100644 --- a/src/main/java/clap/server/application/service/admin/FindAllDepartmentsService.java +++ b/src/main/java/clap/server/application/service/admin/FindAllDepartmentsService.java @@ -1,7 +1,7 @@ package clap.server.application.service.admin; import clap.server.adapter.inbound.web.dto.admin.response.FindAllDepartmentsResponse; -import clap.server.application.mapper.DepartmentResponseMapper; +import clap.server.application.mapper.response.DepartmentResponseMapper; import clap.server.application.port.inbound.admin.FindAllDepartmentsUsecase; import clap.server.application.port.outbound.member.LoadDepartmentPort; import clap.server.common.annotation.architecture.ApplicationService; diff --git a/src/main/java/clap/server/application/service/admin/FindAllMembersService.java b/src/main/java/clap/server/application/service/admin/FindAllMembersService.java index 5bd6d901..bbd6e02f 100644 --- a/src/main/java/clap/server/application/service/admin/FindAllMembersService.java +++ b/src/main/java/clap/server/application/service/admin/FindAllMembersService.java @@ -2,7 +2,7 @@ import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse; import clap.server.adapter.inbound.web.dto.common.PageResponse; -import clap.server.application.mapper.RetrieveAllMemberMapper; +import clap.server.application.mapper.response.AdminResponseMapper; import clap.server.application.port.inbound.admin.FindAllMembersUsecase; import clap.server.application.port.outbound.member.LoadMemberPort; import clap.server.common.annotation.architecture.ApplicationService; @@ -16,13 +16,11 @@ @RequiredArgsConstructor public class FindAllMembersService implements FindAllMembersUsecase { private final LoadMemberPort loadMemberPort; - private final RetrieveAllMemberMapper retrieveAllMemberMapper; - @Transactional(readOnly = true) @Override public PageResponse findAllMembers(Pageable pageable) { Page members = loadMemberPort.findAllMembers(pageable); - return PageResponse.from(members.map(retrieveAllMemberMapper::toResponse)); + return PageResponse.from(members.map(AdminResponseMapper::toRetrieveAllMemberResponse)); } } diff --git a/src/main/java/clap/server/application/service/admin/FindMainCategoryService.java b/src/main/java/clap/server/application/service/admin/FindMainCategoryService.java index 83042b3a..3465dfc8 100644 --- a/src/main/java/clap/server/application/service/admin/FindMainCategoryService.java +++ b/src/main/java/clap/server/application/service/admin/FindMainCategoryService.java @@ -1,7 +1,7 @@ package clap.server.application.service.admin; import clap.server.adapter.inbound.web.dto.admin.response.FindMainCategoryResponse; -import clap.server.application.mapper.CategoryResponseMapper; +import clap.server.application.mapper.response.CategoryResponseMapper; import clap.server.application.port.inbound.admin.FindMainCategoryUsecase; import clap.server.application.port.outbound.task.LoadCategoryPort; import clap.server.common.annotation.architecture.ApplicationService; diff --git a/src/main/java/clap/server/application/service/admin/FindMembersWithFilterService.java b/src/main/java/clap/server/application/service/admin/FindMembersWithFilterService.java index 2ab0ac5c..726449ef 100644 --- a/src/main/java/clap/server/application/service/admin/FindMembersWithFilterService.java +++ b/src/main/java/clap/server/application/service/admin/FindMembersWithFilterService.java @@ -4,7 +4,7 @@ import clap.server.adapter.inbound.web.dto.admin.request.FindMemberRequest; import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse; import clap.server.adapter.inbound.web.dto.common.PageResponse; -import clap.server.application.mapper.RetrieveAllMemberMapper; +import clap.server.application.mapper.response.AdminResponseMapper; import clap.server.application.port.inbound.admin.FindMembersWithFilterUsecase; import clap.server.application.port.outbound.member.LoadMemberPort; import clap.server.common.annotation.architecture.ApplicationService; @@ -18,13 +18,12 @@ @RequiredArgsConstructor public class FindMembersWithFilterService implements FindMembersWithFilterUsecase { private final LoadMemberPort loadMemberPort; - private final RetrieveAllMemberMapper retrieveAllMemberMapper; @Transactional(readOnly = true) @Override public PageResponse findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest, String sortDirection) { Page members = loadMemberPort.findMembersWithFilter(pageable, filterRequest,sortDirection); - return PageResponse.from(members.map(retrieveAllMemberMapper::toResponse)); + return PageResponse.from(members.map(AdminResponseMapper::toRetrieveAllMemberResponse)); } } diff --git a/src/main/java/clap/server/application/service/admin/FindSubCategoryService.java b/src/main/java/clap/server/application/service/admin/FindSubCategoryService.java index 22c59f45..aaf7fe6f 100644 --- a/src/main/java/clap/server/application/service/admin/FindSubCategoryService.java +++ b/src/main/java/clap/server/application/service/admin/FindSubCategoryService.java @@ -1,7 +1,7 @@ package clap.server.application.service.admin; import clap.server.adapter.inbound.web.dto.admin.response.FindSubCategoryResponse; -import clap.server.application.mapper.CategoryResponseMapper; +import clap.server.application.mapper.response.CategoryResponseMapper; import clap.server.application.port.inbound.admin.FindSubCategoryUsecase; import clap.server.application.port.outbound.task.LoadCategoryPort; import clap.server.common.annotation.architecture.ApplicationService; 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 7c4ab4d4..cb2c59e4 100644 --- a/src/main/java/clap/server/application/service/admin/ManageMemberService.java +++ b/src/main/java/clap/server/application/service/admin/ManageMemberService.java @@ -2,7 +2,7 @@ import clap.server.adapter.inbound.web.dto.admin.request.UpdateMemberRequest; import clap.server.adapter.inbound.web.dto.admin.response.MemberDetailsResponse; -import clap.server.application.mapper.MemberResponseMapper; +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; diff --git a/src/main/java/clap/server/application/service/auth/AuthService.java b/src/main/java/clap/server/application/service/auth/AuthService.java index 5d5e59f7..6aa030ac 100644 --- a/src/main/java/clap/server/application/service/auth/AuthService.java +++ b/src/main/java/clap/server/application/service/auth/AuthService.java @@ -2,7 +2,7 @@ import clap.server.adapter.inbound.web.dto.auth.response.LoginResponse; import clap.server.adapter.outbound.persistense.entity.member.constant.MemberStatus; -import clap.server.application.mapper.AuthResponseMapper; +import clap.server.application.mapper.response.AuthResponseMapper; import clap.server.application.port.inbound.auth.LoginUsecase; import clap.server.application.port.inbound.auth.LogoutUsecase; import clap.server.application.port.outbound.auth.forbidden.ForbiddenTokenPort; diff --git a/src/main/java/clap/server/application/service/auth/ReissueTokenService.java b/src/main/java/clap/server/application/service/auth/ReissueTokenService.java index 904c6ec3..7e3821ad 100644 --- a/src/main/java/clap/server/application/service/auth/ReissueTokenService.java +++ b/src/main/java/clap/server/application/service/auth/ReissueTokenService.java @@ -11,7 +11,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; -import static clap.server.application.mapper.AuthResponseMapper.toReissueTokenResponse; +import static clap.server.application.mapper.response.AuthResponseMapper.toReissueTokenResponse; @ApplicationService @RequiredArgsConstructor 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 05e6f578..f2d7f303 100644 --- a/src/main/java/clap/server/application/service/history/CommandCommentService.java +++ b/src/main/java/clap/server/application/service/history/CommandCommentService.java @@ -18,6 +18,7 @@ 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; @@ -35,34 +36,34 @@ public class CommandCommentService implements EditCommentUsecase, DeleteCommentU private final CommandCommentPort commandCommentPort; private final LoadAttachmentPort loadAttachmentPort; private final CommandAttachmentPort commandAttachmentPort; - private final CommandTaskHistoryPort commandTaskHistoryPort; @Transactional @Override - public void editComment(Long userId, Long commentId, EditCommentRequest request) { - Member member = memberService.findActiveMember(userId); + public void editComment(Long memberId, Long commentId, EditCommentRequest request) { + Member member = memberService.findActiveMember(memberId); Comment comment = commentService.findById(commentId); - if (Member.checkCommenter(comment.getTask(), member)) { + if (comment.getMember().getMemberId().equals(member.getMemberId())) { comment.updateComment(request.content()); commandCommentPort.saveComment(comment); - }; + } + else throw new ApplicationException(CommentErrorCode.NOT_A_COMMENT_WRITER); + } @Transactional @Override - public void deleteComment(Long userId, Long commentId) { - Member member = memberService.findActiveMember(userId); + public void deleteComment(Long memberId, Long commentId) { + Member member = memberService.findActiveMember(memberId); Comment comment = commentService.findById(commentId); - - - if (Objects.equals(comment.getMember().getMemberId(), member.getMemberId())) { + + if (comment.getMember().getMemberId().equals(member.getMemberId())) { if (loadAttachmentPort.exitsByCommentId(commentId)) { deleteAttachments(commentId); } commandCommentPort.deleteCommentWithTaskHistory(commentId); }else{ - throw new DomainException(MemberErrorCode.NOT_A_COMMENTER); + throw new ApplicationException(CommentErrorCode.NOT_A_COMMENT_WRITER); } } 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 e67bb3e1..3192902f 100644 --- a/src/main/java/clap/server/application/service/history/FindTaskHistoriesService.java +++ b/src/main/java/clap/server/application/service/history/FindTaskHistoriesService.java @@ -1,7 +1,7 @@ package clap.server.application.service.history; import clap.server.adapter.inbound.web.dto.history.response.FindTaskHistoryResponse; -import clap.server.application.mapper.TaskHistoryResponseMapper; +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; 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 e8897906..092fe36e 100644 --- a/src/main/java/clap/server/application/service/history/PostCommentService.java +++ b/src/main/java/clap/server/application/service/history/PostCommentService.java @@ -20,6 +20,7 @@ import clap.server.domain.model.task.Task; import clap.server.domain.model.task.TaskHistory; import clap.server.domain.policy.attachment.FilePathPolicyConstants; +import clap.server.domain.policy.task.TaskCommentPolicy; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -35,53 +36,54 @@ public class PostCommentService implements SaveCommentUsecase, SaveCommentAttach private final CommandAttachmentPort commandAttachmentPort; private final CommandTaskHistoryPort commandTaskHistoryPort; private final SendNotificationService sendNotificationService; + private final TaskCommentPolicy taskCommentPolicy; @Transactional @Override - public void save(Long userId, Long taskId, CreateCommentRequest request) { + public void save(Long memberId, Long taskId, CreateCommentRequest request) { Task task = taskService.findById(taskId); - Member member = memberService.findActiveMember(userId); + Member member = memberService.findActiveMember(memberId); // 일반 회원일 경우 => 요청자인지 확인 - if (Member.checkCommenter(task, member)) { - Comment comment = Comment.createComment(member, task, request.content()); - Comment savedComment = commandCommentPort.saveComment(comment); + taskCommentPolicy.validateCommentPermission(task, member); + Comment comment = Comment.createComment(member, task, request.content()); + Comment savedComment = commandCommentPort.saveComment(comment); - TaskHistory taskHistory = TaskHistory.createTaskHistory(TaskHistoryType.COMMENT, task, null, member, savedComment); - commandTaskHistoryPort.save(taskHistory); + TaskHistory taskHistory = TaskHistory.createTaskHistory(TaskHistoryType.COMMENT, task, null, member, savedComment); + commandTaskHistoryPort.save(taskHistory); - Member processor = task.getProcessor(); - Member requester = task.getRequester(); - if (member.getMemberInfo().getRole() == MemberRole.ROLE_USER) { - publishNotification(processor, task, request.content(), requester.getNickname()); - } else { - publishNotification(requester, task, request.content(), processor.getNickname()); - } + Member processor = task.getProcessor(); + Member requester = task.getRequester(); + if (member.getMemberInfo().getRole() == MemberRole.ROLE_USER) { + publishNotification(processor, task, request.content(), requester.getNickname()); + } else { + publishNotification(requester, task, request.content(), processor.getNickname()); } + } @Transactional @Override - public void saveCommentAttachment(Long userId, Long taskId, MultipartFile file) { + public void saveCommentAttachment(Long memberId, Long taskId, MultipartFile file) { Task task = taskService.findById(taskId); - Member member = memberService.findActiveMember(userId); + Member member = memberService.findActiveMember(memberId); - if (Member.checkCommenter(task, member)) { - Comment comment = Comment.createComment(member, task, null); - Comment savedComment = commandCommentPort.saveComment(comment); - String fileName = saveAttachment(file, task, savedComment); + taskCommentPolicy.validateCommentPermission(task, member); + Comment comment = Comment.createComment(member, task, null); + Comment savedComment = commandCommentPort.saveComment(comment); + String fileName = saveAttachment(file, task, savedComment); - TaskHistory taskHistory = TaskHistory.createTaskHistory(TaskHistoryType.COMMENT_FILE, task, null, member, savedComment); - commandTaskHistoryPort.save(taskHistory); + TaskHistory taskHistory = TaskHistory.createTaskHistory(TaskHistoryType.COMMENT_FILE, task, null, member, savedComment); + commandTaskHistoryPort.save(taskHistory); - Member processor = task.getProcessor(); - Member requester = task.getRequester(); - if (member.getMemberInfo().getRole() == requester.getMemberInfo().getRole()) { - publishNotification(processor, task, fileName + "(첨부파일)", requester.getNickname()); - } else { - publishNotification(requester, task, fileName + "(첨부파일)", processor.getNickname()); - } + Member processor = task.getProcessor(); + Member requester = task.getRequester(); + if (member.getMemberInfo().getRole() == requester.getMemberInfo().getRole()) { + publishNotification(processor, task, fileName + "(첨부파일)", requester.getNickname()); + } else { + publishNotification(requester, task, fileName + "(첨부파일)", processor.getNickname()); } + } private String saveAttachment(MultipartFile file, Task task, Comment comment) { diff --git a/src/main/java/clap/server/application/service/label/FindLabelListService.java b/src/main/java/clap/server/application/service/label/FindLabelListService.java index a8d098bc..98a7d4bd 100644 --- a/src/main/java/clap/server/application/service/label/FindLabelListService.java +++ b/src/main/java/clap/server/application/service/label/FindLabelListService.java @@ -1,7 +1,7 @@ package clap.server.application.service.label; import clap.server.adapter.inbound.web.dto.label.response.FindLabelListResponse; -import clap.server.application.mapper.LabelResponseMapper; +import clap.server.application.mapper.response.LabelResponseMapper; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.label.FindLabelListUsecase; import clap.server.application.port.outbound.task.LoadLabelPort; @@ -20,8 +20,8 @@ public class FindLabelListService implements FindLabelListUsecase { private final MemberService memberService; @Override - public List findLabelList(Long userId) { - memberService.findActiveMember(userId); + public List findLabelList(Long memberId) { + memberService.findActiveMember(memberId); return loadLabelPort.findLabelList() .stream() .map(LabelResponseMapper::toFindLabelListResponse) diff --git a/src/main/java/clap/server/application/service/log/FindApiLogsService.java b/src/main/java/clap/server/application/service/log/FindApiLogsService.java index 6c2c65db..83ba4a49 100644 --- a/src/main/java/clap/server/application/service/log/FindApiLogsService.java +++ b/src/main/java/clap/server/application/service/log/FindApiLogsService.java @@ -4,7 +4,7 @@ import clap.server.adapter.inbound.web.dto.log.response.AnonymousLogResponse; import clap.server.adapter.inbound.web.dto.log.request.FilterLogRequest; import clap.server.adapter.inbound.web.dto.log.response.MemberLogResponse; -import clap.server.application.mapper.LogMapper; +import clap.server.application.mapper.response.LogResponseMapper; import clap.server.application.port.inbound.log.FindApiLogsUsecase; import clap.server.application.port.outbound.log.LoadLogPort; import clap.server.common.annotation.architecture.ApplicationService; @@ -24,14 +24,14 @@ public class FindApiLogsService implements FindApiLogsUsecase { @Override public PageResponse filterAnonymousLogs(FilterLogRequest anonymousLogRequest, Pageable pageable, String sortDirection) { Page anonymousLogs = loadLogPort.filterAnonymousLogs(anonymousLogRequest, pageable, sortDirection); - Page anonymousLogResponses = anonymousLogs.map(anonymousLog -> LogMapper.toAnonymousLogResponse(anonymousLog)); + Page anonymousLogResponses = anonymousLogs.map(anonymousLog -> LogResponseMapper.toAnonymousLogResponse(anonymousLog)); return PageResponse.from(anonymousLogResponses); } @Override public PageResponse filterMemberLogs(FilterLogRequest memberLogRequest, Pageable pageable, String sortDirection) { Page memberLogs = loadLogPort.filterMemberLogs(memberLogRequest, pageable, sortDirection); - Page memberLogResponses = memberLogs.map(LogMapper::toMemberLogResponse); + Page memberLogResponses = memberLogs.map(LogResponseMapper::toMemberLogResponse); return PageResponse.from(memberLogResponses); } } 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 010f1ce9..36ea9175 100644 --- a/src/main/java/clap/server/application/service/member/MemberInfoService.java +++ b/src/main/java/clap/server/application/service/member/MemberInfoService.java @@ -10,8 +10,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; -import static clap.server.application.mapper.MemberResponseMapper.toMemberDetailInfoResponse; -import static clap.server.application.mapper.MemberResponseMapper.toMemberProfileResponse; +import static clap.server.application.mapper.response.MemberResponseMapper.toMemberDetailInfoResponse; +import static clap.server.application.mapper.response.MemberResponseMapper.toMemberProfileResponse; @ApplicationService @RequiredArgsConstructor diff --git a/src/main/java/clap/server/application/service/notification/CountNotificationService.java b/src/main/java/clap/server/application/service/notification/CountNotificationService.java index 93f6b188..6b967d83 100644 --- a/src/main/java/clap/server/application/service/notification/CountNotificationService.java +++ b/src/main/java/clap/server/application/service/notification/CountNotificationService.java @@ -1,7 +1,7 @@ package clap.server.application.service.notification; import clap.server.adapter.inbound.web.dto.notification.response.CountNotificationResponse; -import clap.server.application.mapper.NotificationMapper; +import clap.server.application.mapper.response.NotificationResponseMapper; import clap.server.application.port.inbound.notification.CountNotificationUseCase; import clap.server.application.port.outbound.notification.LoadNotificationPort; import clap.server.common.annotation.architecture.ApplicationService; @@ -17,9 +17,9 @@ public class CountNotificationService implements CountNotificationUseCase { @Transactional @Override - public CountNotificationResponse countNotification(Long userId) { - Integer count = loadNotificationPort.countNotification(userId); + public CountNotificationResponse countNotification(Long memberId) { + Integer count = loadNotificationPort.countNotification(memberId); - return NotificationMapper.toCountNotificationResponse(userId, count); + return NotificationResponseMapper.toCountNotificationResponse(memberId, count); } } diff --git a/src/main/java/clap/server/application/service/notification/FindNotificationListService.java b/src/main/java/clap/server/application/service/notification/FindNotificationListService.java index 0e949b5f..16edc688 100644 --- a/src/main/java/clap/server/application/service/notification/FindNotificationListService.java +++ b/src/main/java/clap/server/application/service/notification/FindNotificationListService.java @@ -2,6 +2,7 @@ import clap.server.adapter.inbound.web.dto.common.SliceResponse; import clap.server.adapter.inbound.web.dto.notification.response.FindNotificationListResponse; +import clap.server.application.mapper.response.NotificationResponseMapper; import clap.server.application.port.inbound.notification.FindNotificationListUsecase; import clap.server.application.port.outbound.notification.LoadNotificationPort; import clap.server.common.annotation.architecture.ApplicationService; @@ -19,6 +20,8 @@ public class FindNotificationListService implements FindNotificationListUsecase @Override public SliceResponse findNotificationList(Long receiverId, Pageable pageable) { - return loadNotificationPort.findAllByReceiverId(receiverId, pageable); + return NotificationResponseMapper.toSliceOfFindNoticeListResponse(loadNotificationPort.findAllByReceiverId(receiverId, pageable) + .map(NotificationResponseMapper::toFindNoticeListResponse) + ); } } diff --git a/src/main/java/clap/server/application/service/notification/ReadNotificationService.java b/src/main/java/clap/server/application/service/notification/ReadNotificationService.java index 4b04a987..015fb86a 100644 --- a/src/main/java/clap/server/application/service/notification/ReadNotificationService.java +++ b/src/main/java/clap/server/application/service/notification/ReadNotificationService.java @@ -25,9 +25,9 @@ public class ReadNotificationService implements UpdateNotificationUsecase, Updat @Transactional @Override - public void updateNotification(Long userId, Long notificationId) { + public void updateNotification(Long memberId, Long notificationId) { - memberService.findActiveMember(userId); + memberService.findActiveMember(memberId); Notification notification = loadNotificationPort.findById(notificationId) .orElseThrow(() -> new ApplicationException(NotificationErrorCode.NOTIFICATION_NOT_FOUND)); notification.updateNotificationIsRead(); 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 53305eb6..9bdb84c7 100644 --- a/src/main/java/clap/server/application/service/notification/UpdateNotificationService.java +++ b/src/main/java/clap/server/application/service/notification/UpdateNotificationService.java @@ -17,22 +17,22 @@ public class UpdateNotificationService implements EnableKakaoUsecase, EnableAgit private final CommandMemberPort commandMemberPort; @Override - public void enableAgit(Long userId) { - Member member = memberService.findActiveMember(userId); + public void enableAgit(Long memberId) { + Member member = memberService.findActiveMember(memberId); member.updateAgitEnabled(); commandMemberPort.save(member); } @Override - public void enableEmail(Long userId) { - Member member = memberService.findActiveMember(userId); + public void enableEmail(Long memberId) { + Member member = memberService.findActiveMember(memberId); member.updateEmailEnabled(); commandMemberPort.save(member); } @Override - public void enableKakao(Long userId) { - Member member = memberService.findActiveMember(userId); + public void enableKakao(Long memberId) { + Member member = memberService.findActiveMember(memberId); member.updateKaKaoEnabled(); commandMemberPort.save(member); } diff --git a/src/main/java/clap/server/application/service/statistics/FindSubCategoryTaskRequestService.java b/src/main/java/clap/server/application/service/statistics/FindSubCategoryTaskRequestService.java index 8c42dba5..6309c409 100644 --- a/src/main/java/clap/server/application/service/statistics/FindSubCategoryTaskRequestService.java +++ b/src/main/java/clap/server/application/service/statistics/FindSubCategoryTaskRequestService.java @@ -1,7 +1,7 @@ package clap.server.application.service.statistics; import clap.server.adapter.inbound.web.dto.statistics.StatisticsResponse; -import clap.server.application.mapper.FindTaskStatisticsMapper; +import clap.server.application.mapper.response.StatisticsResponseMapper; import clap.server.application.port.inbound.statistics.FindSubCategoryTaskRequestUsecase; import clap.server.application.port.outbound.task.TaskDocumentPort; import clap.server.common.annotation.architecture.ApplicationService; @@ -16,6 +16,6 @@ public class FindSubCategoryTaskRequestService implements FindSubCategoryTaskReq @Override public List aggregateSubCategoryTaskRequest(String period, String mainCategory) { - return FindTaskStatisticsMapper.toStatisticsResponse(taskDocumentPort.findSubCategoryTaskRequestByPeriod(period, mainCategory)); + return StatisticsResponseMapper.toStatisticsResponse(taskDocumentPort.findSubCategoryTaskRequestByPeriod(period, mainCategory)); } } diff --git a/src/main/java/clap/server/application/service/statistics/FindTaskProcessService.java b/src/main/java/clap/server/application/service/statistics/FindTaskProcessService.java index cb0bcc2a..940fd5c8 100644 --- a/src/main/java/clap/server/application/service/statistics/FindTaskProcessService.java +++ b/src/main/java/clap/server/application/service/statistics/FindTaskProcessService.java @@ -1,7 +1,7 @@ package clap.server.application.service.statistics; import clap.server.adapter.inbound.web.dto.statistics.StatisticsResponse; -import clap.server.application.mapper.FindTaskStatisticsMapper; +import clap.server.application.mapper.response.StatisticsResponseMapper; import clap.server.application.port.inbound.statistics.FindTaskProcessUsecase; import clap.server.application.port.outbound.task.TaskDocumentPort; import clap.server.common.annotation.architecture.ApplicationService; @@ -20,27 +20,27 @@ public class FindTaskProcessService implements FindTaskProcessUsecase { @Override public List aggregateCategoryTaskRequest(String period) { - return FindTaskStatisticsMapper.toStatisticsResponse(taskDocumentPort.findCategoryTaskRequestByPeriod(period)); + return StatisticsResponseMapper.toStatisticsResponse(taskDocumentPort.findCategoryTaskRequestByPeriod(period)); } @Override public List aggregateManagerTaskProcess(String period) { - return FindTaskStatisticsMapper.toStatisticsResponse(taskDocumentPort.findManagerTaskProcessByPeriod(period)); + return StatisticsResponseMapper.toStatisticsResponse(taskDocumentPort.findManagerTaskProcessByPeriod(period)); } @Override public List aggregatePeriodTaskProcess(String period) { if (period.equals("week") || period.equals("month")) { - return FindTaskStatisticsMapper.toStatisticsResponse(taskStatisticsPolicy.formatStatistics(taskDocumentPort.findPeriodTaskProcessByPeriod(period))); + return StatisticsResponseMapper.toStatisticsResponse(taskStatisticsPolicy.formatStatistics(taskDocumentPort.findPeriodTaskProcessByPeriod(period))); } - return FindTaskStatisticsMapper.toStatisticsResponse(taskStatisticsPolicy.formatDayStatistics(taskDocumentPort.findPeriodTaskProcessByPeriod(period))); + return StatisticsResponseMapper.toStatisticsResponse(taskStatisticsPolicy.formatDayStatistics(taskDocumentPort.findPeriodTaskProcessByPeriod(period))); } @Override public List aggregatePeriodTaskRequest(String period) { if (period.equals("week") || period.equals("month")) { - return FindTaskStatisticsMapper.toStatisticsResponse(taskStatisticsPolicy.formatStatistics(taskDocumentPort.findPeriodTaskRequestByPeriod(period))); + return StatisticsResponseMapper.toStatisticsResponse(taskStatisticsPolicy.formatStatistics(taskDocumentPort.findPeriodTaskRequestByPeriod(period))); } - return FindTaskStatisticsMapper.toStatisticsResponse(taskStatisticsPolicy.formatDayStatistics(taskDocumentPort.findPeriodTaskRequestByPeriod(period))); + return StatisticsResponseMapper.toStatisticsResponse(taskStatisticsPolicy.formatDayStatistics(taskDocumentPort.findPeriodTaskRequestByPeriod(period))); } } 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 4a0452a9..26dbd793 100644 --- a/src/main/java/clap/server/application/service/task/ApprovalTaskService.java +++ b/src/main/java/clap/server/application/service/task/ApprovalTaskService.java @@ -6,13 +6,12 @@ import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; import clap.server.adapter.outbound.persistense.entity.notification.constant.NotificationType; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskHistoryType; -import clap.server.application.mapper.TaskResponseMapper; +import clap.server.application.mapper.response.TaskResponseMapper; import clap.server.application.port.inbound.domain.CategoryService; import clap.server.application.port.inbound.domain.LabelService; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.domain.TaskService; import clap.server.application.port.inbound.task.ApprovalTaskUsecase; -import clap.server.application.port.outbound.task.CommandTaskPort; import clap.server.application.port.outbound.taskhistory.CommandTaskHistoryPort; import clap.server.application.service.webhook.SendNotificationService; import clap.server.common.annotation.architecture.ApplicationService; diff --git a/src/main/java/clap/server/application/service/task/CreateTaskService.java b/src/main/java/clap/server/application/service/task/CreateTaskService.java index 8ec330e8..b4d0be4d 100644 --- a/src/main/java/clap/server/application/service/task/CreateTaskService.java +++ b/src/main/java/clap/server/application/service/task/CreateTaskService.java @@ -6,7 +6,7 @@ import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; import clap.server.adapter.outbound.persistense.entity.notification.constant.NotificationType; import clap.server.application.mapper.AttachmentMapper; -import clap.server.application.mapper.TaskResponseMapper; +import clap.server.application.mapper.response.TaskResponseMapper; import clap.server.application.port.inbound.domain.CategoryService; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.task.CreateTaskUsecase; diff --git a/src/main/java/clap/server/application/service/task/FindManagersService.java b/src/main/java/clap/server/application/service/task/FindManagersService.java index 60c5d17a..1a20c6d3 100644 --- a/src/main/java/clap/server/application/service/task/FindManagersService.java +++ b/src/main/java/clap/server/application/service/task/FindManagersService.java @@ -10,7 +10,7 @@ import java.util.List; -import static clap.server.application.mapper.TaskResponseMapper.toFindManagersResponse; +import static clap.server.application.mapper.response.TaskResponseMapper.toFindManagersResponse; @ApplicationService @RequiredArgsConstructor diff --git a/src/main/java/clap/server/application/service/task/FindTaskDetailsService.java b/src/main/java/clap/server/application/service/task/FindTaskDetailsService.java index 1df897ed..ebcee406 100644 --- a/src/main/java/clap/server/application/service/task/FindTaskDetailsService.java +++ b/src/main/java/clap/server/application/service/task/FindTaskDetailsService.java @@ -2,7 +2,7 @@ import clap.server.adapter.inbound.web.dto.task.response.FindTaskDetailsForManagerResponse; import clap.server.adapter.inbound.web.dto.task.response.FindTaskDetailsResponse; -import clap.server.application.mapper.TaskResponseMapper; +import clap.server.application.mapper.response.TaskResponseMapper; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.task.FindTaskDetailsUsecase; import clap.server.application.port.outbound.task.LoadAttachmentPort; diff --git a/src/main/java/clap/server/application/service/task/FindTaskListService.java b/src/main/java/clap/server/application/service/task/FindTaskListService.java index 7c28e2f6..9e82ea31 100644 --- a/src/main/java/clap/server/application/service/task/FindTaskListService.java +++ b/src/main/java/clap/server/application/service/task/FindTaskListService.java @@ -7,7 +7,7 @@ import clap.server.adapter.inbound.web.dto.task.response.FilterAssignedTaskListResponse; import clap.server.adapter.inbound.web.dto.task.response.FilterPendingApprovalResponse; import clap.server.adapter.inbound.web.dto.task.response.FilterRequestedTasksResponse; -import clap.server.application.mapper.TaskResponseMapper; +import clap.server.application.mapper.response.TaskResponseMapper; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.task.FindTaskListUsecase; diff --git a/src/main/java/clap/server/application/service/task/GetTaskBoardService.java b/src/main/java/clap/server/application/service/task/GetTaskBoardService.java index 1427d140..205088af 100644 --- a/src/main/java/clap/server/application/service/task/GetTaskBoardService.java +++ b/src/main/java/clap/server/application/service/task/GetTaskBoardService.java @@ -2,7 +2,7 @@ import clap.server.adapter.inbound.web.dto.task.request.FilterTaskBoardRequest; import clap.server.adapter.inbound.web.dto.task.response.TaskBoardResponse; -import clap.server.application.mapper.TaskResponseMapper; +import clap.server.application.mapper.response.TaskResponseMapper; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.task.FilterTaskBoardUsecase; import clap.server.application.port.outbound.task.LoadTaskPort; diff --git a/src/main/java/clap/server/application/service/task/TeamStatusService.java b/src/main/java/clap/server/application/service/task/TeamStatusService.java index 28c2b4d2..3c12aee9 100644 --- a/src/main/java/clap/server/application/service/task/TeamStatusService.java +++ b/src/main/java/clap/server/application/service/task/TeamStatusService.java @@ -1,48 +1,41 @@ package clap.server.application.service.task; import clap.server.adapter.inbound.web.dto.task.request.FilterTeamStatusRequest; +import clap.server.adapter.inbound.web.dto.task.request.SortBy; import clap.server.adapter.inbound.web.dto.task.response.TeamStatusResponse; import clap.server.adapter.inbound.web.dto.task.response.TeamTaskResponse; +import clap.server.application.mapper.response.TeamTaskResponseMapper; import clap.server.application.port.inbound.task.FilterTeamStatusUsecase; -import clap.server.application.port.inbound.task.LoadTeamStatusUsecase; import clap.server.application.port.outbound.task.LoadTaskPort; import clap.server.common.annotation.architecture.ApplicationService; +import clap.server.domain.model.task.Task; +import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; +import java.util.Comparator; import java.util.List; @ApplicationService -public class TeamStatusService implements LoadTeamStatusUsecase, FilterTeamStatusUsecase { +@RequiredArgsConstructor +public class TeamStatusService implements FilterTeamStatusUsecase { private final LoadTaskPort loadTaskPort; - public TeamStatusService(LoadTaskPort loadTaskPort) { - this.loadTaskPort = loadTaskPort; - } - - @Override - public TeamStatusResponse getTeamStatus(Long memberId, FilterTeamStatusRequest filter) { - List members = loadTaskPort.findTeamStatus(memberId, filter); - if (members == null) { - members = List.of(); - } - return new TeamStatusResponse(members); - } - @Override @Transactional(readOnly = true) public TeamStatusResponse filterTeamStatus(FilterTeamStatusRequest filter) { - List members = loadTaskPort.findTeamStatus(null, filter); + List tasks = loadTaskPort.findTeamStatus(null, filter); + + List taskItemResponses = TeamTaskResponseMapper.toTeamTaskResponses(tasks); - if (members == null) { - members = List.of(); - } + int totalInProgressTaskCount = taskItemResponses.stream().mapToInt(TeamTaskResponse::inProgressTaskCount).sum(); + int totalInReviewingTaskCount = taskItemResponses.stream().mapToInt(TeamTaskResponse::inReviewingTaskCount).sum(); - // 전체 팀의 진행 중 & 검토 중 작업 수 계산 - int totalInProgressTaskCount = members.stream().mapToInt(TeamTaskResponse::inProgressTaskCount).sum(); - int totalInReviewingTaskCount = members.stream().mapToInt(TeamTaskResponse::inReviewingTaskCount).sum(); + if (filter.sortBy().equals(SortBy.CONTRIBUTE)) + taskItemResponses.sort((a, b) -> b.totalTaskCount() - a.totalTaskCount()); + else taskItemResponses.sort(Comparator.comparing(TeamTaskResponse::nickname)); - return new TeamStatusResponse(members, totalInProgressTaskCount, totalInReviewingTaskCount); + return new TeamStatusResponse(taskItemResponses, totalInProgressTaskCount, totalInReviewingTaskCount); } 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 688f67b3..d04eb2a4 100644 --- a/src/main/java/clap/server/application/service/task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/service/task/UpdateTaskService.java @@ -97,9 +97,9 @@ public void updateTaskStatus(Long memberId, Long taskId, TaskStatus taskStatus) @Transactional @Override - public void updateTaskProcessor(Long taskId, Long userId, UpdateTaskProcessorRequest request) { - memberService.findActiveMember(userId); - memberService.findReviewer(userId); + public void updateTaskProcessor(Long taskId, Long memberId, UpdateTaskProcessorRequest request) { + memberService.findActiveMember(memberId); + memberService.findReviewer(memberId); Task task = taskService.findById(taskId); Member processor = memberService.findById(request.processorId()); @@ -115,9 +115,9 @@ public void updateTaskProcessor(Long taskId, Long userId, UpdateTaskProcessorReq @Transactional @Override - public void updateTaskLabel(Long taskId, Long userId, UpdateTaskLabelRequest request) { - memberService.findActiveMember(userId); - memberService.findReviewer(userId); + public void updateTaskLabel(Long taskId, Long memberId, UpdateTaskLabelRequest request) { + memberService.findActiveMember(memberId); + memberService.findReviewer(memberId); Task task = taskService.findById(taskId); Label label = labelService.findById(request.labelId()); diff --git a/src/main/java/clap/server/common/utils/ClientIpParseUtil.java b/src/main/java/clap/server/common/utils/ClientIpParseUtil.java index c4980e3b..47177c75 100644 --- a/src/main/java/clap/server/common/utils/ClientIpParseUtil.java +++ b/src/main/java/clap/server/common/utils/ClientIpParseUtil.java @@ -28,7 +28,6 @@ public static String getClientIp(HttpServletRequest request) { for (String header : headersToCheck) { ip = request.getHeader(header); if (ip != null && !ip.isEmpty() && !"unknown".equalsIgnoreCase(ip)) { - // X-Forwarded-For 헤더에서 첫 번째 IP만 추출 if (ip.contains(",")) { ip = ip.split(",")[0].trim(); } diff --git a/src/main/java/clap/server/domain/model/log/MemberLog.java b/src/main/java/clap/server/domain/model/log/MemberLog.java index 7ad55f70..52d3f663 100644 --- a/src/main/java/clap/server/domain/model/log/MemberLog.java +++ b/src/main/java/clap/server/domain/model/log/MemberLog.java @@ -24,7 +24,7 @@ public static MemberLog createMemberLog(HttpServletRequest request, int statusCo .statusCode(statusCode) .customStatusCode(customCode != null ? customCode : "") .requestBody(requestBody) - .responseBody(responseBody != null ? responseBody.toString() : logStatus.getDescription() + " 실패") + .responseBody(responseBody != null ? responseBody.toString() : logStatus.getDescription()) .requestAt(LocalDateTime.now()) .logStatus(logStatus) .member(member) diff --git a/src/main/java/clap/server/domain/model/member/Member.java b/src/main/java/clap/server/domain/model/member/Member.java index e77f2a57..682fbcd8 100644 --- a/src/main/java/clap/server/domain/model/member/Member.java +++ b/src/main/java/clap/server/domain/model/member/Member.java @@ -28,8 +28,7 @@ public class Member extends BaseTime { private String password; private Department department; - - + @Builder public Member(MemberInfo memberInfo, Boolean agitNotificationEnabled, Boolean emailNotificationEnabled, Boolean kakaoworkNotificationEnabled, Member admin, String imageUrl, MemberStatus status, String password) { this.memberInfo = memberInfo; @@ -121,24 +120,6 @@ public void updateEmailEnabled() { } } - public static Boolean checkCommenter(Task task, Member member) { - // 일반 회원일 경우 => 요청자인지 확인 - if ((member.getMemberInfo().getRole() == MemberRole.ROLE_USER) - && !(Objects.equals(member.getMemberId(), task.getRequester().getMemberId()))) { - throw new DomainException(MemberErrorCode.NOT_A_COMMENTER); - } - else { - return true; - } - - } - - public void verifyPassword(String encodedPassword) { - if(!encodedPassword.equals(this.password)) { - throw new DomainException(MemberErrorCode.PASSWORD_VERIFY_FAILED); - } - } - public void register(Member admin) { this.admin = admin; } diff --git a/src/main/java/clap/server/domain/model/notification/NotificationChannel.java b/src/main/java/clap/server/domain/model/notification/NotificationChannel.java deleted file mode 100644 index 49316d57..00000000 --- a/src/main/java/clap/server/domain/model/notification/NotificationChannel.java +++ /dev/null @@ -1,19 +0,0 @@ -package clap.server.domain.model.notification; - -import clap.server.domain.model.common.BaseTime; -import clap.server.domain.model.member.Member; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class NotificationChannel extends BaseTime { - private Long notificationChannelId; - private Member admin; - private String code; - private String name; - - } diff --git a/src/main/java/clap/server/domain/policy/task/TaskCommentPolicy.java b/src/main/java/clap/server/domain/policy/task/TaskCommentPolicy.java new file mode 100644 index 00000000..663bffea --- /dev/null +++ b/src/main/java/clap/server/domain/policy/task/TaskCommentPolicy.java @@ -0,0 +1,22 @@ +package clap.server.domain.policy.task; + +import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; +import clap.server.common.annotation.architecture.Policy; +import clap.server.domain.model.member.Member; +import clap.server.domain.model.task.Task; +import clap.server.exception.DomainException; +import clap.server.exception.code.MemberErrorCode; + +import java.util.Objects; + +@Policy +public class TaskCommentPolicy { + public void validateCommentPermission(Task task, Member member) { + boolean isUser = member.getMemberInfo().getRole() == MemberRole.ROLE_USER; + boolean isNotRequester = !Objects.equals(member.getMemberId(), task.getRequester().getMemberId()); + + if (isUser && isNotRequester) { + throw new DomainException(MemberErrorCode.COMMENT_PERMISSION_DENIED); + } + } +} diff --git a/src/main/java/clap/server/exception/code/CommentErrorCode.java b/src/main/java/clap/server/exception/code/CommentErrorCode.java index 1f74a967..76140ed8 100644 --- a/src/main/java/clap/server/exception/code/CommentErrorCode.java +++ b/src/main/java/clap/server/exception/code/CommentErrorCode.java @@ -9,7 +9,8 @@ public enum CommentErrorCode implements BaseErrorCode { COMMENT_NOT_FOUND(HttpStatus.NOT_FOUND, "COMMENT_001", "댓글을 찾을 수 없습니다."), - COMMENT_ATTACHMENT_NOT_FOUND(HttpStatus.NOT_FOUND, "COMMENT_002", "댓글 첨부파일을 찾을 수 없습니다.") + COMMENT_ATTACHMENT_NOT_FOUND(HttpStatus.NOT_FOUND, "COMMENT_002", "댓글 첨부파일을 찾을 수 없습니다."), + NOT_A_COMMENT_WRITER(HttpStatus.FORBIDDEN, "COMMENT_003", "댓글 작성자가 아닙니다.") ; diff --git a/src/main/java/clap/server/exception/code/MemberErrorCode.java b/src/main/java/clap/server/exception/code/MemberErrorCode.java index 47bd9743..09e20f4b 100644 --- a/src/main/java/clap/server/exception/code/MemberErrorCode.java +++ b/src/main/java/clap/server/exception/code/MemberErrorCode.java @@ -10,7 +10,7 @@ public enum MemberErrorCode implements BaseErrorCode { MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MEMBER_001", "회원을 찾을 수 없습니다."), ACTIVE_MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MEMBER_002", "활성화 회원을 찾을 수 없습니다."), NOT_A_REVIEWER(HttpStatus.FORBIDDEN, "MEMBER_003", "리뷰어 권한이 없습니다."), - NOT_A_COMMENTER(HttpStatus.FORBIDDEN, "MEMBER_005", "댓글 권한이 없습니다."), + COMMENT_PERMISSION_DENIED(HttpStatus.FORBIDDEN, "MEMBER_005", "댓글 권한이 없습니다."), PASSWORD_VERIFY_FAILED(HttpStatus.BAD_REQUEST, "MEMBER_006", "비밀번호 검증에 실패하였습니다"), INVALID_CSV_FORMAT(HttpStatus.BAD_REQUEST, "MEMBER_007", "CSV 파일 형식이 잘못되었습니다."), CSV_PARSING_ERROR(HttpStatus.BAD_REQUEST, "MEMBER_008", "CSV 데이터 파싱 중 오류가 발생했습니다."), diff --git a/src/test/java/clap/server/application/statistics/FindTaskProcessServiceTest.java b/src/test/java/clap/server/application/statistics/FindTaskProcessServiceTest.java index a7a877b1..a5cc9c30 100644 --- a/src/test/java/clap/server/application/statistics/FindTaskProcessServiceTest.java +++ b/src/test/java/clap/server/application/statistics/FindTaskProcessServiceTest.java @@ -28,6 +28,64 @@ class FindTaskProcessServiceTest { @InjectMocks private FindTaskProcessService findTaskProcessService; + @Test + @DisplayName("기간별 요청량") + void aggregatePeriodTaskRequest() { + //given + Map statistics = new TreeMap<>(); + statistics.put("2025-02-03", 8L); + statistics.put("2025-02-04", 7L); + statistics.put("2025-02-05", 6L); + + when(taskDocumentPort.findPeriodTaskRequestByPeriod(eq("week"))).thenReturn(statistics); + + Map formattedStatistics = new TreeMap<>(); + formattedStatistics.put("2월 3일", 8L); + formattedStatistics.put("2월 4일", 7L); + formattedStatistics.put("2월 5일", 6L); + when(taskStatisticsPolicy.formatStatistics(statistics)).thenReturn(formattedStatistics); + + //when + List week = findTaskProcessService.aggregatePeriodTaskRequest("week"); + + //then + assertThat(week.get(0).key()).isEqualTo("2월 3일"); + assertThat(week.get(0).count()).isEqualTo(8L); + assertThat(week.get(1).key()).isEqualTo("2월 4일"); + assertThat(week.get(1).count()).isEqualTo(7L); + assertThat(week.get(2).key()).isEqualTo("2월 5일"); + assertThat(week.get(2).count()).isEqualTo(6L); + } + + @Test + @DisplayName("기간별 처리량") + void aggregatePeriodTaskProcess() { + //given + Map statistics = new TreeMap<>(); + statistics.put("2025-02-03", 8L); + statistics.put("2025-02-04", 7L); + statistics.put("2025-02-05", 6L); + + when(taskDocumentPort.findPeriodTaskProcessByPeriod(eq("week"))).thenReturn(statistics); + + Map formattedStatistics = new TreeMap<>(); + formattedStatistics.put("2월 3일", 8L); + formattedStatistics.put("2월 4일", 7L); + formattedStatistics.put("2월 5일", 6L); + when(taskStatisticsPolicy.formatStatistics(statistics)).thenReturn(formattedStatistics); + + //when + List week = findTaskProcessService.aggregatePeriodTaskProcess("week"); + + //then + assertThat(week.get(0).key()).isEqualTo("2월 3일"); + assertThat(week.get(0).count()).isEqualTo(8L); + assertThat(week.get(1).key()).isEqualTo("2월 4일"); + assertThat(week.get(1).count()).isEqualTo(7L); + assertThat(week.get(2).key()).isEqualTo("2월 5일"); + assertThat(week.get(2).count()).isEqualTo(6L); + } + @Test @DisplayName("카테고리별 요청량") void aggregateCategoryTaskRequest() { @@ -73,62 +131,4 @@ void aggregateManagerTaskProcess() { assertThat(week.get(2).key()).isEqualTo("tony.tsx"); assertThat(week.get(2).count()).isEqualTo(7L); } - - @Test - @DisplayName("기간별 처리량") - void aggregatePeriodTaskProcess() { - //given - Map statistics = new TreeMap<>(); - statistics.put("2025-02-01", 8L); - statistics.put("2025-01-30", 7L); - statistics.put("2025-01-31", 6L); - - when(taskDocumentPort.findPeriodTaskProcessByPeriod(eq("week"))).thenReturn(statistics); - - Map formattedStatistics = new TreeMap<>(); - formattedStatistics.put("2월 1일", 8L); - formattedStatistics.put("1월 30일", 7L); - formattedStatistics.put("1월 31일", 6L); - when(taskStatisticsPolicy.formatStatistics(statistics)).thenReturn(formattedStatistics); - - //when - List week = findTaskProcessService.aggregatePeriodTaskProcess("week"); - - //then - assertThat(week.get(0).key()).isEqualTo("1월 30일"); - assertThat(week.get(0).count()).isEqualTo(7L); - assertThat(week.get(1).key()).isEqualTo("1월 31일"); - assertThat(week.get(1).count()).isEqualTo(6L); - assertThat(week.get(2).key()).isEqualTo("2월 1일"); - assertThat(week.get(2).count()).isEqualTo(8L); - } - - @Test - @DisplayName("기간별 요청량") - void aggregatePeriodTaskRequest() { - //given - Map statistics = new TreeMap<>(); - statistics.put("2025-02-01", 8L); - statistics.put("2025-01-30", 7L); - statistics.put("2025-01-31", 6L); - - when(taskDocumentPort.findPeriodTaskRequestByPeriod(eq("week"))).thenReturn(statistics); - - Map formattedStatistics = new TreeMap<>(); - formattedStatistics.put("2월 1일", 8L); - formattedStatistics.put("1월 30일", 7L); - formattedStatistics.put("1월 31일", 6L); - when(taskStatisticsPolicy.formatStatistics(statistics)).thenReturn(formattedStatistics); - - //when - List week = findTaskProcessService.aggregatePeriodTaskRequest("week"); - - //then - assertThat(week.get(0).key()).isEqualTo("1월 30일"); - assertThat(week.get(0).count()).isEqualTo(7L); - assertThat(week.get(1).key()).isEqualTo("1월 31일"); - assertThat(week.get(1).count()).isEqualTo(6L); - assertThat(week.get(2).key()).isEqualTo("2월 1일"); - assertThat(week.get(2).count()).isEqualTo(8L); - } } \ No newline at end of file