Skip to content

Commit 0078793

Browse files
authored
Merge pull request #70 from What-s-Your-Plan/feat/#56
Refactor: Schedule 도메인의 반복 일정과 관련된 필드값을 Embedded로 분리
2 parents fea1590 + b705c1b commit 0078793

File tree

80 files changed

+11993
-439
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+11993
-439
lines changed

application/wypl-core/src/main/java/com/wypl/wyplcore/calendar/service/CalendarService.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import com.wypl.googleoauthclient.domain.AuthMember;
1111
import com.wypl.jpacalendardomain.calendar.domain.Calendar;
1212
import com.wypl.jpacalendardomain.calendar.domain.MemberCalendar;
13-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
14-
import com.wypl.jpacalendardomain.calendar.repository.ScheduleRepository;
13+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
14+
import com.wypl.jpacalendardomain.schedule.reopository.ScheduleRepository;
1515
import com.wypl.jpamemberdomain.member.domain.Member;
1616
import com.wypl.wyplcore.calendar.data.DateSearchCondition;
1717
import com.wypl.wyplcore.calendar.data.request.CalendarFindRequest;

application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewDetailResponse.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.util.Map;
55

66
import com.fasterxml.jackson.annotation.JsonProperty;
7-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
7+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
88
import com.wypl.jpamongoreviewdomain.review.domain.Review;
99
import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent;
1010

application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import org.springframework.stereotype.Service;
1111
import org.springframework.transaction.annotation.Transactional;
1212

13-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
13+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
1414
import com.wypl.jpamemberdomain.member.domain.Member;
1515
import com.wypl.jpamongoreviewdomain.review.domain.Review;
1616
import com.wypl.jpamongoreviewdomain.review.repository.ReviewRepository;

application/wypl-core/src/main/java/com/wypl/wyplcore/schedule/data/request/ScheduleCreateRequest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import java.time.LocalDateTime;
55

66
import com.fasterxml.jackson.annotation.JsonProperty;
7-
import com.wypl.jpacalendardomain.calendar.data.ConvertibleSchedule;
8-
import com.wypl.jpacalendardomain.calendar.data.RepetitionCycle;
7+
import com.wypl.jpacalendardomain.schedule.data.ConvertibleSchedule;
8+
import com.wypl.jpacalendardomain.schedule.domain.embedded.RepetitionCycle;
99

1010
import lombok.Builder;
1111

application/wypl-core/src/main/java/com/wypl/wyplcore/schedule/data/response/ScheduleFindResponse.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.time.LocalDateTime;
55

66
import com.fasterxml.jackson.annotation.JsonProperty;
7-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
7+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
88

99
public record ScheduleFindResponse(
1010

application/wypl-core/src/main/java/com/wypl/wyplcore/schedule/service/ScheduleService.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55

66
import com.wypl.googleoauthclient.domain.AuthMember;
77
import com.wypl.jpacalendardomain.calendar.domain.Calendar;
8-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
9-
import com.wypl.jpacalendardomain.calendar.domain.ScheduleInfo;
10-
import com.wypl.jpacalendardomain.calendar.mapper.ScheduleInfoMapper;
11-
import com.wypl.jpacalendardomain.calendar.mapper.ScheduleMapper;
12-
import com.wypl.jpacalendardomain.calendar.repository.ScheduleInfoRepository;
13-
import com.wypl.jpacalendardomain.calendar.repository.ScheduleRepository;
8+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
9+
import com.wypl.jpacalendardomain.schedule.domain.ScheduleInfo;
10+
import com.wypl.jpacalendardomain.schedule.mapper.ScheduleInfoMapper;
11+
import com.wypl.jpacalendardomain.schedule.mapper.ScheduleMapper;
12+
import com.wypl.jpacalendardomain.schedule.reopository.ScheduleInfoRepository;
13+
import com.wypl.jpacalendardomain.schedule.reopository.ScheduleRepository;
1414
import com.wypl.jpamemberdomain.member.domain.Member;
1515
import com.wypl.wyplcore.schedule.data.request.ScheduleCreateRequest;
1616
import com.wypl.wyplcore.schedule.data.response.ScheduleInfoCreateResponse;

application/wypl-core/src/main/java/com/wypl/wyplcore/schedule/service/repetition/RepetitionService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.time.LocalDate;
44
import java.util.List;
55

6-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
6+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
77
import com.wypl.wyplcore.schedule.data.response.ScheduleFindResponse;
88
import com.wypl.wyplcore.schedule.service.repetition.strategy.RepetitionStrategy;
99

application/wypl-core/src/main/java/com/wypl/wyplcore/schedule/service/repetition/RepetitionStrategyFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.HashMap;
44
import java.util.Map;
55

6-
import com.wypl.jpacalendardomain.calendar.data.RepetitionCycle;
6+
import com.wypl.jpacalendardomain.schedule.domain.embedded.RepetitionCycle;
77
import com.wypl.wyplcore.schedule.service.repetition.strategy.DayRepetitionStrategy;
88
import com.wypl.wyplcore.schedule.service.repetition.strategy.MonthRepetitionStrategy;
99
import com.wypl.wyplcore.schedule.service.repetition.strategy.RepetitionStrategy;

application/wypl-core/src/main/java/com/wypl/wyplcore/schedule/service/repetition/strategy/DayRepetitionStrategy.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.util.List;
88
import java.util.stream.Collectors;
99

10-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
10+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
1111
import com.wypl.wyplcore.schedule.data.response.ScheduleFindResponse;
1212

1313
public class DayRepetitionStrategy implements RepetitionStrategy {
@@ -28,9 +28,9 @@ public List<ScheduleFindResponse> getScheduleResponses(Schedule schedule, LocalD
2828

2929
return searchStartDate.datesUntil(searchEndDate.plusDays(1)).map(
3030
date -> {
31-
LocalDateTime startDateTime = LocalDateTime.of(date, schedule.getStartDateTime().toLocalTime());
32-
LocalDateTime endDateTime = LocalDateTime.of(date, schedule.getEndDateTime().toLocalTime());
33-
return ScheduleFindResponse.of(schedule, startDateTime, endDateTime);
34-
}).collect(Collectors.toList());
31+
LocalDateTime startDateTime = LocalDateTime.of(date, schedule.getStartDateTime().toLocalTime());
32+
LocalDateTime endDateTime = LocalDateTime.of(date, schedule.getEndDateTime().toLocalTime());
33+
return ScheduleFindResponse.of(schedule, startDateTime, endDateTime);
34+
}).collect(Collectors.toList());
3535
}
3636
}

application/wypl-core/src/main/java/com/wypl/wyplcore/schedule/service/repetition/strategy/MonthRepetitionStrategy.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import java.time.Period;
99
import java.util.List;
1010

11-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
11+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
1212
import com.wypl.wyplcore.schedule.data.response.ScheduleFindResponse;
1313

1414
public class MonthRepetitionStrategy implements RepetitionStrategy {
@@ -24,7 +24,7 @@ public class MonthRepetitionStrategy implements RepetitionStrategy {
2424
public List<ScheduleFindResponse> getScheduleResponses(Schedule schedule, LocalDate searchStartDate,
2525
LocalDate searchEndDate) {
2626

27-
searchStartDate = getMaxDate(searchStartDate, schedule.getRepetitionStartDate());
27+
searchStartDate = getMaxDate(searchStartDate, schedule.getRepetitionStartDate());
2828
searchEndDate = getMinDate(searchEndDate, schedule.getRepetitionEndDate());
2929
LocalDate startDate = getFirstScheduleStartDate(schedule, searchStartDate);
3030

@@ -44,9 +44,11 @@ public List<ScheduleFindResponse> getScheduleResponses(Schedule schedule, LocalD
4444
*/
4545
private LocalDate getFirstScheduleStartDate(Schedule schedule, LocalDate searchStartDate) {
4646

47-
LocalDate firstScheduleEndDate = findNextOrSameByDayOfMonth(searchStartDate, schedule.getEndDateTime().getDayOfMonth());
47+
LocalDate firstScheduleEndDate = findNextOrSameByDayOfMonth(searchStartDate,
48+
schedule.getEndDateTime().getDayOfMonth());
4849

49-
LocalDateTime firstScheduleEndDateTime = LocalDateTime.of(firstScheduleEndDate, schedule.getEndDateTime().toLocalTime());
50+
LocalDateTime firstScheduleEndDateTime = LocalDateTime.of(firstScheduleEndDate,
51+
schedule.getEndDateTime().toLocalTime());
5052

5153
return firstScheduleEndDateTime.minus(schedule.getDuration()).toLocalDate();
5254

application/wypl-core/src/main/java/com/wypl/wyplcore/schedule/service/repetition/strategy/RepetitionStrategy.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.time.LocalDate;
44
import java.util.List;
55

6-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
6+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
77
import com.wypl.wyplcore.schedule.data.response.ScheduleFindResponse;
88

99
public interface RepetitionStrategy {

application/wypl-core/src/main/java/com/wypl/wyplcore/schedule/service/repetition/strategy/WeekRepetitionStrategy.java

+16-14
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,17 @@
1111
import java.util.Comparator;
1212
import java.util.List;
1313

14-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
14+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
1515
import com.wypl.wyplcore.schedule.data.response.ScheduleFindResponse;
1616

1717
public class WeekRepetitionStrategy implements RepetitionStrategy {
1818

1919
/**
2020
* RepetitionCycle = Week 인 경우, Schedule 반복 일정을 조회한다.
21-
* @param schedule Target Schedule
21+
*
22+
* @param schedule Target Schedule
2223
* @param searchStartDate 검색 시작일자
23-
* @param searchEndDate 검색 종료일자
24+
* @param searchEndDate 검색 종료일자
2425
* @return {List<ScheduleFindResponse>}
2526
*/
2627
@Override
@@ -33,8 +34,8 @@ public List<ScheduleFindResponse> getScheduleResponses(Schedule schedule, LocalD
3334
List<ScheduleFindResponse> responses = new ArrayList<>();
3435

3536
if (!schedule.existsDayOfWeek()) { // 반복 요일을 설정하지 않았을 경우
36-
37-
LocalDate firstScheduleStartDate = getFirstScheduleStartDate(searchStartDate, schedule); // 검색 조건에 부합하는 첫 번째 일정의 시작일
37+
LocalDate firstScheduleStartDate = getFirstScheduleStartDate(searchStartDate,
38+
schedule); // 검색 조건에 부합하는 첫 번째 일정의 시작일
3839

3940
for (LocalDate date = firstScheduleStartDate; date.isBefore(searchEndDate); date = date.plusWeeks(
4041
schedule.getWeekInterval())) {
@@ -43,16 +44,14 @@ public List<ScheduleFindResponse> getScheduleResponses(Schedule schedule, LocalD
4344
responses.add(ScheduleFindResponse.of(schedule, startDateTime, endDateTime));
4445
}
4546
return responses;
46-
4747
} else { // 반복 요일을 설정했을 경우
48-
4948
int repetitionDayOfWeek = schedule.getDayOfWeek();
5049

5150
for (int dayOfWeek = 1; dayOfWeek <= 7; dayOfWeek++) { // 요일마다 처리
5251
if (isSelectedDayOfWeek(repetitionDayOfWeek, dayOfWeek)) {
5352
LocalDate nearestDate = findNextOrSameByDayOfWeek(searchStartDate, DayOfWeek.of(dayOfWeek));
54-
for (LocalDate date = nearestDate; date.isBefore(searchEndDate.plusDays(1)); date = date.plusWeeks(schedule.getWeekInterval())) {
55-
53+
for (LocalDate date = nearestDate; date.isBefore(searchEndDate.plusDays(1)); date =
54+
date.plusWeeks(schedule.getWeekInterval())) {
5655
responses.add(ScheduleFindResponse.of(schedule, date, date));
5756
}
5857
}
@@ -64,11 +63,12 @@ public List<ScheduleFindResponse> getScheduleResponses(Schedule schedule, LocalD
6463

6564
/**
6665
* searchStartDate 이후 주의 반복 주기를 고려한 첫 번째 일정의 시작일을 찾는다.
66+
*
6767
* @param searchStartDate 검색 시작 날짜
68-
* @param schedule 일정
68+
* @param schedule 일정
6969
* @return 검색된 첫 번째 일정의 시작일
7070
*/
71-
private LocalDate getFirstScheduleStartDate(LocalDate searchStartDate, Schedule schedule){
71+
private LocalDate getFirstScheduleStartDate(LocalDate searchStartDate, Schedule schedule) {
7272

7373
LocalDate scheduleStartDate = schedule.getStartDateTime().toLocalDate();
7474
LocalDate unadjustedStartDate = findNearestStartDate(searchStartDate, schedule); // WeekInterval 반영되지 않은 상태
@@ -89,8 +89,9 @@ private LocalDate getFirstScheduleStartDate(LocalDate searchStartDate, Schedule
8989

9090
/**
9191
* 검색시작일자(searchStartDate)에 부합하는 가장 가까운 일정시작요일(dayOfWeek of startDateTime of schedule)을 검색한다.
92+
*
9293
* @param searchStartDate 검색시작일자
93-
* @param schedule 일정
94+
* @param schedule 일정
9495
* @return LocalDateTime 검색 조건과 일정의 시작 및 끝나는 요일에 부합하는 가장 가까운 시작일시
9596
*/
9697
private LocalDate findNearestStartDate(LocalDate searchStartDate, Schedule schedule) {
@@ -105,11 +106,12 @@ private LocalDate findNearestStartDate(LocalDate searchStartDate, Schedule sched
105106

106107
/**
107108
* dayOfWeek 가 repetitionDayOfWeek에 포함됐는지 확인한다.
109+
*
108110
* @param repetitionDayOfWeek 일정의 반복 요일을 비트마스킹한 값
109-
* @param dayOfWeek from 1 to 7 (1: 월요일, 2: 화요일, 3: 수요일, 4: 목요일, 5: 금요일, 6: 토요일, 7: 일요일)
111+
* @param dayOfWeek from 1 to 7 (1: 월요일, 2: 화요일, 3: 수요일, 4: 목요일, 5: 금요일, 6: 토요일, 7: 일요일)
110112
* @return boolean
111113
*/
112114
private boolean isSelectedDayOfWeek(int repetitionDayOfWeek, int dayOfWeek) {
113115
return (repetitionDayOfWeek & (1 << dayOfWeek)) != 0;
114116
}
115-
}
117+
}

application/wypl-core/src/main/java/com/wypl/wyplcore/schedule/service/repetition/strategy/YearRepetitionStrategy.java

+15-13
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,26 @@
1111

1212
import org.springframework.stereotype.Service;
1313

14-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
14+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
1515
import com.wypl.wyplcore.schedule.data.response.ScheduleFindResponse;
1616

1717
@Service
1818
public class YearRepetitionStrategy implements RepetitionStrategy {
1919

20+
/**
21+
* searchStartDate 와 같거나 그 이후의 첫 번째 일정 시작일을 찾는다.
22+
* @param schedule 할일
23+
* @param searchStartDate 검색 시작 일자
24+
* @return LocalDateTime
25+
*/
26+
private static LocalDate getFirstScheduleStartDate(Schedule schedule, LocalDate searchStartDate) {
27+
LocalDate firstScheduleEndDate = findNextOrSame(searchStartDate, schedule.getEndDateTime().getMonth(),
28+
schedule.getEndDateTime().getDayOfMonth());
29+
LocalDateTime firstScheduleEndDateTime = LocalDateTime.of(firstScheduleEndDate,
30+
schedule.getEndDateTime().toLocalTime());
31+
return firstScheduleEndDateTime.minus(schedule.getDuration()).toLocalDate();
32+
}
33+
2034
/**
2135
* RepetitionCycle = Year 인 경우, Schedule 반복 일정을 조회한다.
2236
* @param schedule Target Schedule
@@ -45,16 +59,4 @@ public List<ScheduleFindResponse> getScheduleResponses(Schedule schedule, LocalD
4559
}
4660
).toList();
4761
}
48-
49-
/**
50-
* searchStartDate 와 같거나 그 이후의 첫 번째 일정 시작일을 찾는다.
51-
* @param schedule 할일
52-
* @param searchStartDate 검색 시작 일자
53-
* @return LocalDateTime
54-
*/
55-
private static LocalDate getFirstScheduleStartDate(Schedule schedule, LocalDate searchStartDate) {
56-
LocalDate firstScheduleEndDate = findNextOrSame(searchStartDate, schedule.getEndDateTime().getMonth(), schedule.getEndDateTime().getDayOfMonth());
57-
LocalDateTime firstScheduleEndDateTime = LocalDateTime.of(firstScheduleEndDate, schedule.getEndDateTime().toLocalTime());
58-
return firstScheduleEndDateTime.minus(schedule.getDuration()).toLocalDate();
59-
}
6062
}

application/wypl-core/src/test/java/com/wypl/wyplcore/ScheduleFixture.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import java.time.LocalDate;
44
import java.time.LocalDateTime;
55

6-
import com.wypl.jpacalendardomain.calendar.data.RepetitionCycle;
7-
import com.wypl.jpacalendardomain.calendar.domain.Schedule;
8-
import com.wypl.jpacalendardomain.calendar.domain.ScheduleInfo;
6+
import com.wypl.jpacalendardomain.schedule.domain.Schedule;
7+
import com.wypl.jpacalendardomain.schedule.domain.ScheduleInfo;
8+
import com.wypl.jpacalendardomain.schedule.domain.embedded.RepetitionCycle;
99

1010
public enum ScheduleFixture {
1111
DAILY_SCHEDULE(

application/wypl-core/src/test/java/com/wypl/wyplcore/ScheduleInfoFixture.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.wypl.wyplcore;
22

33
import com.wypl.jpacalendardomain.calendar.domain.Calendar;
4-
import com.wypl.jpacalendardomain.calendar.domain.ScheduleInfo;
4+
import com.wypl.jpacalendardomain.schedule.domain.ScheduleInfo;
55

66
import lombok.Getter;
77

application/wypl-core/src/test/java/com/wypl/wyplcore/auth/AuthMemberServiceImplTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
import com.wypl.googleoauthclient.data.response.GoogleTokenValidationResponse;
1919
import com.wypl.googleoauthclient.domain.AuthMember;
2020
import com.wypl.jpamemberdomain.member.OauthProvider;
21-
import com.wypl.jpamemberdomain.member.repository.SocialMemberRepository;
2221
import com.wypl.jpamemberdomain.member.domain.SocialMember;
2322
import com.wypl.jpamemberdomain.member.exception.MemberErrorCode;
2423
import com.wypl.jpamemberdomain.member.exception.MemberException;
24+
import com.wypl.jpamemberdomain.member.repository.SocialMemberRepository;
2525
import com.wypl.wyplcore.auth.service.AuthMemberServiceImpl;
2626

2727
@ExtendWith(MockitoExtension.class)

0 commit comments

Comments
 (0)