Skip to content

Commit 5d2896f

Browse files
authored
Merge pull request #155 from TaskFlow-CLAP/feature/CLAP-69
CLAP-69 담당자 내 작업 조회 API 구현
2 parents b4cf90f + 2d04089 commit 5d2896f

9 files changed

Lines changed: 76 additions & 9 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package clap.server.adapter.inbound.web.dto.task;
2+
3+
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
4+
5+
import java.time.LocalDateTime;
6+
7+
public record FilterAssignedTaskListResponse(
8+
Long taskId,
9+
String taskCode,
10+
LocalDateTime requestedAt,
11+
String mainCategoryName,
12+
String categoryName,
13+
String title,
14+
String requesterName,
15+
TaskStatus taskStatus,
16+
LocalDateTime finishedAt
17+
) {}

src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public ResponseEntity<Page<FilterRequestedTasksResponse>> findTasksRequestedByUs
3737
Pageable pageable = PageRequest.of(page, pageSize);
3838
return ResponseEntity.ok(taskListUsecase.findTasksRequestedByUser(userInfo.getUserId(), pageable, filterTaskListRequest));
3939
}
40+
4041
@Operation(summary = "요청한 작업 상세 조회")
4142
@Secured({"ROLE_USER", "ROLE_MANAGER"})
4243
@GetMapping("/{taskId}/requests/details")
@@ -46,6 +47,18 @@ public ResponseEntity<FindTaskDetailsResponse> findRequestedTaskDetails(
4647
return ResponseEntity.ok(taskDetailsUsecase.findRequestedTaskDetails(userInfo.getUserId(), taskId));
4748
}
4849

50+
@Operation(summary = "할당된 내 작업 목록 조회")
51+
@Secured({"ROLE_MANAGER"})
52+
@GetMapping("/assigned")
53+
public ResponseEntity<Page<FilterAssignedTaskListResponse>> findTasksAssignedByManager(
54+
@RequestParam(defaultValue = "0") int page,
55+
@RequestParam(defaultValue = "20") int pageSize,
56+
@ModelAttribute FilterTaskListRequest filterTaskListRequest,
57+
@AuthenticationPrincipal SecurityUserDetails userInfo){
58+
Pageable pageable = PageRequest.of(page, pageSize);
59+
return ResponseEntity.ok(taskListUsecase.findTasksAssignedByManager(userInfo.getUserId(), pageable, filterTaskListRequest));
60+
}
61+
4962
@Operation(summary = "승인 대기 중인 요청 목록 조회")
5063
@Secured({"ROLE_MANAGER"})
5164
@GetMapping("/requests/pending")

src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse;
55
import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse;
66
import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest;
7+
import clap.server.adapter.inbound.web.dto.task.*;
78
import clap.server.adapter.outbound.persistense.entity.task.TaskEntity;
89
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
910
import clap.server.adapter.outbound.persistense.mapper.TaskPersistenceMapper;
@@ -50,6 +51,13 @@ public Page<FilterRequestedTasksResponse> findTasksRequestedByUser(Long requeste
5051
return taskList.map(TaskMapper::toFilterRequestedTasksResponse);
5152
}
5253

54+
@Override
55+
public Page<FilterAssignedTaskListResponse> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
56+
Page<Task> taskList = taskRepository.findTasksAssignedByManager(processorId, pageable, filterTaskListRequest)
57+
.map(taskPersistenceMapper::toDomain);
58+
return taskList.map(TaskMapper::toFilterAssignedTaskListResponse);
59+
}
60+
5361
@Override
5462
public Page<FilterPendingApprovalResponse> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
5563
Page<Task> taskList = taskRepository.findPendingApprovalTasks(pageable, filterTaskListRequest)

src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ public interface TaskCustomRepository {
1010
Page<TaskEntity> findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest);
1111
Page<TaskEntity> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest);
1212
Page<TaskEntity> findAllTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest);
13+
Page<TaskEntity> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest findTaskListRequest);
1314
}

src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,17 @@ public Page<TaskEntity> findTasksRequestedByUser(Long requesterId, Pageable page
3636
return getTasksPage(pageable, whereClause, filterTaskListRequest.orderRequest().sortBy(), filterTaskListRequest.orderRequest().sortDirection());
3737
}
3838

39+
@Override
40+
public Page<TaskEntity> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
41+
BooleanBuilder whereClause = createFilter(filterTaskListRequest);
42+
if (!filterTaskListRequest.nickName().isEmpty()) {
43+
whereClause.and(taskEntity.requester.nickname.eq(filterTaskListRequest.nickName()));
44+
}
45+
whereClause.and(taskEntity.processor.memberId.eq(processorId));
46+
47+
return getTasksPage(pageable, whereClause, filterTaskListRequest.orderRequest().sortBy(), filterTaskListRequest.orderRequest().sortDirection());
48+
}
49+
3950
@Override
4051
public Page<TaskEntity> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
4152
BooleanBuilder whereClause = createFilter(filterTaskListRequest);

src/main/java/clap/server/application/mapper/TaskMapper.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,19 @@ public static FilterRequestedTasksResponse toFilterRequestedTasksResponse(Task t
4242
task.getFinishedAt() != null ? task.getFinishedAt() : null
4343
);
4444
}
45-
45+
public static FilterAssignedTaskListResponse toFilterAssignedTaskListResponse(Task task) {
46+
return new FilterAssignedTaskListResponse(
47+
task.getTaskId(),
48+
task.getTaskCode(),
49+
task.getUpdatedAt(),
50+
task.getCategory().getMainCategory().getName(),
51+
task.getCategory().getName(),
52+
task.getTitle(),
53+
task.getRequester() != null ? task.getRequester().getMemberInfo().getNickname() : "",
54+
task.getTaskStatus(),
55+
task.getFinishedAt() != null ? task.getFinishedAt() : null
56+
);
57+
}
4658
public static FilterPendingApprovalResponse toFilterPendingApprovalTasksResponse(Task task) {
4759
return new FilterPendingApprovalResponse(
4860
task.getTaskId(),

src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package clap.server.application.port.inbound.task;
22

3-
import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse;
4-
import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest;
5-
import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse;
6-
import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse;
3+
import clap.server.adapter.inbound.web.dto.task.*;
74
import org.springframework.data.domain.Page;
85
import org.springframework.data.domain.Pageable;
96

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

10+
Page<FilterAssignedTaskListResponse> findTasksAssignedByManager(Long memberId, Pageable pageable, FilterTaskListRequest findTaskListRequest);
11+
1312
Page<FilterPendingApprovalResponse> findPendingApprovalTasks(Long userId, Pageable pageable, FilterTaskListRequest filterTaskListRequest);
1413

1514
Page<FilterAllTasksResponse> findAllTasks(Long userId, Pageable pageable, FilterTaskListRequest filterTaskListRequest);

src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package clap.server.application.port.outbound.task;
22

3+
import clap.server.adapter.inbound.web.dto.task.*;
34
import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse;
45
import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse;
56
import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse;
@@ -21,6 +22,8 @@ public interface LoadTaskPort {
2122

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

25+
Page<FilterAssignedTaskListResponse> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest);
26+
2427
Page<FilterPendingApprovalResponse> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest);
2528

2629
Page<FilterAllTasksResponse> findAllTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest);

src/main/java/clap/server/application/service/task/FindTaskListService.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package clap.server.application.service.task;
22

3-
import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse;
4-
import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest;
5-
import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse;
3+
import clap.server.adapter.inbound.web.dto.task.*;
64

7-
import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse;
85
import clap.server.application.port.inbound.domain.MemberService;
96

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

35+
@Override
36+
public Page<FilterAssignedTaskListResponse> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest findTaskListRequest) {
37+
Member processor = memberService.findActiveMember(processorId);
38+
return loadTaskPort.findTasksAssignedByManager(processor.getMemberId(), pageable, findTaskListRequest);
39+
}
40+
3841
@Override
3942
public Page<FilterPendingApprovalResponse> findPendingApprovalTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
4043
memberService.findActiveMember(managerId);

0 commit comments

Comments
 (0)