From 1b383517f0c5c82e3d68a9a2e650c3a6741f865a Mon Sep 17 00:00:00 2001 From: hocaron Date: Mon, 5 Aug 2024 23:33:05 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=9B=94=20=EC=9D=BC=EB=A7=8C=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/MemberProfileRepositoryCustom.java | 4 ++-- .../MemberProfileRepositoryCustomImpl.java | 20 +++++++++++++++---- .../service/member/MemberBirthdayDto.java | 16 +++++++++++---- .../service/member/MemberProfileService.java | 3 ++- .../birthday/BirthdayFacadeService.java | 15 +++++++------- .../response/MemberBirthdayResponse.java | 6 ++++-- .../response/MemberBirthdaysResponse.java | 11 +++++----- 7 files changed, 50 insertions(+), 25 deletions(-) diff --git a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustom.java b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustom.java index f7b23b67..71eb0dcf 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustom.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustom.java @@ -3,10 +3,10 @@ import kr.mashup.branding.domain.generation.Generation; import kr.mashup.branding.service.member.MemberBirthdayDto; -import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; public interface MemberProfileRepositoryCustom { - List retrieveByBirthDateBetween(LocalDate startDate, LocalDate endDate, Generation generation); + List retrieveByBirthDateBetween(MonthDay startDate, MonthDay endDate, Generation generation); } diff --git a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustomImpl.java b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustomImpl.java index 5879e0e9..212ac491 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustomImpl.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustomImpl.java @@ -1,12 +1,13 @@ package kr.mashup.branding.repository.member; import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import kr.mashup.branding.domain.generation.Generation; import kr.mashup.branding.service.member.MemberBirthdayDto; import lombok.RequiredArgsConstructor; -import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; import static kr.mashup.branding.domain.member.QMember.member; @@ -18,9 +19,9 @@ public class MemberProfileRepositoryCustomImpl implements MemberProfileRepositor private final JPAQueryFactory queryFactory; @Override - public List retrieveByBirthDateBetween(LocalDate startDate, LocalDate endDate, Generation generation) { + public List retrieveByBirthDateBetween(MonthDay startDate, MonthDay endDate, Generation generation) { return queryFactory - .select(Projections.fields( + .select(Projections.constructor( MemberBirthdayDto.class, member.id.as("memberId"), member.name.as("name"), @@ -30,7 +31,18 @@ public List retrieveByBirthDateBetween(LocalDate startDate, L .from(memberProfile) .join(member).on(member.id.eq(memberProfile.memberId)) .join(memberGeneration).on(member.id.eq(memberGeneration.member.id)) - .where(memberProfile.birthDate.between(startDate, endDate).and(memberGeneration.generation.eq(generation))) + .where( + birthDateBetween(startDate, endDate) + .and(memberGeneration.generation.eq(generation)) + ) .fetch(); } + + private BooleanExpression birthDateBetween(MonthDay startDate, MonthDay endDate) { + + return memberProfile.birthDate.month().gt(startDate.getMonthValue()) + .or(memberProfile.birthDate.month().eq(startDate.getMonthValue()).and(memberProfile.birthDate.dayOfMonth().goe(startDate.getDayOfMonth()))) + .and(memberProfile.birthDate.month().lt(endDate.getMonthValue()) + .or(memberProfile.birthDate.month().eq(endDate.getMonthValue()).and(memberProfile.birthDate.dayOfMonth().loe(endDate.getDayOfMonth())))); + } } diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberBirthdayDto.java b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberBirthdayDto.java index 79433655..35d32432 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberBirthdayDto.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberBirthdayDto.java @@ -4,12 +4,20 @@ import lombok.Getter; import java.time.LocalDate; +import java.time.MonthDay; @Getter public class MemberBirthdayDto { - private Long memberId; - private String name; - private Platform platform; - private LocalDate birthDate; + private final Long memberId; + private final String name; + private final Platform platform; + private final MonthDay birthDate; + + public MemberBirthdayDto(Long memberId, String name, Platform platform, LocalDate birthDate) { + this.memberId = memberId; + this.name = name; + this.platform = platform; + this.birthDate = MonthDay.from(birthDate); + } } diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java index 527ae785..9d269a94 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; @Service @@ -51,7 +52,7 @@ public MemberProfile findOrSave(Long memberId) { .orElseGet(() -> memberProfileRepository.save(MemberProfile.from(memberId))); } - public List findByBirthDateBetween(LocalDate startDate, LocalDate endDate, Generation generation) { + public List findByBirthDateBetween(MonthDay startDate, MonthDay endDate, Generation generation) { return memberProfileRepository.retrieveByBirthDateBetween(startDate, endDate, generation); } diff --git a/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java b/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java index d850647e..cf8910a2 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java +++ b/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java @@ -17,9 +17,9 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.stream.Collectors; @Service @@ -45,16 +45,17 @@ public MemberBirthdaysResponse getUpcomingBirthdays(Long memberId, Integer days) Member member = memberService.findMemberById(memberId); Generation generation = generationService.getCurrentGeneration(member); - boolean isBirthdayToday = memberProfileService.isBirthdayToday(memberId); - Map> upcomingBirthdays = calculateUpcomingBirthdays(member, days, generation); - Set sentMemberIds = birthdayService.getSentBirthdayCardMemberIds(memberId, generation.getId()); + var isBirthdayToday = memberProfileService.isBirthdayToday(memberId); + var upcomingBirthdays = calculateUpcomingBirthdays(member, days, generation); + var sentMemberIds = birthdayService.getSentBirthdayCardMemberIds(memberId, generation.getId()); return MemberBirthdaysResponse.of(isBirthdayToday, sentMemberIds, upcomingBirthdays); } - private Map> calculateUpcomingBirthdays(Member member, Integer days, Generation generation) { - LocalDate now = LocalDate.now(); - return memberProfileService.findByBirthDateBetween(now, now.plusDays(days), generation) + private Map> calculateUpcomingBirthdays(Member member, Integer days, Generation generation) { + MonthDay today = MonthDay.from(LocalDate.now()); + MonthDay endDay = MonthDay.from(LocalDate.now().plusDays(days)); + return memberProfileService.findByBirthDateBetween(today, endDay, generation) .stream() .filter(birthdayDto -> birthdayDto.getMemberId() != member.getId()) .collect(Collectors.groupingBy(MemberBirthdayDto::getBirthDate)); diff --git a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdayResponse.java b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdayResponse.java index 0fd5b6e1..c8926af8 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdayResponse.java +++ b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdayResponse.java @@ -1,16 +1,18 @@ package kr.mashup.branding.ui.member.response; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Getter; import lombok.RequiredArgsConstructor; -import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; @Getter @RequiredArgsConstructor public class MemberBirthdayResponse { - private final LocalDate date; + @JsonFormat(pattern = "MM-dd") + private final MonthDay date; private final List members; @Getter diff --git a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java index 194d36e0..ede7706e 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java +++ b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import java.time.LocalDate; +import java.time.MonthDay; import java.util.Comparator; import java.util.List; import java.util.Map; @@ -21,17 +22,17 @@ public class MemberBirthdaysResponse { private final List upcomingBirthdays; - public static MemberBirthdaysResponse of(boolean isBirthdayToday, Set sentMemberIds, Map> upcomingBirthdays) { + public static MemberBirthdaysResponse of(boolean isBirthdayToday, Set sentMemberIds, Map> upcomingBirthdays) { List responses = createResponses(sentMemberIds, upcomingBirthdays); - LocalDate today = LocalDate.now(); + MonthDay today = MonthDay.from(LocalDate.now()); MemberBirthdayResponse todayBirthday = extractTodayBirthday(today, responses); List sortedResponses = sortUpcomingBirthdays(today, responses); return new MemberBirthdaysResponse(isBirthdayToday, todayBirthday, sortedResponses); } - private static List createResponses(Set sentMemberIds, Map> birthdayDtos) { + private static List createResponses(Set sentMemberIds, Map> birthdayDtos) { return birthdayDtos.entrySet().stream() .map(entry -> new MemberBirthdayResponse( entry.getKey(), @@ -47,14 +48,14 @@ private static List createResponses(Set sentMember .collect(Collectors.toList()); } - private static MemberBirthdayResponse extractTodayBirthday(LocalDate today, List responses) { + private static MemberBirthdayResponse extractTodayBirthday(MonthDay today, List responses) { return responses.stream() .filter(response -> today.equals(response.getDate())) .findFirst() .orElse(null); } - private static List sortUpcomingBirthdays(LocalDate today, List responses) { + private static List sortUpcomingBirthdays(MonthDay today, List responses) { return responses.stream() .filter(response -> !today.equals(response.getDate())) .sorted(Comparator.comparing(MemberBirthdayResponse::getDate))