Skip to content

Commit 7f964d7

Browse files
authored
Merge pull request #283 from TaskFlow-CLAP/CLAP-239
CLAP-239 작업 보드 조회 페이징 제거 및 필터링 로직 수정
2 parents c6e1f8d + f9b19e4 commit 7f964d7

20 files changed

+123
-134
lines changed

src/main/java/clap/server/adapter/inbound/web/dto/task/request/FilterTaskBoardRequest.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
package clap.server.adapter.inbound.web.dto.task.request;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotNull;
5+
6+
import java.util.List;
47

58
public record FilterTaskBoardRequest(
69
@Schema(description = "라벨 ID")
710
Long labelId,
811

9-
@Schema(description = "1차 카테고리 ID, ** 2차 카테고리로 검색할 시에는 1차 카테고리 값은 넣지 않습니다.")
10-
Long mainCategoryId,
12+
@Schema(description = "1차 카테고리 ID 목록", example = "[1, 3, 5]")
13+
@NotNull
14+
List<Long> mainCategoryIds,
1115

12-
@Schema(description = "2차 카테고리 ID")
13-
Long subCategoryId,
16+
@Schema(description = "2차 카테고리 ID 목록", example = "[2, 4]")
17+
@NotNull
18+
List<Long> categoryIds,
1419

1520
@Schema(description = "작업 제목", example = "작업 제목")
1621
String title,

src/main/java/clap/server/adapter/inbound/web/dto/task/response/TaskBoardResponse.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
public record TaskBoardResponse(
66
List<TaskItemResponse> tasksInProgress,
77
List<TaskItemResponse> tasksPendingComplete,
8-
List<TaskItemResponse> tasksCompleted,
9-
boolean hasNext,
10-
boolean isFirst,
11-
boolean isLast
8+
List<TaskItemResponse> tasksCompleted
129
){
1310
}

src/main/java/clap/server/adapter/inbound/web/dto/task/response/TaskItemResponse.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package clap.server.adapter.inbound.web.dto.task.response;
22

3+
import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor;
34
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
45

56
import java.time.LocalDateTime;
@@ -10,11 +11,19 @@ public record TaskItemResponse(
1011
String title,
1112
String mainCategoryName,
1213
String categoryName,
14+
LabelInfo labelInfo,
1315
String requesterNickname,
1416
String requesterImageUrl,
1517
String requesterDepartment,
1618
long processorOrder,
1719
TaskStatus taskStatus,
1820
LocalDateTime createdAt
19-
){
21+
) {
22+
public static record LabelInfo(
23+
String labelName,
24+
LabelColor labelColor
25+
) {
26+
}
27+
2028
}
29+

src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamStatusResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import java.util.List;
44

55
public record TeamStatusResponse(
6-
List<TeamMemberTaskResponse> members
6+
List<TeamTaskResponse> members
77
) {
8-
public TeamStatusResponse(List<TeamMemberTaskResponse> members) {
8+
public TeamStatusResponse(List<TeamTaskResponse> members) {
99
this.members = (members == null) ? List.of() : members;
1010
}
1111
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package clap.server.adapter.inbound.web.dto.task.response;
2+
3+
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
4+
5+
import java.time.LocalDateTime;
6+
7+
public record TeamTaskItemResponse(
8+
Long taskId,
9+
String taskCode,
10+
String title,
11+
String mainCategoryName,
12+
String categoryName,
13+
String requesterNickname,
14+
String requesterImageUrl,
15+
String requesterDepartment,
16+
long processorOrder,
17+
TaskStatus taskStatus,
18+
LocalDateTime createdAt
19+
) {
20+
}

src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamMemberTaskResponse.java renamed to src/main/java/clap/server/adapter/inbound/web/dto/task/response/TeamTaskResponse.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@
44

55
import java.util.List;
66

7-
public record TeamMemberTaskResponse(
7+
public record TeamTaskResponse(
88
Long processorId,
99
String nickname,
1010
String imageUrl,
1111
String department,
1212
int inProgressTaskCount,
1313
int pendingTaskCount,
1414
int totalTaskCount,
15-
List<TaskItemResponse> tasks
15+
List<TeamTaskItemResponse> tasks
1616
) {
1717
@QueryProjection
18-
public TeamMemberTaskResponse {
18+
public TeamTaskResponse {
1919
tasks = (tasks == null) ? List.of() : tasks;
2020
}
2121
}

src/main/java/clap/server/adapter/inbound/web/history/CommandCommentController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package clap.server.adapter.inbound.web.history;
22

3-
import clap.server.adapter.inbound.security.SecurityUserDetails;
3+
import clap.server.adapter.inbound.security.service.SecurityUserDetails;
44
import clap.server.adapter.inbound.web.dto.history.request.EditCommentRequest;
55
import clap.server.application.port.inbound.history.DeleteCommentUsecase;
66
import clap.server.application.port.inbound.history.EditCommentUsecase;

src/main/java/clap/server/adapter/inbound/web/history/PostCommentController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package clap.server.adapter.inbound.web.history;
22

3-
import clap.server.adapter.inbound.security.SecurityUserDetails;
3+
import clap.server.adapter.inbound.security.service.SecurityUserDetails;
44
import clap.server.adapter.inbound.web.dto.history.request.CreateCommentRequest;
55
import clap.server.application.port.inbound.history.SaveCommentAttachmentUsecase;
66
import clap.server.application.port.inbound.history.SaveCommentUsecase;

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

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,13 @@
77
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
88
import clap.server.application.port.inbound.task.FilterTaskBoardUsecase;
99
import clap.server.application.port.inbound.task.UpdateTaskBoardUsecase;
10-
import clap.server.application.port.inbound.task.GetTaskBoardUsecase;
1110
import clap.server.application.port.inbound.task.UpdateTaskOrderAndStatusUsecase;
1211
import clap.server.common.annotation.architecture.WebAdapter;
1312
import io.swagger.v3.oas.annotations.Operation;
1413
import io.swagger.v3.oas.annotations.Parameter;
1514
import io.swagger.v3.oas.annotations.media.Schema;
1615
import io.swagger.v3.oas.annotations.tags.Tag;
1716
import lombok.RequiredArgsConstructor;
18-
import lombok.extern.slf4j.Slf4j;
19-
import org.springframework.data.domain.PageRequest;
20-
import org.springframework.data.domain.Pageable;
2117
import org.springframework.format.annotation.DateTimeFormat;
2218
import org.springframework.http.ResponseEntity;
2319
import org.springframework.security.access.annotation.Secured;
@@ -26,38 +22,32 @@
2622

2723
import java.time.LocalDate;
2824

29-
@Slf4j
3025
@Tag(name = "02. Task [담당자]")
3126
@WebAdapter
3227
@RestController
3328
@RequiredArgsConstructor
3429
@RequestMapping("/api/task-board")
3530
public class TaskBoardController {
36-
private final GetTaskBoardUsecase getTaskBoardUsecase;
3731
private final FilterTaskBoardUsecase filterTaskBoardUsecase;
3832
private final UpdateTaskBoardUsecase updateTaskBoardUsecase;
3933
private final UpdateTaskOrderAndStatusUsecase updateTaskOrderAndStatus;
4034

4135
@Operation(summary = "작업 보드 조회 API")
4236
@Secured({"ROLE_MANAGER"})
4337
@GetMapping
44-
public ResponseEntity<TaskBoardResponse> getTaskBoard(@RequestParam(defaultValue = "0") int page,
45-
@RequestParam(defaultValue = "20") int pageSize,
46-
@Parameter(description = "작업 완료 일자 조회 기준, yyyy-mm-dd 형식으로 입력합니다.") @RequestParam(required = false)
47-
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate untilDate,
48-
@io.swagger.v3.oas.annotations.parameters.RequestBody(description = "필터링 조회 request") @ModelAttribute FilterTaskBoardRequest request,
49-
@AuthenticationPrincipal SecurityUserDetails userInfo) {
50-
Pageable pageable = PageRequest.of(page, pageSize);
51-
if (request != null) {
52-
return ResponseEntity.ok(filterTaskBoardUsecase.getTaskBoardByFilter(userInfo.getUserId(), untilDate, request, pageable));
53-
} else
54-
return ResponseEntity.ok(getTaskBoardUsecase.getTaskBoards(userInfo.getUserId(), untilDate, pageable));
38+
public ResponseEntity<TaskBoardResponse> getTaskBoard(
39+
@Parameter(description = "작업 완료 일자 조회 기준, yyyy-mm-dd 형식으로 입력합니다.") @RequestParam(required = false)
40+
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate fromDate,
41+
@ModelAttribute FilterTaskBoardRequest request,
42+
@AuthenticationPrincipal SecurityUserDetails userInfo) {
43+
return ResponseEntity.ok(filterTaskBoardUsecase.getTaskBoardByFilter(userInfo.getUserId(), fromDate, request));
5544
}
5645

5746
@Operation(summary = "작업 보드 순서 및 상태 변경 API")
5847
@Secured({"ROLE_MANAGER"})
5948
@PatchMapping
60-
public void updateTaskBoard(@Parameter(description = "전환될 작업의 상태, 상태 전환이 아니라면 입력 X", schema = @Schema(allowableValues = {"IN_PROGRESS", "PENDING_COMPLETED", "COMPLETED"}))
49+
public void updateTaskBoard(@Parameter(description = "전환될 작업의 상태, 상태 전환이 아니라면 입력 X",
50+
schema = @Schema(allowableValues = {"IN_PROGRESS", "PENDING_COMPLETED", "COMPLETED"}))
6151
@RequestParam(required = false) TaskStatus status,
6252
@RequestBody UpdateTaskOrderRequest request,
6353
@AuthenticationPrincipal SecurityUserDetails userInfo) {

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

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package clap.server.adapter.outbound.persistense;
22

3-
import clap.server.adapter.inbound.web.dto.task.request.FilterTaskListRequest;
43
import clap.server.adapter.inbound.web.dto.task.request.FilterTaskBoardRequest;
4+
import clap.server.adapter.inbound.web.dto.task.request.FilterTaskListRequest;
55
import clap.server.adapter.inbound.web.dto.task.request.FilterTeamStatusRequest;
6-
import clap.server.adapter.inbound.web.dto.task.response.TeamMemberTaskResponse;
6+
import clap.server.adapter.inbound.web.dto.task.response.TeamTaskResponse;
77
import clap.server.adapter.outbound.persistense.entity.task.TaskEntity;
88
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
99
import clap.server.adapter.outbound.persistense.mapper.TaskPersistenceMapper;
@@ -16,8 +16,6 @@
1616
import lombok.extern.slf4j.Slf4j;
1717
import org.springframework.data.domain.Page;
1818
import org.springframework.data.domain.Pageable;
19-
import org.springframework.data.domain.Slice;
20-
import org.springframework.data.domain.SliceImpl;
2119

2220
import java.time.LocalDateTime;
2321
import java.util.List;
@@ -61,12 +59,6 @@ public Page<Task> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequ
6159
.map(taskPersistenceMapper::toDomain);
6260
}
6361

64-
@Override
65-
public Slice<Task> findByProcessorAndStatus(Long processorId, List<TaskStatus> statuses, LocalDateTime untilDate, Pageable pageable) {
66-
Slice<TaskEntity> tasks = taskRepository.findTasksWithTaskStatusAndCompletedAt(processorId, statuses, untilDate, pageable);
67-
return tasks.map(taskPersistenceMapper::toDomain);
68-
}
69-
7062
@Override
7163
public Optional<Task> findByIdAndStatus(Long id, TaskStatus status) {
7264
Optional<TaskEntity> taskEntity = taskRepository.findByTaskIdAndTaskStatus(id, status);
@@ -98,21 +90,14 @@ public Optional<Task> findNextOrderTaskByProcessorIdAndStatus(Long processorId,
9890
}
9991

10092
@Override
101-
public Slice<Task> findTaskBoardByFilter(Long processorId, List<TaskStatus> statuses, LocalDateTime untilDate, FilterTaskBoardRequest request, Pageable pageable) {
102-
List<Task> taskList = new java.util.ArrayList<>(taskRepository.findTasksByFilter(processorId, statuses, untilDate, request, pageable)
93+
public List<Task> findTaskBoardByFilter(Long processorId, List<TaskStatus> statuses, LocalDateTime fromDate, FilterTaskBoardRequest request) {
94+
return taskRepository.findTasksByFilter(processorId, statuses, fromDate, request)
10395
.stream()
104-
.map(taskPersistenceMapper::toDomain)
105-
.toList());
106-
107-
boolean hasNext = taskList.size() > pageable.getPageSize();
108-
if (hasNext) {
109-
taskList.remove(taskList.size() - 1);
110-
}
111-
return new SliceImpl<>(taskList, pageable, hasNext);
96+
.map(taskPersistenceMapper::toDomain).toList();
11297
}
11398

11499
@Override
115-
public List<TeamMemberTaskResponse> findTeamStatus(Long memberId, FilterTeamStatusRequest filter) {
100+
public List<TeamTaskResponse> findTeamStatus(Long memberId, FilterTeamStatusRequest filter) {
116101
return taskRepository.findTeamStatus(memberId, filter);
117102
}
118103

0 commit comments

Comments
 (0)