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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dto 및 API에 대한 swagger 명세 부탁드립니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 추가했습니다!

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package clap.server.adapter.inbound.web.dto.task;

import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;

import java.time.LocalDateTime;

public record FilterAssignedTaskListResponse(
Long taskId,
String taskCode,
LocalDateTime requestedAt,
String mainCategoryName,
String categoryName,
String title,
String requesterName,
TaskStatus taskStatus,
LocalDateTime finishedAt
) {}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public ResponseEntity<Page<FilterRequestedTasksResponse>> findTasksRequestedByUs
Pageable pageable = PageRequest.of(page, pageSize);
return ResponseEntity.ok(taskListUsecase.findTasksRequestedByUser(userInfo.getUserId(), pageable, filterTaskListRequest));
}

@Operation(summary = "요청한 작업 상세 조회")
@Secured({"ROLE_USER", "ROLE_MANAGER"})
@GetMapping("/{taskId}/requests/details")
Expand All @@ -46,6 +47,18 @@ public ResponseEntity<FindTaskDetailsResponse> findRequestedTaskDetails(
return ResponseEntity.ok(taskDetailsUsecase.findRequestedTaskDetails(userInfo.getUserId(), taskId));
}

@Operation(summary = "할당된 내 작업 목록 조회")
@Secured({"ROLE_MANAGER"})
@GetMapping("/assigned")
public ResponseEntity<Page<FilterAssignedTaskListResponse>> findTasksAssignedByManager(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int pageSize,
@ModelAttribute FilterTaskListRequest filterTaskListRequest,
@AuthenticationPrincipal SecurityUserDetails userInfo){
Pageable pageable = PageRequest.of(page, pageSize);
return ResponseEntity.ok(taskListUsecase.findTasksAssignedByManager(userInfo.getUserId(), pageable, filterTaskListRequest));
}

@Operation(summary = "승인 대기 중인 요청 목록 조회")
@Secured({"ROLE_MANAGER"})
@GetMapping("/requests/pending")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse;
import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse;
import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest;
import clap.server.adapter.inbound.web.dto.task.*;
import clap.server.adapter.outbound.persistense.entity.task.TaskEntity;
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
import clap.server.adapter.outbound.persistense.mapper.TaskPersistenceMapper;
Expand Down Expand Up @@ -50,6 +51,13 @@ public Page<FilterRequestedTasksResponse> findTasksRequestedByUser(Long requeste
return taskList.map(TaskMapper::toFilterRequestedTasksResponse);
}

@Override
public Page<FilterAssignedTaskListResponse> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
Page<Task> taskList = taskRepository.findTasksAssignedByManager(processorId, pageable, filterTaskListRequest)
.map(taskPersistenceMapper::toDomain);
return taskList.map(TaskMapper::toFilterAssignedTaskListResponse);
}

@Override
public Page<FilterPendingApprovalResponse> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
Page<Task> taskList = taskRepository.findPendingApprovalTasks(pageable, filterTaskListRequest)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ public interface TaskCustomRepository {
Page<TaskEntity> findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest);
Page<TaskEntity> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest);
Page<TaskEntity> findAllTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest);
Page<TaskEntity> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest findTaskListRequest);
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,17 @@ public Page<TaskEntity> findTasksRequestedByUser(Long requesterId, Pageable page
return getTasksPage(pageable, whereClause, filterTaskListRequest.orderRequest().sortBy(), filterTaskListRequest.orderRequest().sortDirection());
}

@Override
public Page<TaskEntity> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
BooleanBuilder whereClause = createFilter(filterTaskListRequest);
if (!filterTaskListRequest.nickName().isEmpty()) {
whereClause.and(taskEntity.requester.nickname.eq(filterTaskListRequest.nickName()));
}
whereClause.and(taskEntity.processor.memberId.eq(processorId));

return getTasksPage(pageable, whereClause, filterTaskListRequest.orderRequest().sortBy(), filterTaskListRequest.orderRequest().sortDirection());
}

@Override
public Page<TaskEntity> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
BooleanBuilder whereClause = createFilter(filterTaskListRequest);
Expand Down
14 changes: 13 additions & 1 deletion src/main/java/clap/server/application/mapper/TaskMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,19 @@ public static FilterRequestedTasksResponse toFilterRequestedTasksResponse(Task t
task.getFinishedAt() != null ? task.getFinishedAt() : null
);
}

public static FilterAssignedTaskListResponse toFilterAssignedTaskListResponse(Task task) {
return new FilterAssignedTaskListResponse(
task.getTaskId(),
task.getTaskCode(),
task.getUpdatedAt(),
task.getCategory().getMainCategory().getName(),
task.getCategory().getName(),
task.getTitle(),
task.getRequester() != null ? task.getRequester().getMemberInfo().getNickname() : "",
task.getTaskStatus(),
task.getFinishedAt() != null ? task.getFinishedAt() : null
);
}
public static FilterPendingApprovalResponse toFilterPendingApprovalTasksResponse(Task task) {
return new FilterPendingApprovalResponse(
task.getTaskId(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package clap.server.application.port.inbound.task;

import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse;
import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest;
import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse;
import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse;
import clap.server.adapter.inbound.web.dto.task.*;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

public interface FindTaskListUsecase {
Page<FilterRequestedTasksResponse> findTasksRequestedByUser(Long memberId, Pageable pageable, FilterTaskListRequest findTaskListRequest);

Page<FilterAssignedTaskListResponse> findTasksAssignedByManager(Long memberId, Pageable pageable, FilterTaskListRequest findTaskListRequest);

Page<FilterPendingApprovalResponse> findPendingApprovalTasks(Long userId, Pageable pageable, FilterTaskListRequest filterTaskListRequest);

Page<FilterAllTasksResponse> findAllTasks(Long userId, Pageable pageable, FilterTaskListRequest filterTaskListRequest);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package clap.server.application.port.outbound.task;

import clap.server.adapter.inbound.web.dto.task.*;
import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse;
import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse;
import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse;
Expand All @@ -21,6 +22,8 @@ public interface LoadTaskPort {

Page<FilterRequestedTasksResponse> findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest);

Page<FilterAssignedTaskListResponse> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest);

Page<FilterPendingApprovalResponse> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest);

Page<FilterAllTasksResponse> findAllTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package clap.server.application.service.task;

import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse;
import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest;
import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse;
import clap.server.adapter.inbound.web.dto.task.*;

import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse;
import clap.server.application.port.inbound.domain.MemberService;

import clap.server.application.port.inbound.task.FindTaskListUsecase;
Expand Down Expand Up @@ -35,6 +32,12 @@ public Page<FilterRequestedTasksResponse> findTasksRequestedByUser(Long requeste
return loadTaskPort.findTasksRequestedByUser(requester.getMemberId(), pageable, findTaskListRequest);
}

@Override
public Page<FilterAssignedTaskListResponse> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest findTaskListRequest) {
Member processor = memberService.findActiveMember(processorId);
return loadTaskPort.findTasksAssignedByManager(processor.getMemberId(), pageable, findTaskListRequest);
}

@Override
public Page<FilterPendingApprovalResponse> findPendingApprovalTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
memberService.findActiveMember(managerId);
Expand Down