Skip to content

Commit

Permalink
fix: today API before -> after 수정 (#149)
Browse files Browse the repository at this point in the history
  • Loading branch information
char-yb authored Aug 18, 2024
1 parent a749bf8 commit 55b8ca9
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public class MissionService {
private final MissionRepository missionRepository;
private final MissionHistoryRepository missionHistoryRepository;
private final SecureRandom secureRandom = new SecureRandom();
private static final long MISSION_TODAY_STANDARD = 3;

public MissionCreateResponse createMission(MissionCreateRequest missionCreateRequest) {
Mission mission = Mission.builder().title(missionCreateRequest.title()).build();
Expand All @@ -43,20 +44,20 @@ public MissionGetOneResponse getMission(Long missionId) {
.orElseThrow(() -> new CustomException(ErrorCode.MISSION_NOT_FOUND));
}

@Transactional
public MissionGetTodayResponse getOrCreateTodayMission() {
LocalDate today = LocalDate.now();
LocalDate threeDaysAgo = today.minusDays(3);
final LocalDate today = LocalDate.now();
LocalDate beforeDayByStandard = today.minusDays(MISSION_TODAY_STANDARD);

Optional<MissionHistory> optionalMissionHistory =
Optional<MissionHistory> findMissionHistory =
missionHistoryRepository.findByAssignedDate(today);

if (optionalMissionHistory.isPresent()) {
return MissionGetTodayResponse.from(optionalMissionHistory.get().getMission());
if (findMissionHistory.isPresent()) {
return MissionGetTodayResponse.from(findMissionHistory.get().getMission());
}

// 최근 3일 이전의 미션들 불러오기
List<Mission> recentMissions = missionRepository.findMissionsAssignedBefore(threeDaysAgo);
// 최근 3일 내의 미션들 불러오기
List<Mission> recentMissions =
missionRepository.findMissionsAssignedAfter(beforeDayByStandard);

// 최근 3일 이내의 미션은 제외하고 불러오기
List<Mission> availableMissions = missionRepository.findNotInMissions(recentMissions);
Expand All @@ -68,10 +69,9 @@ public MissionGetTodayResponse getOrCreateTodayMission() {
Mission selectedMission =
availableMissions.get(secureRandom.nextInt(availableMissions.size()));

MissionHistory newMissionHistory =
MissionHistory.builder().mission(selectedMission).assignedDate(today).build();
MissionHistory missionHistory = MissionHistory.createMissionHistory(selectedMission, today);

missionHistoryRepository.save(newMissionHistory);
missionHistoryRepository.save(missionHistory);

return MissionGetTodayResponse.from(selectedMission);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
public interface MissionRepositoryCustom {
List<Mission> findNotInMissions(List<Mission> missions);

List<Mission> findMissionsAssignedBefore(LocalDate assignedDate);
List<Mission> findMissionsAssignedAfter(LocalDate assignedDate);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static com.depromeet.stonebed.domain.mission.domain.QMissionHistory.missionHistory;

import com.depromeet.stonebed.domain.mission.domain.Mission;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQueryFactory;
import java.time.LocalDate;
import java.util.List;
Expand All @@ -21,11 +22,15 @@ public List<Mission> findNotInMissions(List<Mission> missions) {
}

@Override
public List<Mission> findMissionsAssignedBefore(LocalDate assignedDate) {
public List<Mission> findMissionsAssignedAfter(LocalDate assignedDate) {
return queryFactory
.select(missionHistory.mission)
.from(missionHistory)
.where(missionHistory.assignedDate.before(assignedDate))
.where(assignedDateAfter(assignedDate))
.fetch();
}

private BooleanExpression assignedDateAfter(LocalDate assignedDate) {
return missionHistory.assignedDate.after(assignedDate);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,13 @@ public class MissionHistory extends BaseTimeEntity {
@Column(name = "assigned_date", nullable = false, unique = true)
private LocalDate assignedDate;

@Builder
@Builder(access = AccessLevel.PRIVATE)
public MissionHistory(Mission mission, LocalDate assignedDate) {
this.mission = mission;
this.assignedDate = assignedDate;
}

public static MissionHistory createMissionHistory(Mission mission, LocalDate assignedDate) {
return MissionHistory.builder().mission(mission).assignedDate(assignedDate).build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,16 @@ class MissionServiceTest {
@InjectMocks private MissionService missionService;

private LocalDate today;
private LocalDate threeDaysAgo;
private LocalDate beforeDayByStandard;
private Mission mission;
private MissionHistory missionHistory;

@BeforeEach
public void setUp() {
today = LocalDate.now();
threeDaysAgo = LocalDate.now().minusDays(3);
beforeDayByStandard = LocalDate.now().minusDays(3);
mission = Mission.builder().title("Test Mission").build();
missionHistory = MissionHistory.builder().mission(mission).assignedDate(today).build();
missionHistory = MissionHistory.createMissionHistory(mission, today);
MockitoAnnotations.openMocks(this);
}

Expand Down Expand Up @@ -103,7 +103,8 @@ public void setUp() {
availableMissions.add(Mission.builder().title("4일 전 미션").build());
availableMissions.add(Mission.builder().title("5일 전 미션").build());

when(missionRepository.findMissionsAssignedBefore(threeDaysAgo)).thenReturn(recentMissions);
when(missionRepository.findMissionsAssignedAfter(beforeDayByStandard))
.thenReturn(recentMissions);

when(missionRepository.findNotInMissions(recentMissions)).thenReturn(availableMissions);

Expand All @@ -123,7 +124,7 @@ public void setUp() {
// Given: 초기 설정
List<Mission> emptyMissionList = new ArrayList<>();

when(missionRepository.findMissionsAssignedBefore(today)).thenReturn(emptyMissionList);
when(missionRepository.findMissionsAssignedAfter(today)).thenReturn(emptyMissionList);

when(missionRepository.findNotInMissions(emptyMissionList)).thenReturn(emptyMissionList);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ class MissionHistoryRepositoryTest {
missionRepository.save(mission);
LocalDate today = LocalDate.now();

MissionHistory missionHistory =
MissionHistory.builder().mission(mission).assignedDate(today).build();
MissionHistory missionHistory = MissionHistory.createMissionHistory(mission, today);

// When: 미션 히스토리를 저장하면
MissionHistory savedMissionHistory = missionHistoryRepository.save(missionHistory);
Expand All @@ -52,8 +51,7 @@ class MissionHistoryRepositoryTest {
missionRepository.save(mission);
LocalDate today = LocalDate.now();

MissionHistory missionHistory =
MissionHistory.builder().mission(mission).assignedDate(today).build();
MissionHistory missionHistory = MissionHistory.createMissionHistory(mission, today);
missionHistoryRepository.save(missionHistory);

// When: 특정 날짜(오늘)의 미션 히스토리를 가져오면
Expand Down

0 comments on commit 55b8ca9

Please sign in to comment.