Skip to content

Commit 6409927

Browse files
authored
Merge pull request #189 from Team-HMH/fix/#188-find-previous-apps
fix - #188 κΈ°μ‘΄ μ±Œλ¦°μ§€ id κ°’ λΆˆλŸ¬μ˜€λŠ” λ©”μ†Œλ“œ μˆœμ„œ μˆ˜μ •
2 parents e2455a3 + 7aa4633 commit 6409927

File tree

5 files changed

+26
-7
lines changed

5 files changed

+26
-7
lines changed

β€Žsrc/main/java/sopt/org/hmh/domain/challenge/service/ChallengeFacade.javaβ€Ž

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,10 @@ public class ChallengeFacade {
2929
@Transactional
3030
public void startNewChallenge(NewChallengeOrder newChallengeOrder) {
3131
Challenge newChallenge = challengeService.addChallenge(newChallengeOrder.toChallengeEntity());
32-
userService.changeCurrentChallengeIdByUserId(newChallengeOrder.getUserId(), newChallenge.getId());
33-
3432
dailyChallengeService.addDailyChallenge(newChallenge);
3533

3634
this.addAppsByNewChallengeOrder(newChallengeOrder, newChallenge);
35+
userService.changeCurrentChallengeIdByUserId(newChallengeOrder.getUserId(), newChallenge.getId());
3736
}
3837

3938
private void addAppsByNewChallengeOrder(NewChallengeOrder newChallengeOrder, Challenge newChallenge) {

β€Žsrc/main/java/sopt/org/hmh/domain/dailychallenge/controller/DailyChallengeController.javaβ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public ResponseEntity<BaseResponse<ChallengeStatusesResponse>> orderAddHistoryDa
3434
return ResponseEntity
3535
.status(DailyChallengeSuccess.SEND_FINISHED_DAILY_CHALLENGE_SUCCESS.getHttpStatus())
3636
.body(BaseResponse.success(DailyChallengeSuccess.SEND_FINISHED_DAILY_CHALLENGE_SUCCESS,
37-
new ChallengeStatusesResponse(dailyChallengeFacade.addFinishedDailyChallengeHistory(userId, request, os))));
37+
new ChallengeStatusesResponse(dailyChallengeFacade.addFinishedDailyChallengeHistory(userId, request, os, timeZone))));
3838
}
3939

4040
@Override
@@ -47,6 +47,6 @@ public ResponseEntity<BaseResponse<ChallengeStatusesResponse>> orderChangeStatus
4747
return ResponseEntity
4848
.status(DailyChallengeSuccess.SEND_FINISHED_DAILY_CHALLENGE_SUCCESS.getHttpStatus())
4949
.body(BaseResponse.success(DailyChallengeSuccess.SEND_FINISHED_DAILY_CHALLENGE_SUCCESS,
50-
new ChallengeStatusesResponse(dailyChallengeFacade.changeDailyChallengeStatusByIsSuccess(userId, request))));
50+
new ChallengeStatusesResponse(dailyChallengeFacade.changeDailyChallengeStatusByIsSuccess(userId, request, timeZone))));
5151
}
5252
}

β€Žsrc/main/java/sopt/org/hmh/domain/dailychallenge/domain/exception/DailyChallengeError.javaβ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ public enum DailyChallengeError implements ErrorBase {
1010
DAILY_CHALLENGE_NOT_FOUND(HttpStatus.NOT_FOUND, "일별 μ±Œλ¦°μ§€λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
1111
DAILY_CHALLENGE_PERIOD_INDEX_NOT_FOUND(HttpStatus.NOT_FOUND, "ν•΄λ‹Ή 인덱슀의 일별 μ±Œλ¦°μ§€λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
1212
DAILY_CHALLENGE_ALREADY_PROCESSED(HttpStatus.BAD_REQUEST, "이미 처리된 일별 μ±Œλ¦°μ§€μž…λ‹ˆλ‹€."),
13-
DAILY_CHALLENGE_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "이미 μ‘΄μž¬ν•˜λŠ” 일별 μ±Œλ¦°μ§€μž…λ‹ˆλ‹€.");
13+
DAILY_CHALLENGE_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "이미 μ‘΄μž¬ν•˜λŠ” 일별 μ±Œλ¦°μ§€μž…λ‹ˆλ‹€."),
14+
PERIOD_INDEX_NOT_VALID(HttpStatus.BAD_REQUEST, "μ§€λ‚œ λ‚ μ˜ μ •λ³΄λ§Œ 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.");
1415

1516
private final HttpStatus status;
1617
private final String errorMessage;

β€Žsrc/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeFacade.javaβ€Ž

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package sopt.org.hmh.domain.dailychallenge.service;
22

3+
import java.time.LocalDate;
4+
import java.time.ZoneId;
35
import java.util.List;
46
import lombok.RequiredArgsConstructor;
57
import org.springframework.stereotype.Service;
@@ -23,10 +25,13 @@ public class DailyChallengeFacade {
2325
private final UserService userService;
2426

2527
@Transactional
26-
public List<Status> addFinishedDailyChallengeHistory(Long userId, FinishedDailyChallengeListRequest request, String os) {
28+
public List<Status> addFinishedDailyChallengeHistory(Long userId, FinishedDailyChallengeListRequest request, String os, String timeZone) {
2729
Challenge challenge = challengeService.findByIdOrElseThrow(userService.getCurrentChallengeIdByUserId(userId));
30+
Integer todayIndex = dailyChallengeService.calculateTodayIndex(challenge, LocalDate.now(ZoneId.of(timeZone)));
2831

2932
request.finishedDailyChallenges().forEach(challengeRequest -> {
33+
dailyChallengeService.validatePeriodIndex(challengeRequest.challengePeriodIndex(), todayIndex);
34+
3035
DailyChallenge dailyChallenge = dailyChallengeService
3136
.findDailyChallengeByChallengePeriodIndex(challenge, challengeRequest.challengePeriodIndex());
3237
dailyChallengeService.changeStatusByCurrentStatus(dailyChallenge);
@@ -37,10 +42,13 @@ public List<Status> addFinishedDailyChallengeHistory(Long userId, FinishedDailyC
3742
}
3843

3944
@Transactional
40-
public List<Status> changeDailyChallengeStatusByIsSuccess(Long userId, FinishedDailyChallengeStatusListRequest request) {
45+
public List<Status> changeDailyChallengeStatusByIsSuccess(Long userId, FinishedDailyChallengeStatusListRequest request, String timeZone) {
4146
Challenge challenge = challengeService.findByIdOrElseThrow(userService.getCurrentChallengeIdByUserId(userId));
47+
Integer todayIndex = dailyChallengeService.calculateTodayIndex(challenge, LocalDate.now(ZoneId.of(timeZone)));
4248

4349
request.finishedDailyChallenges().forEach(challengeRequest -> {
50+
dailyChallengeService.validatePeriodIndex(challengeRequest.challengePeriodIndex(), todayIndex);
51+
4452
DailyChallenge dailyChallenge = dailyChallengeService
4553
.findDailyChallengeByChallengePeriodIndex(challenge, challengeRequest.challengePeriodIndex());
4654
if (challengeRequest.isSuccess()) {

β€Žsrc/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeService.javaβ€Ž

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package sopt.org.hmh.domain.dailychallenge.service;
22

33
import java.time.LocalDate;
4+
import java.time.temporal.ChronoUnit;
45
import java.util.List;
56
import java.util.Optional;
67
import java.util.stream.IntStream;
@@ -73,6 +74,10 @@ private void validateDuplicateDailyChallenge(Challenge challenge) {
7374
}
7475
}
7576

77+
public void validatePeriodIndex(Integer periodIndex, Integer todayIndex) {
78+
if (periodIndex >= todayIndex) throw new DailyChallengeException(DailyChallengeError.PERIOD_INDEX_NOT_VALID);
79+
}
80+
7681
private List<DailyChallenge> createDailyChallengeByChallengePeriod(Challenge challenge) {
7782
LocalDate startDate = challenge.getStartDate();
7883
Long userId = challenge.getUserId();
@@ -106,4 +111,10 @@ private void changeChallengeDateOfDailyChallenges(List<DailyChallenge> dailyChal
106111
dailyChallenges.get(i).changeChallengeDate(challengeDate.plusDays(i));
107112
}
108113
}
114+
115+
public Integer calculateTodayIndex(Challenge challenge, LocalDate now) {
116+
final int COMPLETED_CHALLENGE_INDEX = -1;
117+
int daysBetween = (int) ChronoUnit.DAYS.between(challenge.getStartDate(), now);
118+
return (daysBetween >= challenge.getPeriod()) ? COMPLETED_CHALLENGE_INDEX : daysBetween;
119+
}
109120
}

0 commit comments

Comments
Β (0)