Closed solgito closed 3 weeks ago
ChallengeRecordsService
챌린지 별 참여 기록
성공 날짜 목록
실패 날짜 목록
다가오는 날짜 목록
ChallengeRecords DTO
// ChallengeRecords.java public class ChallengeRecords { private List<LocalDate> successDayList; private List<LocalDate> failureDayList; private List<LocalDate> upcomingDayList; public ChallengeRecords() { successDayList = new ArrayList<>(); failureDayList = new ArrayList<>(); upcomingDayList = new ArrayList<>(); } public void addSuccessDay(LocalDate date) { successDayList.add(date); } public void addFailureDay(LocalDate date) { failureDayList.add(date); } public void addUpcomingDay(LocalDate date) { upcomingDayList.add(date); } }
// ChallengeRecordsService.java public SuccessResponse<ChallengeRecordsResponse> getChallengeRecords(Long challengeId, Member member) { ... ChallengeRecords challengeRecords = new ChallengeRecords(); List<ChallengeParticipationRecord> recordList = challengeParticipationRecordSearchService.findAllByChallengeEnrollment(enrollment); LocalDate today = TimeZoneConverter.convertEtcToLocalTimeZone(ZonedDateTime.now()).toLocalDate(); recordList.forEach(record -> categorizeRecord(record, today, challengeRecords)); return SuccessResponse.of( SuccessCode.NO_MESSAGE, ChallengeRecordsResponse.builder() .successDayList(challengeRecords.getSuccessDayList()) .failureDayList(challengeRecords.getFailureDayList()) .upcomingDayList(challengeRecords.getUpcomingDayList()) .build() ); }
recordList
categorizeRecord()
ChallengeRecords
private void categorizeRecord(ChallengeParticipationRecord record, LocalDate today, ChallengeRecords challengeRecords) { LocalDate targetDate = TimeZoneConverter.convertEtcToLocalTimeZone(record.getTargetDate()).toLocalDate(); if (targetDate.isBefore(today)) { if (record.existsChallengePost()) { challengeRecords.addSuccessDay(targetDate); } else { challengeRecords.addFailureDay(targetDate); } } else if (targetDate.isEqual(today)) { if (record.existsChallengePost()) { challengeRecords.addSuccessDay(targetDate); } else { challengeRecords.addUpcomingDay(targetDate); } } else { challengeRecords.addUpcomingDay(targetDate); } }
record
성공/실패 여부
API 요청일과 날짜 비교
fail
failure
// ex failDayList => failureDayList
개요
ChallengeRecordsService
클래스를 중심으로 서비스 메서드는 비즈니스 로직에 집중하도록 리팩토링했습니다.코드 주요 내용
챌린지 별 참여 기록
데이터에는성공 날짜 목록
,실패 날짜 목록
,다가오는 날짜 목록
의 세 요소가 존재합니다.ChallengeRecords DTO
가 추가됐습니다.recordList
를 순회하며categorizeRecord()
메서드를 이용해 분류합니다.categorizeRecord()
메서드를 통해 분류된 날짜 데이터는ChallengeRecords
내 적절한 목록에 담기게 됩니다.categorizeRecord()
메서드입니다.record
의성공/실패 여부
,API 요청일과 날짜 비교
등을 통해,성공 날짜 목록
,실패 날짜 목록
,다가오는 날짜 목록
에 날짜 데이터를 추가합니다.기타
fail
을 사용하는 변수명은failure
로 교체했습니다. (동사 -> 명사)