Skip to content

Commit c184f9f

Browse files
authored
Merge pull request #136 from TaskFlow-CLAP/CLAP-70
CLAP-70 작업보드 조회 API 구현
2 parents 7a03d28 + 825e519 commit c184f9f

25 files changed

+257
-44
lines changed

src/main/java/clap/server/adapter/inbound/web/dto/common/SliceResponse.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55

66
public record SliceResponse<T> (
77
List<T> content,
8-
int currentPage,
9-
int size,
8+
boolean hasNext,
109
boolean isFirst,
1110
boolean isLast
1211
) {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package clap.server.adapter.inbound.web.dto.task.response;
2+
3+
import java.util.List;
4+
5+
public record TaskBoardResponse(
6+
List<TaskItemResponse> tasksInProgress,
7+
List<TaskItemResponse> tasksPendingComplete,
8+
List<TaskItemResponse> tasksCompleted,
9+
boolean hasNext,
10+
boolean isFirst,
11+
boolean isLast
12+
){
13+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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 TaskItemResponse(
8+
Long taskId,
9+
String taskCode,
10+
String mainCategoryName,
11+
String categoryName,
12+
String requesterNickname,
13+
String requesterImageUrl,
14+
String requesterDepartment,
15+
long processorOrder,
16+
TaskStatus taskStatus,
17+
LocalDateTime createdAt
18+
){
19+
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public ResponseEntity<Page<FilterTaskListResponse>> findTasksRequestedByUser(
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("/requests/details/{taskId}")
@@ -45,7 +46,8 @@ public ResponseEntity<FindTaskDetailsResponse> findRequestedTaskDetails(
4546
@AuthenticationPrincipal SecurityUserDetails userInfo){
4647
return ResponseEntity.ok(taskDetailsUsecase.findRequestedTaskDetails(userInfo.getUserId(), taskId));
4748
}
48-
@Operation(summary = "승인대기 중인 요청 목록 조회")
49+
50+
@Operation(summary = "승인 대기 중인 요청 목록 조회")
4951
@Secured({"ROLE_MANAGER"})
5052
@GetMapping("/requests/pending")
5153
public ResponseEntity<Page<FilterPendingApprovalResponse>> findPendingApprovalTasks(
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package clap.server.adapter.inbound.web.task;
2+
3+
import clap.server.adapter.inbound.security.SecurityUserDetails;
4+
import clap.server.adapter.inbound.web.dto.task.response.TaskBoardResponse;
5+
import clap.server.application.port.inbound.task.TaskBoardUsecase;
6+
import clap.server.common.annotation.architecture.WebAdapter;
7+
import io.swagger.v3.oas.annotations.Parameter;
8+
import io.swagger.v3.oas.annotations.tags.Tag;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.data.domain.PageRequest;
11+
import org.springframework.data.domain.Pageable;
12+
import org.springframework.format.annotation.DateTimeFormat;
13+
import org.springframework.http.ResponseEntity;
14+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
15+
import org.springframework.web.bind.annotation.GetMapping;
16+
import org.springframework.web.bind.annotation.RequestMapping;
17+
import org.springframework.web.bind.annotation.RequestParam;
18+
import org.springframework.web.bind.annotation.RestController;
19+
20+
import java.time.LocalDate;
21+
22+
@Tag(name = "작업 보드 조회 및 순서 변경")
23+
@WebAdapter
24+
@RestController
25+
@RequiredArgsConstructor
26+
@RequestMapping("/api/task-board")
27+
public class TaskBoardController {
28+
private final TaskBoardUsecase taskBoardUsecase;
29+
30+
@GetMapping
31+
public ResponseEntity<TaskBoardResponse> getTaskBoard(@RequestParam(defaultValue = "0") int page,
32+
@RequestParam(defaultValue = "20") int pageSize,
33+
@Parameter(description = "yyyy-mm-dd 형식으로 입력합니다.") @RequestParam(required = false)
34+
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate untilDate,
35+
@AuthenticationPrincipal SecurityUserDetails userInfo) {
36+
Pageable pageable = PageRequest.of(page, pageSize);
37+
return ResponseEntity.ok(taskBoardUsecase.getTaskBoards(userInfo.getUserId(), untilDate, pageable));
38+
}
39+
40+
41+
}

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,16 @@ public void saveAll(List<Attachment> attachments) {
3939

4040
@Override
4141
public List<Attachment> findAllByTaskIdAndCommentIsNull(final Long taskId) {
42-
List<AttachmentEntity> attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNull(taskId);
42+
List<AttachmentEntity> attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNullAndIsDeletedIsFalse(taskId);
4343
return attachmentEntities.stream()
4444
.map(attachmentPersistenceMapper::toDomain)
4545
.collect(Collectors.toList());
4646
}
4747

4848
public List<Attachment> findAllByTaskIdAndCommentIsNullAndAttachmentId(final Long taskId, final List<Long> attachmentIds) {
49-
List<AttachmentEntity> attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNullAndAttachmentIdIn(taskId, attachmentIds);
49+
List<AttachmentEntity> attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNullAndIsDeletedIsFalseAndAttachmentIdIn(taskId, attachmentIds);
5050
return attachmentEntities.stream()
5151
.map(attachmentPersistenceMapper::toDomain)
5252
.collect(Collectors.toList());
5353
}
54-
55-
@Override
56-
public void deleteByIds(List<Long> attachmentIds) {
57-
attachmentRepository.deleteAllByAttachmentIdIn(attachmentIds);
58-
}
5954
}

src/main/java/clap/server/adapter/outbound/persistense/repository/LabelPersistenceAdapter.java renamed to src/main/java/clap/server/adapter/outbound/persistense/LabelPersistenceAdapter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
package clap.server.adapter.outbound.persistense.repository;
1+
package clap.server.adapter.outbound.persistense;
22

33
import clap.server.adapter.outbound.persistense.entity.task.LabelEntity;
4-
import clap.server.adapter.outbound.persistense.entity.task.TaskEntity;
54
import clap.server.adapter.outbound.persistense.mapper.LabelPersistenceMapper;
65
import clap.server.adapter.outbound.persistense.repository.task.LabelRepository;
76
import clap.server.application.port.outbound.task.LoadLabelPort;

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest;
55
import clap.server.adapter.inbound.web.dto.task.FilterTaskListResponse;
66
import clap.server.adapter.outbound.persistense.entity.task.TaskEntity;
7+
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
78
import clap.server.adapter.outbound.persistense.mapper.TaskPersistenceMapper;
89
import clap.server.adapter.outbound.persistense.repository.task.TaskRepository;
910
import clap.server.application.mapper.TaskMapper;
@@ -12,19 +13,22 @@
1213
import clap.server.common.annotation.architecture.PersistenceAdapter;
1314
import clap.server.domain.model.task.Task;
1415
import lombok.RequiredArgsConstructor;
16+
import lombok.extern.slf4j.Slf4j;
1517
import org.springframework.data.domain.Page;
1618
import org.springframework.data.domain.Pageable;
19+
import org.springframework.data.domain.Slice;
1720

1821
import java.time.LocalDateTime;
1922
import java.util.List;
2023
import java.util.Optional;
2124

22-
25+
@Slf4j
2326
@PersistenceAdapter
2427
@RequiredArgsConstructor
2528
public class TaskPersistenceAdapter implements CommandTaskPort , LoadTaskPort {
2629
private final TaskRepository taskRepository;
2730
private final TaskPersistenceMapper taskPersistenceMapper;
31+
2832
@Override
2933
public Task save(Task task) {
3034
TaskEntity taskEntity = taskPersistenceMapper.toEntity(task);
@@ -52,6 +56,13 @@ public Page<FilterPendingApprovalResponse> findPendingApprovalTasks(Pageable pag
5256
return taskList.map(TaskMapper::toFilterPendingApprovalTasksResponse);
5357
}
5458

59+
@Override
60+
public Slice<Task> findByProcessorAndStatus(Long processorId, List<TaskStatus> statuses, LocalDateTime untilDate, Pageable pageable) {
61+
log.info("untildate {}", untilDate);
62+
Slice<TaskEntity> tasks = taskRepository.findTasksWithTaskStatusAndCompletedAt(processorId, statuses, untilDate, pageable);
63+
return tasks.map(taskPersistenceMapper::toDomain);
64+
}
65+
5566
@Override
5667
public List<Task> findYesterdayTaskByDate(LocalDateTime now) {
5768
return taskRepository.findYesterdayTaskByUpdatedAtIsBetween(now.minusDays(1), now)

src/main/java/clap/server/adapter/outbound/persistense/entity/task/AttachmentEntity.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,7 @@ public class AttachmentEntity extends BaseTimeEntity {
3434
@OneToOne(fetch = FetchType.LAZY)
3535
@JoinColumn(name = "comment_id")
3636
private CommentEntity comment;
37+
38+
@Column(nullable = false)
39+
private boolean isDeleted;
3740
}

src/main/java/clap/server/adapter/outbound/persistense/entity/task/TaskEntity.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ public class TaskEntity extends BaseTimeEntity {
4242
@Enumerated(EnumType.STRING)
4343
private TaskStatus taskStatus;
4444

45-
@Column(nullable = false)
46-
private int processorOrder;
45+
@Column
46+
private Long processorOrder;
4747

4848
@ManyToOne(fetch = FetchType.LAZY)
4949
@JoinColumn(name = "reviewer_id")
@@ -62,4 +62,7 @@ public class TaskEntity extends BaseTimeEntity {
6262

6363
@Column
6464
private LocalDateTime completedAt;
65+
66+
@Column
67+
private LocalDateTime finishedAt;
6568
}

0 commit comments

Comments
 (0)