diff --git a/src/main/java/com/example/hackathon/domain/mission/dto/response/MissionTodayResponse.java b/src/main/java/com/example/hackathon/domain/mission/dto/response/MissionTodayResponse.java index 19f5293..ee5725b 100644 --- a/src/main/java/com/example/hackathon/domain/mission/dto/response/MissionTodayResponse.java +++ b/src/main/java/com/example/hackathon/domain/mission/dto/response/MissionTodayResponse.java @@ -19,12 +19,8 @@ public record MissionTodayResponse( LocalDateTime deadlineAt, Boolean popupRequired ) { - public static MissionTodayResponse from(UserMissionLog log) { - java.time.LocalDateTime now = java.time.LocalDateTime.now(java.time.ZoneId.of("Asia/Seoul")); - boolean popupRequired = !now.isBefore(log.getAssignedAt()) - && now.isBefore(log.getDeadlineAt()) - && (log.getStatus() == com.example.hackathon.domain.mission.entity.MissionStatus.ASSIGNED - || log.getStatus() == com.example.hackathon.domain.mission.entity.MissionStatus.CONFIRMED); + public static MissionTodayResponse from(UserMissionLog log, java.time.LocalDateTime now) { + boolean popupRequired = log.isPopupRequired(now); return new MissionTodayResponse( log.getId(), diff --git a/src/main/java/com/example/hackathon/domain/mission/entity/UserMissionLog.java b/src/main/java/com/example/hackathon/domain/mission/entity/UserMissionLog.java index 7abcf90..68f7f9a 100644 --- a/src/main/java/com/example/hackathon/domain/mission/entity/UserMissionLog.java +++ b/src/main/java/com/example/hackathon/domain/mission/entity/UserMissionLog.java @@ -141,4 +141,10 @@ private void validateStatusTransition(MissionStatus current, MissionStatus targe com.example.hackathon.global.exception.ErrorCode.MISSION_ERROR_400_INVALID_TRANSITION ); } + + public boolean isPopupRequired(LocalDateTime now) { + return !now.isBefore(this.assignedAt) + && now.isBefore(this.deadlineAt) + && (this.status == MissionStatus.ASSIGNED || this.status == MissionStatus.CONFIRMED); + } } diff --git a/src/main/java/com/example/hackathon/domain/mission/service/MissionService.java b/src/main/java/com/example/hackathon/domain/mission/service/MissionService.java index 5a3b76e..925346b 100644 --- a/src/main/java/com/example/hackathon/domain/mission/service/MissionService.java +++ b/src/main/java/com/example/hackathon/domain/mission/service/MissionService.java @@ -43,7 +43,8 @@ public class MissionService { @Transactional public MissionTodayResponse getOrCreateTodayMission(String deviceId) { - return MissionTodayResponse.from(getOrCreateTodayMissionLog(deviceId, LocalDateTime.now(clock))); + LocalDateTime now = LocalDateTime.now(clock); + return MissionTodayResponse.from(getOrCreateTodayMissionLog(deviceId, now), now); } private UserMissionLog getOrCreateTodayMissionLog(String deviceId, LocalDateTime nowTime) { @@ -108,7 +109,7 @@ public MissionTodayStatusResponse getTodayMissionStatus(String deviceId) { long remainingSeconds = calculateRemainingSeconds(log, now); // popupRequired 판단 조건 - boolean popupRequired = isPopupRequired(log, now); + boolean popupRequired = log.isPopupRequired(now); return MissionTodayStatusResponse.of(log, popupRequired, remainingSeconds, expired); } @@ -134,7 +135,7 @@ public MissionPopupResponse recordPopupShown(String deviceId) { userMissionLogRepository.save(log); long remainingSeconds = calculateRemainingSeconds(log, now); - boolean popupRequired = isPopupRequired(log, now); + boolean popupRequired = log.isPopupRequired(now); return MissionPopupResponse.of(log, remainingSeconds, popupRequired); } @@ -261,10 +262,4 @@ private UserMissionLog resolveTodayLog(String deviceId, LocalDateTime now) { private long calculateRemainingSeconds(UserMissionLog log, LocalDateTime now) { return Math.max(Duration.between(now, log.getDeadlineAt()).getSeconds(), 0); } - - private boolean isPopupRequired(UserMissionLog log, LocalDateTime now) { - return !now.isBefore(log.getAssignedAt()) - && now.isBefore(log.getDeadlineAt()) - && (log.getStatus() == MissionStatus.ASSIGNED || log.getStatus() == MissionStatus.CONFIRMED); - } }