-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSchedules.java
More file actions
44 lines (34 loc) · 1.31 KB
/
Schedules.java
File metadata and controls
44 lines (34 loc) · 1.31 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
package org.terning.message.domain;
import org.terning.message.common.failure.MessageErrorCode;
import org.terning.message.common.failure.MessageException;
import org.terning.message.domain.vo.Schedule;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
public class Schedules {
private final List<Schedule> values;
private Schedules(List<Schedule> values) {
this.values = validate(values);
}
public static Schedules of(List<Schedule> values) {
return new Schedules(values);
}
public LocalDateTime nextScheduleDate(LocalDateTime now) {
return values.stream()
.map(schedule -> schedule.nextScheduleAfter(now))
.min(LocalDateTime::compareTo)
.orElseThrow(() -> new MessageException(MessageErrorCode.INVALID_SCHEDULE));
}
public boolean isTodaySchedule(LocalDateTime now) {
return values.stream().anyMatch(schedule -> schedule.matches(now));
}
public List<Schedule> getValues() {
return Collections.unmodifiableList(values);
}
private static List<Schedule> validate(List<Schedule> values) {
if (values == null || values.isEmpty()) {
throw new MessageException(MessageErrorCode.INVALID_EMPTY_SCHEDULE_LIST);
}
return values;
}
}