Skip to content

Commit 99fabb7

Browse files
authored
Merge pull request #22 from Pinit-Scheduler/refactor/TaskType을-ScheduleType으로-변경
Refactor/task type을 schedule type으로 변경
2 parents f221f6a + 7cbb0f5 commit 99fabb7

37 files changed

Lines changed: 608 additions & 198 deletions

src/main/java/me/gg/pinit/pinittask/application/schedule/dto/ScheduleDependencyAdjustCommand.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import lombok.Getter;
44
import me.gg.pinit.pinittask.domain.dependency.model.Dependency;
55
import me.gg.pinit.pinittask.domain.schedule.model.Schedule;
6+
import me.gg.pinit.pinittask.domain.schedule.model.ScheduleType;
67
import me.gg.pinit.pinittask.domain.schedule.patch.SchedulePatch;
78
import me.gg.pinit.pinittask.domain.task.model.Task;
8-
import me.gg.pinit.pinittask.domain.task.model.TaskType;
99
import me.gg.pinit.pinittask.domain.task.patch.TaskPatch;
1010
import me.gg.pinit.pinittask.domain.task.vo.ImportanceConstraint;
1111
import me.gg.pinit.pinittask.domain.task.vo.TemporalConstraint;
@@ -31,13 +31,13 @@ public class ScheduleDependencyAdjustCommand {
3131
@Getter
3232
private final Integer difficulty;
3333
@Getter
34-
private final TaskType taskType;
34+
private final ScheduleType scheduleType;
3535
@Getter
3636
private final ZonedDateTime date;
3737
private final List<DependencyDto> removeDependencies;
3838
private final List<DependencyDto> addDependencies;
3939

40-
public ScheduleDependencyAdjustCommand(Long scheduleId, Long ownerId, Long taskId, String title, String description, ZonedDateTime deadline, Integer importance, Integer difficulty, TaskType taskType, ZonedDateTime date, List<DependencyDto> removeDependencies, List<DependencyDto> addDependencies) {
40+
public ScheduleDependencyAdjustCommand(Long scheduleId, Long ownerId, Long taskId, String title, String description, ZonedDateTime deadline, Integer importance, Integer difficulty, ScheduleType scheduleType, ZonedDateTime date, List<DependencyDto> removeDependencies, List<DependencyDto> addDependencies) {
4141
this.scheduleId = scheduleId;
4242
this.ownerId = ownerId;
4343
this.taskId = taskId;
@@ -46,7 +46,7 @@ public ScheduleDependencyAdjustCommand(Long scheduleId, Long ownerId, Long taskI
4646
this.deadline = deadline;
4747
this.importance = importance;
4848
this.difficulty = difficulty;
49-
this.taskType = taskType;
49+
this.scheduleType = scheduleType;
5050
this.date = date;
5151
this.removeDependencies = removeDependencies;
5252
this.addDependencies = addDependencies;
@@ -69,7 +69,7 @@ public Task buildTask() {
6969
ownerId,
7070
title,
7171
description,
72-
new TemporalConstraint(deadline, Duration.ZERO, taskType),
72+
new TemporalConstraint(deadline, Duration.ZERO),
7373
new ImportanceConstraint(importance, difficulty)
7474
);
7575
}
@@ -80,15 +80,17 @@ public Schedule buildSchedule(Long taskId) {
8080
taskId,
8181
title,
8282
description,
83-
date
83+
date,
84+
scheduleType
8485
);
8586
}
8687

8788
public SchedulePatch getSchedulePatch() {
8889
return new SchedulePatch()
8990
.setTitle(title)
9091
.setDescription(description)
91-
.setDesignatedStartTime(date);
92+
.setDesignatedStartTime(date)
93+
.setScheduleType(scheduleType);
9294
}
9395

9496
public TaskPatch getTaskPatch() {
@@ -97,8 +99,7 @@ public TaskPatch getTaskPatch() {
9799
.setDescription(description)
98100
.setDueDate(deadline)
99101
.setImportance(importance)
100-
.setDifficulty(difficulty)
101-
.setTaskType(taskType);
102+
.setDifficulty(difficulty);
102103
}
103104

104105
public List<Dependency> getRemoveDependencies() {

src/main/java/me/gg/pinit/pinittask/application/statistics/event/handler/ScheduleCanceledEventHandler.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22

33
import me.gg.pinit.pinittask.application.schedule.service.ScheduleService;
44
import me.gg.pinit.pinittask.application.statistics.service.StatisticsService;
5-
import me.gg.pinit.pinittask.application.task.service.TaskService;
65
import me.gg.pinit.pinittask.domain.schedule.event.ScheduleCanceledEvent;
76
import me.gg.pinit.pinittask.domain.schedule.model.CompletedState;
87
import me.gg.pinit.pinittask.domain.schedule.model.Schedule;
9-
import me.gg.pinit.pinittask.domain.task.model.Task;
108
import org.springframework.scheduling.annotation.Async;
119
import org.springframework.stereotype.Component;
1210
import org.springframework.transaction.event.TransactionPhase;
@@ -16,25 +14,19 @@
1614
public class ScheduleCanceledEventHandler {
1715
private final StatisticsService statisticsService;
1816
private final ScheduleService scheduleService;
19-
private final TaskService taskService;
2017

21-
public ScheduleCanceledEventHandler(StatisticsService statisticsService, ScheduleService scheduleService, TaskService taskService) {
18+
public ScheduleCanceledEventHandler(StatisticsService statisticsService, ScheduleService scheduleService) {
2219
this.statisticsService = statisticsService;
2320
this.scheduleService = scheduleService;
24-
this.taskService = taskService;
2521
}
2622
@Async
2723
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
2824
public void on(ScheduleCanceledEvent event) {
2925
if (!event.getBeforeState().equals(CompletedState.COMPLETED)) return;
3026
Schedule schedule = scheduleService.getSchedule(event.getOwnerId(), event.getScheduleId());
31-
if (schedule.getTaskId() == null) {
32-
return;
33-
}
34-
Task task = taskService.getTask(event.getOwnerId(), schedule.getTaskId());
3527
statisticsService.removeElapsedTime(
3628
event.getOwnerId(),
37-
task.getTemporalConstraint().getTaskType(),
29+
schedule.getScheduleType(),
3830
schedule.getHistory().getElapsedTime(),
3931
schedule.getDesignatedStartTime()
4032
);

src/main/java/me/gg/pinit/pinittask/application/statistics/event/handler/ScheduleCompletedEventHandler.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
import me.gg.pinit.pinittask.application.schedule.service.ScheduleService;
44
import me.gg.pinit.pinittask.application.statistics.service.StatisticsService;
5-
import me.gg.pinit.pinittask.application.task.service.TaskService;
65
import me.gg.pinit.pinittask.domain.schedule.event.ScheduleCompletedEvent;
76
import me.gg.pinit.pinittask.domain.schedule.model.Schedule;
8-
import me.gg.pinit.pinittask.domain.task.model.Task;
97
import org.springframework.scheduling.annotation.Async;
108
import org.springframework.stereotype.Component;
119
import org.springframework.transaction.event.TransactionPhase;
@@ -15,25 +13,19 @@
1513
public class ScheduleCompletedEventHandler {
1614
private final StatisticsService statisticsService;
1715
private final ScheduleService scheduleService;
18-
private final TaskService taskService;
1916

20-
public ScheduleCompletedEventHandler(StatisticsService statisticsService, ScheduleService scheduleService, TaskService taskService) {
17+
public ScheduleCompletedEventHandler(StatisticsService statisticsService, ScheduleService scheduleService) {
2118
this.statisticsService = statisticsService;
2219
this.scheduleService = scheduleService;
23-
this.taskService = taskService;
2420
}
2521

2622
@Async
2723
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
2824
public void on(ScheduleCompletedEvent event) {
2925
Schedule schedule = scheduleService.getSchedule(event.getOwnerId(), event.getScheduleId());
30-
if (schedule.getTaskId() == null) {
31-
return;
32-
}
33-
Task task = taskService.getTask(event.getOwnerId(), schedule.getTaskId());
3426
statisticsService.addElapsedTime(
3527
event.getOwnerId(),
36-
task.getTemporalConstraint().getTaskType(),
28+
schedule.getScheduleType(),
3729
schedule.getHistory().getElapsedTime(),
3830
schedule.getDesignatedStartTime()
3931
);

src/main/java/me/gg/pinit/pinittask/application/statistics/service/StatisticsService.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import lombok.extern.slf4j.Slf4j;
44
import me.gg.pinit.pinittask.application.datetime.DateTimeUtils;
55
import me.gg.pinit.pinittask.application.member.service.MemberService;
6+
import me.gg.pinit.pinittask.domain.schedule.model.ScheduleType;
67
import me.gg.pinit.pinittask.domain.statistics.model.Statistics;
78
import me.gg.pinit.pinittask.domain.statistics.repository.StatisticsRepository;
8-
import me.gg.pinit.pinittask.domain.task.model.TaskType;
99
import org.springframework.stereotype.Service;
1010
import org.springframework.transaction.annotation.Transactional;
1111

@@ -36,22 +36,22 @@ public Statistics getStatistics(Long memberId, ZonedDateTime now) {
3636
}
3737

3838
@Transactional
39-
public void removeElapsedTime(Long ownerId, TaskType taskType, Duration duration, ZonedDateTime startTime) {
39+
public void removeElapsedTime(Long ownerId, ScheduleType scheduleType, Duration duration, ZonedDateTime startTime) {
4040
ZoneOffset zoneOffsetOfMember = memberService.findZoneOffsetOfMember(ownerId);
4141
ZonedDateTime dateTime = dateTimeUtils.lastMondayStart(startTime, zoneOffsetOfMember);
4242
Statistics statistics = statisticsRepository.findByMemberIdAndStartOfWeekDate(ownerId, dateTime.toLocalDate(), dateTime.getZone().getId())
4343
.orElseGet(() -> new Statistics(ownerId, dateTime));
44-
taskType.rollback(statistics, duration);
44+
scheduleType.rollback(statistics, duration);
4545
statisticsRepository.save(statistics);
4646
}
4747

4848
@Transactional
49-
public void addElapsedTime(Long ownerId, TaskType taskType, Duration duration, ZonedDateTime startTime) {
49+
public void addElapsedTime(Long ownerId, ScheduleType scheduleType, Duration duration, ZonedDateTime startTime) {
5050
ZoneOffset zoneOffsetOfMember = memberService.findZoneOffsetOfMember(ownerId);
5151
ZonedDateTime dateTime = dateTimeUtils.lastMondayStart(startTime, zoneOffsetOfMember);
5252
Statistics statistics = statisticsRepository.findByMemberIdAndStartOfWeekDate(ownerId, dateTime.toLocalDate(), dateTime.getZone().getId())
5353
.orElseGet(() -> new Statistics(ownerId, dateTime));
54-
taskType.record(statistics, duration);
54+
scheduleType.record(statistics, duration);
5555
statisticsRepository.save(statistics);
5656
}
5757
}

src/main/java/me/gg/pinit/pinittask/application/task/dto/TaskDependencyAdjustCommand.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import me.gg.pinit.pinittask.application.schedule.dto.DependencyDto;
55
import me.gg.pinit.pinittask.domain.dependency.model.Dependency;
66
import me.gg.pinit.pinittask.domain.task.model.Task;
7-
import me.gg.pinit.pinittask.domain.task.model.TaskType;
87
import me.gg.pinit.pinittask.domain.task.patch.TaskPatch;
98
import me.gg.pinit.pinittask.domain.task.vo.ImportanceConstraint;
109
import me.gg.pinit.pinittask.domain.task.vo.TemporalConstraint;
@@ -28,20 +27,17 @@ public class TaskDependencyAdjustCommand {
2827
private final Integer importance;
2928
@Getter
3029
private final Integer difficulty;
31-
@Getter
32-
private final TaskType taskType;
3330
private final List<DependencyDto> removeDependencies;
3431
private final List<DependencyDto> addDependencies;
3532

36-
public TaskDependencyAdjustCommand(Long taskId, Long ownerId, String title, String description, ZonedDateTime dueDate, Integer importance, Integer difficulty, TaskType taskType, List<DependencyDto> removeDependencies, List<DependencyDto> addDependencies) {
33+
public TaskDependencyAdjustCommand(Long taskId, Long ownerId, String title, String description, ZonedDateTime dueDate, Integer importance, Integer difficulty, List<DependencyDto> removeDependencies, List<DependencyDto> addDependencies) {
3734
this.taskId = taskId;
3835
this.ownerId = ownerId;
3936
this.title = title;
4037
this.description = description;
4138
this.dueDate = dueDate;
4239
this.importance = importance;
4340
this.difficulty = difficulty;
44-
this.taskType = taskType;
4541
this.removeDependencies = removeDependencies;
4642
this.addDependencies = addDependencies;
4743
}
@@ -55,7 +51,7 @@ public Task buildTask() {
5551
ownerId,
5652
title,
5753
description,
58-
new TemporalConstraint(dueDate, Duration.ZERO, taskType),
54+
new TemporalConstraint(dueDate, Duration.ZERO),
5955
new ImportanceConstraint(importance, difficulty)
6056
);
6157
}
@@ -66,8 +62,7 @@ public TaskPatch getTaskPatch() {
6662
.setDescription(description)
6763
.setDueDate(dueDate)
6864
.setImportance(importance)
69-
.setDifficulty(difficulty)
70-
.setTaskType(taskType);
65+
.setDifficulty(difficulty);
7166
}
7267

7368
public List<Dependency> getRemoveDependencies() {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package me.gg.pinit.pinittask.domain.schedule.model;
2+
3+
import me.gg.pinit.pinittask.domain.statistics.model.Statistics;
4+
5+
import java.time.Duration;
6+
7+
/**
8+
* Statistics recorder for each schedule type.
9+
* Implementations update aggregated statistics when a schedule finishes or is rolled back.
10+
*/
11+
public interface Recorder {
12+
void record(Statistics statistics, Duration duration);
13+
14+
void rollback(Statistics statistics, Duration duration);
15+
}

src/main/java/me/gg/pinit/pinittask/domain/schedule/model/Schedule.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ public class Schedule {
4747
@Getter
4848
private String description;
4949

50+
@Getter
51+
@Enumerated(EnumType.STRING)
52+
@Column(name = "schedule_type", nullable = false)
53+
private ScheduleType scheduleType;
54+
5055
@Column(name = "designated_start_time_utc", columnDefinition = "DATETIME(6)", nullable = false)
5156
@Convert(converter = InstantToDatetime6UtcConverter.class)
5257
private Instant designatedStartTime;
@@ -69,11 +74,12 @@ public class Schedule {
6974
protected Schedule() {
7075
}
7176

72-
public Schedule(Long ownerId, Long taskId, String title, String description, ZonedDateTime designatedStartTime) {
77+
public Schedule(Long ownerId, Long taskId, String title, String description, ZonedDateTime designatedStartTime, ScheduleType scheduleType) {
7378
this.ownerId = ownerId;
7479
this.taskId = taskId;
7580
setTitle(title);
7681
setDescription(description);
82+
setScheduleType(scheduleType);
7783
setDesignatedStartTime(designatedStartTime);
7884
this.history = ScheduleHistory.zero();
7985
this.state = new NotStartedState();
@@ -120,6 +126,7 @@ public void patch(SchedulePatch patch) {
120126
patch.title().ifPresent(this::setTitle);
121127
patch.description().ifPresent(this::setDescription);
122128
patch.designatedStartTime().ifPresent(this::setDesignatedStartTime);
129+
patch.scheduleType().ifPresent(this::setScheduleType);
123130
}
124131

125132
public void deleteSchedule() {
@@ -149,6 +156,13 @@ public void setDescription(String description) {
149156
this.description = description;
150157
}
151158

159+
public void setScheduleType(ScheduleType scheduleType) {
160+
if (scheduleType == null) {
161+
throw new IllegalArgumentException("일정 유형은 null일 수 없습니다.");
162+
}
163+
this.scheduleType = scheduleType;
164+
}
165+
152166
public String getState() {
153167
return this.state.toString();
154168
}

src/main/java/me/gg/pinit/pinittask/domain/task/model/TaskType.java renamed to src/main/java/me/gg/pinit/pinittask/domain/schedule/model/ScheduleType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package me.gg.pinit.pinittask.domain.task.model;
1+
package me.gg.pinit.pinittask.domain.schedule.model;
22

33
import me.gg.pinit.pinittask.domain.statistics.model.Statistics;
44

55
import java.time.Duration;
66

7-
public enum TaskType implements Recorder {
7+
public enum ScheduleType implements Recorder {
88
DEEP_WORK {
99
@Override
1010
public void record(Statistics statistics, Duration duration) {

src/main/java/me/gg/pinit/pinittask/domain/schedule/patch/SchedulePatch.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package me.gg.pinit.pinittask.domain.schedule.patch;
22

3+
import me.gg.pinit.pinittask.domain.schedule.model.ScheduleType;
4+
35
import java.time.ZonedDateTime;
46
import java.util.Optional;
57

68
public final class SchedulePatch {
79
private String title;
810
private String description;
911
private ZonedDateTime designatedStartTime;
12+
private ScheduleType scheduleType;
1013

1114
public SchedulePatch setTitle(String v) {
1215
this.title = v;
@@ -23,6 +26,11 @@ public SchedulePatch setDesignatedStartTime(ZonedDateTime v) {
2326
return this;
2427
}
2528

29+
public SchedulePatch setScheduleType(ScheduleType v) {
30+
this.scheduleType = v;
31+
return this;
32+
}
33+
2634
public Optional<String> title() {
2735
return Optional.ofNullable(title);
2836
}
@@ -35,8 +43,11 @@ public Optional<ZonedDateTime> designatedStartTime() {
3543
return Optional.ofNullable(designatedStartTime);
3644
}
3745

46+
public Optional<ScheduleType> scheduleType() {
47+
return Optional.ofNullable(scheduleType);
48+
}
49+
3850
public boolean isEmpty() {
39-
return title == null && description == null && designatedStartTime == null;
51+
return title == null && description == null && designatedStartTime == null && scheduleType == null;
4052
}
4153
}
42-

src/main/java/me/gg/pinit/pinittask/domain/task/model/Recorder.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)