-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathTaskPersistenceAdapter.java
More file actions
128 lines (109 loc) · 6.2 KB
/
TaskPersistenceAdapter.java
File metadata and controls
128 lines (109 loc) · 6.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package clap.server.adapter.outbound.persistense;
import clap.server.adapter.inbound.web.dto.task.request.FilterTaskBoardRequest;
import clap.server.adapter.inbound.web.dto.task.request.FilterTaskListRequest;
import clap.server.adapter.inbound.web.dto.task.request.FilterTeamStatusRequest;
import clap.server.adapter.outbound.persistense.entity.task.TaskEntity;
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
import clap.server.adapter.outbound.persistense.mapper.TaskPersistenceMapper;
import clap.server.adapter.outbound.persistense.repository.task.TaskRepository;
import clap.server.application.port.outbound.task.CommandTaskPort;
import clap.server.application.port.outbound.task.LoadTaskPort;
import clap.server.common.annotation.architecture.PersistenceAdapter;
import clap.server.domain.model.task.Task;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Slf4j
@PersistenceAdapter
@RequiredArgsConstructor
public class TaskPersistenceAdapter implements CommandTaskPort, LoadTaskPort {
private final TaskRepository taskRepository;
private final TaskPersistenceMapper taskPersistenceMapper;
@Override
public Task save(final Task task) {
TaskEntity taskEntity = taskPersistenceMapper.toEntity(task);
TaskEntity savedTaskEntity = taskRepository.save(taskEntity);
return taskPersistenceMapper.toDomain(savedTaskEntity);
}
@Override
public Optional<Task> findById(final Long id) {
Optional<TaskEntity> taskEntity = taskRepository.findById(id);
return taskEntity.map(taskPersistenceMapper::toDomain);
}
@Override
public Page<Task> findTasksRequestedByUser(final Long requesterId, final Pageable pageable, final FilterTaskListRequest filterTaskListRequest) {
return taskRepository.findTasksRequestedByUser(requesterId, pageable, filterTaskListRequest)
.map(taskPersistenceMapper::toDomain);
}
@Override
public Page<Task> findTasksAssignedByManager(final Long processorId, final Pageable pageable, final FilterTaskListRequest filterTaskListRequest) {
return taskRepository.findTasksAssignedByManager(processorId, pageable, filterTaskListRequest)
.map(taskPersistenceMapper::toDomain);
}
@Override
public Page<Task> findPendingApprovalTasks(final Pageable pageable, final FilterTaskListRequest filterTaskListRequest) {
return taskRepository.findPendingApprovalTasks(pageable, filterTaskListRequest)
.map(taskPersistenceMapper::toDomain);
}
@Override
public Optional<Task> findByIdAndStatus(final Long id, final TaskStatus status) {
Optional<TaskEntity> taskEntity = taskRepository.findByTaskIdAndTaskStatus(id, status);
return taskEntity.map(taskPersistenceMapper::toDomain);
}
@Override
public List<Task> findYesterdayTaskByDate() {
LocalDateTime now = LocalDateTime.of(LocalDate.now(), LocalTime.of(0, 0, 0, 0));
return taskRepository.findYesterdayTaskByUpdatedAtIsBetween(now.minusDays(1), now)
.stream().map(taskPersistenceMapper::toDomain).toList();
}
@Override
public Page<Task> findAllTasks(final Pageable pageable, final FilterTaskListRequest filterTaskListRequest) {
return taskRepository.findAllTasks(pageable, filterTaskListRequest)
.map(taskPersistenceMapper::toDomain);
}
@Override
public Optional<Task> findPrevOrderTaskByProcessorOrderAndStatus(final Long processorId, final TaskStatus taskStatus, final Long processorOrder) {
Optional<TaskEntity> taskEntity = taskRepository.findTopByProcessor_MemberIdAndTaskStatusAndProcessorOrderLessThanOrderByProcessorOrderAsc(processorId, taskStatus, processorOrder);
return taskEntity.map(taskPersistenceMapper::toDomain);
}
@Override
public Optional<Task> findNextOrderTaskByProcessorOrderAndStatus(final Long processorId, final TaskStatus taskStatus, final Long processorOrder) {
Optional<TaskEntity> taskEntity = taskRepository.findTopByProcessor_MemberIdAndTaskStatusAndProcessorOrderAfterOrderByProcessorOrderAsc(processorId, taskStatus, processorOrder);
return taskEntity.map(taskPersistenceMapper::toDomain);
}
@Override
public Optional<Task> findPrevOrderTaskByTaskIdAndStatus(final Long processorId, final TaskStatus taskStatus, final Long taskId) {
Optional<TaskEntity> taskEntity = taskRepository.findTopByProcessor_MemberIdAndTaskStatusAndTaskIdLessThanOrderByTaskIdDesc(processorId, taskStatus, taskId);
return taskEntity.map(taskPersistenceMapper::toDomain);
}
@Override
public Optional<Task> findNextOrderTaskByTaskIdAndStatus(final Long processorId, final TaskStatus taskStatus, final Long taskId) {
Optional<TaskEntity> taskEntity = taskRepository.findTopByProcessor_MemberIdAndTaskStatusAndTaskIdGreaterThanOrderByTaskIdAsc(processorId, taskStatus, taskId);
return taskEntity.map(taskPersistenceMapper::toDomain);
}
@Override
public List<Task> findTaskBoardByFilter(final Long processorId, final List<TaskStatus> statuses, final LocalDateTime fromDate, final FilterTaskBoardRequest request) {
return taskRepository.findTasksByFilter(processorId, statuses, fromDate, request)
.stream()
.map(taskPersistenceMapper::toDomain).toList();
}
@Override
public List<Task> findTeamStatus(final Long memberId, final FilterTeamStatusRequest filter) {
return taskRepository.findTeamStatus(memberId, filter).stream()
.map(taskPersistenceMapper::toDomain).toList();
}
@Override
public List<Task> findTasksByMemberIdAndStatus(final Long memberId, final List<TaskStatus> taskStatuses) {
List<TaskEntity> taskEntities = taskRepository.findByProcessor_MemberIdAndTaskStatusIn(memberId, taskStatuses);
return taskEntities.stream()
.map(taskPersistenceMapper::toDomain)
.collect(Collectors.toList());
}
}