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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import org.springframework.web.bind.annotation.*;


@Tag(name = "02. Task[검토자]")
@Tag(name = "02. Task [검토자]")
@WebAdapter
@RestController
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package clap.server.adapter.inbound.web.task;

import clap.server.adapter.inbound.security.SecurityUserDetails;
import clap.server.adapter.inbound.web.dto.common.PageResponse;
import clap.server.adapter.inbound.web.dto.task.*;
import clap.server.application.port.inbound.task.FindTaskDetailsUsecase;
import clap.server.application.port.inbound.task.FindTaskListUsecase;
Expand Down Expand Up @@ -29,7 +30,7 @@ public class FindTaskController {
@Operation(summary = "사용자 요청 작업 목록 조회")
@Secured({"ROLE_USER", "ROLE_MANAGER"})
@GetMapping("/requests")
public ResponseEntity<Page<FilterRequestedTasksResponse>> findTasksRequestedByUser(
public ResponseEntity<PageResponse<FilterRequestedTasksResponse>> findTasksRequestedByUser(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int pageSize,
@ModelAttribute FilterTaskListRequest filterTaskListRequest,
Expand All @@ -50,7 +51,7 @@ public ResponseEntity<FindTaskDetailsResponse> findRequestedTaskDetails(
@Operation(summary = "할당된 내 작업 목록 조회")
@Secured({"ROLE_MANAGER"})
@GetMapping("/assigned")
public ResponseEntity<Page<FilterAssignedTaskListResponse>> findTasksAssignedByManager(
public ResponseEntity<PageResponse<FilterAssignedTaskListResponse>> findTasksAssignedByManager(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int pageSize,
@ModelAttribute FilterTaskListRequest filterTaskListRequest,
Expand All @@ -62,7 +63,7 @@ public ResponseEntity<Page<FilterAssignedTaskListResponse>> findTasksAssignedByM
@Operation(summary = "승인 대기 중인 요청 목록 조회")
@Secured({"ROLE_MANAGER"})
@GetMapping("/requests/pending")
public ResponseEntity<Page<FilterPendingApprovalResponse>> findPendingApprovalTasks(
public ResponseEntity<PageResponse<FilterPendingApprovalResponse>> findPendingApprovalTasks(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int pageSize,
@ModelAttribute FilterTaskListRequest filterTaskListRequest,
Expand All @@ -74,7 +75,7 @@ public ResponseEntity<Page<FilterPendingApprovalResponse>> findPendingApprovalTa
@Operation(summary = "전체 작업 목록 조회")
@Secured("ROLE_MANAGER")
@GetMapping
public ResponseEntity<Page<FilterAllTasksResponse>> findAllTasks(
public ResponseEntity<PageResponse<FilterAllTasksResponse>> findAllTasks(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int pageSize,
@ModelAttribute FilterTaskListRequest filterTaskListRequest,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public class TaskCustomRepositoryImpl implements TaskCustomRepository {

private final JPAQueryFactory queryFactory;


@Override
public Page<TaskEntity> findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
BooleanBuilder builder = createFilter(filterTaskListRequest);
Expand All @@ -39,13 +40,13 @@ public Page<TaskEntity> findTasksRequestedByUser(Long requesterId, Pageable page

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

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

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package clap.server.application.port.inbound.task;

import clap.server.adapter.inbound.web.dto.common.PageResponse;
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);
PageResponse<FilterRequestedTasksResponse> findTasksRequestedByUser(Long memberId, Pageable pageable, FilterTaskListRequest findTaskListRequest);

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

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

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

import clap.server.adapter.inbound.web.dto.common.PageResponse;
import clap.server.adapter.inbound.web.dto.task.*;

import clap.server.application.port.inbound.domain.MemberService;
Expand Down Expand Up @@ -27,26 +28,30 @@ public class FindTaskListService implements FindTaskListUsecase {


@Override
public Page<FilterRequestedTasksResponse> findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest) {
public PageResponse<FilterRequestedTasksResponse> findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest) {
Member requester = memberService.findActiveMember(requesterId);
return loadTaskPort.findTasksRequestedByUser(requester.getMemberId(), pageable, findTaskListRequest);
Page<FilterRequestedTasksResponse> filterRequestedTasksResponses = loadTaskPort.findTasksRequestedByUser(requester.getMemberId(), pageable, findTaskListRequest);
return PageResponse.from(filterRequestedTasksResponses);
}

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

@Override
public Page<FilterPendingApprovalResponse> findPendingApprovalTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
public PageResponse<FilterPendingApprovalResponse> findPendingApprovalTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
memberService.findActiveMember(managerId);
return loadTaskPort.findPendingApprovalTasks(pageable, filterTaskListRequest);
Page<FilterPendingApprovalResponse> filterPendingApprovalResponses = loadTaskPort.findPendingApprovalTasks(pageable, filterTaskListRequest);
return PageResponse.from(filterPendingApprovalResponses);
}

@Override
public Page<FilterAllTasksResponse> findAllTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
public PageResponse<FilterAllTasksResponse> findAllTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
memberService.findActiveMember(managerId);
return loadTaskPort.findAllTasks(pageable, filterTaskListRequest);
Page<FilterAllTasksResponse> filterAllTasksResponses = loadTaskPort.findAllTasks(pageable, filterTaskListRequest);
return PageResponse.from(filterAllTasksResponses);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package clap.server.application.service.task;

import clap.server.adapter.inbound.web.dto.common.PageResponse;
import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest;
import clap.server.adapter.inbound.web.dto.task.OrderTaskRequest;
import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse;
Expand Down Expand Up @@ -66,25 +67,25 @@ void findPendingApprovalTasks_ReturnFilteredTasks() {
.thenReturn(expectedResponse);

// when
Page<FilterPendingApprovalResponse> result = findTaskListService.findPendingApprovalTasks(managerId, pageable, filterTaskListRequest);
PageResponse<FilterPendingApprovalResponse> result = findTaskListService.findPendingApprovalTasks(managerId, pageable, filterTaskListRequest);

// then
assertThat(result).isNotNull();
assertThat(result.getTotalElements()).isEqualTo(2);
assertThat(result.totalElements()).isEqualTo(2);

assertThat(result.getContent()).hasSize(2)
assertThat(result.content()).hasSize(2)
.extracting(FilterPendingApprovalResponse::taskId)
.containsExactly(1L, 2L);

assertThat(result.getContent().get(0))
assertThat(result.content().get(0))
.extracting(FilterPendingApprovalResponse::taskId, FilterPendingApprovalResponse::taskCode,
FilterPendingApprovalResponse::requestedAt, FilterPendingApprovalResponse::mainCategoryName,
FilterPendingApprovalResponse::categoryName, FilterPendingApprovalResponse::title,
FilterPendingApprovalResponse::requesterName)
.containsExactly(1L, "TC001", LocalDateTime.of(2025, 1, 24, 12, 30),
"메인 카테고리", "서브 카테고리", "작업 제목", "atom.park");

assertThat(result.getContent().get(1))
assertThat(result.content().get(1))
.extracting(FilterPendingApprovalResponse::taskId, FilterPendingApprovalResponse::taskCode,
FilterPendingApprovalResponse::requestedAt, FilterPendingApprovalResponse::mainCategoryName,
FilterPendingApprovalResponse::categoryName, FilterPendingApprovalResponse::title,
Expand Down