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 @@ -13,7 +13,7 @@
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

@Tag(name = "02. Task", description = "작업 생성/수정 API")
@Tag(name = "02. Task [생성/수정]", description = "작업 생성/수정 API")
@WebAdapter
@RestController
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

import java.util.List;

@Tag(name = "02. Task", description = "작업 생성/수정 API")
@Tag(name = "02. Task [생성/수정]", description = "작업 생성/수정 API")
@WebAdapter
@RestController
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

import java.util.List;

@Tag(name = "02. Task[검토자]")
@Tag(name = "02. Task [검토자]")
@WebAdapter
@RestController
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import clap.server.adapter.inbound.web.dto.log.MemberLogResponse;
import clap.server.application.port.inbound.log.FindApiLogsUsecase;
import clap.server.common.annotation.architecture.WebAdapter;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
Expand All @@ -18,14 +20,16 @@

import java.util.List;

@Tag(name = "05. Admin")
@WebAdapter
@RestController
@RequestMapping("/api/logs")
@RequestMapping("/api/managements/logs")
@RequiredArgsConstructor
public class LogController {

private final FindApiLogsUsecase findApiLogsUsecase;

@Operation(summary = "로그인 로그 목록 조회")
@Secured({"ROLE_ADMIN"})
@GetMapping("/login")
public ResponseEntity<PageResponse<AnonymousLogResponse>> getLoginAttempts(
Expand All @@ -37,6 +41,7 @@ public ResponseEntity<PageResponse<AnonymousLogResponse>> getLoginAttempts(
return ResponseEntity.ok(findApiLogsUsecase.filterAnonymousLogs(anonymousLogRequest, pageable));
}

@Operation(summary = "작업 로그 목록 조회")
@Secured({"ROLE_ADMIN"})
@GetMapping("/general")
public ResponseEntity<PageResponse<MemberLogResponse>> getApiCalls(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import java.util.List;


@Tag(name = "02. Task", description = "작업 생성/수정 API")
@Tag(name = "02. Task [생성/수정]", description = "작업 생성/수정 API")
@WebAdapter
@RestController
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,24 +47,21 @@ public Optional<Task> findById(Long id) {
}

@Override
public Page<FilterRequestedTasksResponse> findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
Page<Task> taskList = taskRepository.findTasksRequestedByUser(requesterId, pageable, filterTaskListRequest)
public Page<Task> findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
return taskRepository.findTasksRequestedByUser(requesterId, pageable, filterTaskListRequest)
.map(taskPersistenceMapper::toDomain);
return taskList.map(TaskMapper::toFilterRequestedTasksResponse);
}

@Override
public Page<FilterAssignedTaskListResponse> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
Page<Task> taskList = taskRepository.findTasksAssignedByManager(processorId, pageable, filterTaskListRequest)
public Page<Task> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
return 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)
public Page<Task> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
return taskRepository.findPendingApprovalTasks(pageable, filterTaskListRequest)
.map(taskPersistenceMapper::toDomain);
return taskList.map(TaskMapper::toFilterPendingApprovalTasksResponse);
}

@Override
Expand All @@ -86,10 +83,9 @@ public List<Task> findYesterdayTaskByDate(LocalDateTime now) {
}

@Override
public Page<FilterAllTasksResponse> findAllTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
Page<Task> taskList = taskRepository.findAllTasks(pageable, filterTaskListRequest)
public Page<Task> findAllTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
return taskRepository.findAllTasks(pageable, filterTaskListRequest)
.map(taskPersistenceMapper::toDomain);
return taskList.map(TaskMapper::toFilterAllTasksResponse);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class TaskCustomRepositoryImpl implements TaskCustomRepository {
public Page<TaskEntity> findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
BooleanBuilder builder = createFilter(filterTaskListRequest);
if (!filterTaskListRequest.nickName().isEmpty()) {
builder.and(taskEntity.processor.nickname.eq(filterTaskListRequest.nickName()));
builder.and(taskEntity.processor.nickname.contains(filterTaskListRequest.nickName()));
}
builder.and(taskEntity.requester.memberId.eq(requesterId));

Expand All @@ -42,7 +42,7 @@ public Page<TaskEntity> findTasksRequestedByUser(Long requesterId, Pageable page
public Page<TaskEntity> findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
BooleanBuilder builder = createFilter(filterTaskListRequest);
if (!filterTaskListRequest.nickName().isEmpty()) {
builder.and(taskEntity.requester.nickname.eq(filterTaskListRequest.nickName()));
builder.and(taskEntity.requester.nickname.contains(filterTaskListRequest.nickName()));
}
builder.and(taskEntity.processor.memberId.eq(processorId));

Expand All @@ -53,7 +53,7 @@ public Page<TaskEntity> findTasksAssignedByManager(Long processorId, Pageable pa
public Page<TaskEntity> findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
BooleanBuilder builder = createFilter(filterTaskListRequest);
if (!filterTaskListRequest.nickName().isEmpty()) {
builder.and(taskEntity.requester.nickname.eq(filterTaskListRequest.nickName()));
builder.and(taskEntity.requester.nickname.contains(filterTaskListRequest.nickName()));
}
builder.and(taskEntity.taskStatus.eq(TaskStatus.REQUESTED));
return getTasksPage(pageable, builder, filterTaskListRequest.sortBy(), filterTaskListRequest.sortDirection());
Expand All @@ -64,8 +64,8 @@ public Page<TaskEntity> findAllTasks(Pageable pageable, FilterTaskListRequest fi
BooleanBuilder builder = createFilter(filterTaskListRequest);
if (!filterTaskListRequest.nickName().isEmpty()) {
builder.and(
taskEntity.requester.nickname.eq(filterTaskListRequest.nickName())
.or(taskEntity.processor.nickname.eq(filterTaskListRequest.nickName()))
taskEntity.requester.nickname.contains(filterTaskListRequest.nickName())
.or(taskEntity.processor.nickname.contains(filterTaskListRequest.nickName()))
);
}
return getTasksPage(pageable, builder, filterTaskListRequest.sortBy(), filterTaskListRequest.sortDirection());
Expand Down Expand Up @@ -137,13 +137,17 @@ private Page<TaskEntity> getTasksPage(Pageable pageable, BooleanBuilder builder,

List<TaskEntity> result = queryFactory
.selectFrom(taskEntity)
.leftJoin(taskEntity.processor).fetchJoin()
.leftJoin(taskEntity.requester).fetchJoin()
.where(builder)
.orderBy(orderSpecifier)
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();
long total = queryFactory
.selectFrom(taskEntity)
.leftJoin(taskEntity.processor).fetchJoin()
.leftJoin(taskEntity.requester).fetchJoin()
.where(builder)
.fetch().size();
return new PageImpl<>(result, pageable, total);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ public interface LoadTaskPort {

List<Task> findYesterdayTaskByDate(LocalDateTime now);

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

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

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

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

Slice<Task> findByProcessorAndStatus(Long processorId, List<TaskStatus> statuses, LocalDateTime untilDate, Pageable pageable);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import clap.server.adapter.inbound.web.dto.common.PageResponse;
import clap.server.adapter.inbound.web.dto.task.*;

import clap.server.application.mapper.TaskMapper;
import clap.server.application.port.inbound.domain.MemberService;

import clap.server.application.port.inbound.task.FindTaskListUsecase;
Expand All @@ -11,13 +12,13 @@
import clap.server.common.annotation.architecture.ApplicationService;
import clap.server.domain.model.member.Member;

import clap.server.domain.model.task.Task;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;



@ApplicationService
@RequiredArgsConstructor
@Transactional(readOnly = true)
Expand All @@ -30,28 +31,28 @@ public class FindTaskListService implements FindTaskListUsecase {
@Override
public PageResponse<FilterRequestedTasksResponse> findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest) {
Member requester = memberService.findActiveMember(requesterId);
Page<FilterRequestedTasksResponse> filterRequestedTasksResponses = loadTaskPort.findTasksRequestedByUser(requester.getMemberId(), pageable, findTaskListRequest);
return PageResponse.from(filterRequestedTasksResponses);
return PageResponse.from(loadTaskPort.findTasksRequestedByUser(requester.getMemberId(), pageable, findTaskListRequest)
.map(TaskMapper::toFilterRequestedTasksResponse));
}

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

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

@Override
public PageResponse<FilterAllTasksResponse> findAllTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) {
memberService.findActiveMember(managerId);
Page<FilterAllTasksResponse> filterAllTasksResponses = loadTaskPort.findAllTasks(pageable, filterTaskListRequest);
return PageResponse.from(filterAllTasksResponses);
return PageResponse.from(loadTaskPort.findAllTasks(pageable, filterTaskListRequest)
.map(TaskMapper::toFilterAllTasksResponse));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
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.FilterPendingApprovalResponse;
import clap.server.application.mapper.TaskMapper;
import clap.server.application.port.inbound.domain.MemberService;
import clap.server.application.port.outbound.task.LoadTaskPort;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -21,6 +22,8 @@
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

Expand All @@ -36,7 +39,8 @@ class FindTaskListServiceTest {

private FilterTaskListRequest filterTaskListRequest;
private Pageable pageable;
private Page<FilterPendingApprovalResponse> expectedResponse;
private PageResponse<FilterPendingApprovalResponse> expectedResponse;
private Page<FilterPendingApprovalResponse> pageResponse;

@BeforeEach
void setUp() {
Expand All @@ -54,17 +58,18 @@ void setUp() {
2L, "TC002", LocalDateTime.of(2025, 1, 15, 14, 30),
"메인 카테고리2", "서브 카테고리2", "다른 작업 제목", "john.doe"
);
expectedResponse = new PageImpl<>(List.of(response, response2), pageable, 1);
pageResponse = new PageImpl<>(List.of(response, response2), pageable, 2);
expectedResponse = PageResponse.from(pageResponse);

}

@Test
@DisplayName("승인대기 중인 작업요청목록 조회")
void findPendingApprovalTasks_ReturnFilteredTasks() {
// given
Long managerId = 1L;
when(loadTaskPort.findPendingApprovalTasks(pageable, filterTaskListRequest))
when(findTaskListService.findPendingApprovalTasks(managerId, eq(pageable), eq(filterTaskListRequest)))
.thenReturn(expectedResponse);

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

Expand Down
Loading