diff --git a/src/main/java/org/capstone/maru/controller/MainController.java b/src/main/java/org/capstone/maru/controller/MainController.java index 5a71abb..4f8d348 100644 --- a/src/main/java/org/capstone/maru/controller/MainController.java +++ b/src/main/java/org/capstone/maru/controller/MainController.java @@ -22,7 +22,7 @@ public class MainController { @GetMapping("/") public String root() { - return "health check is running!"; + return "health check"; } @GetMapping("/test") diff --git a/src/main/java/org/capstone/maru/domain/MemberRecommendUpdate.java b/src/main/java/org/capstone/maru/domain/MemberRecommendUpdate.java new file mode 100644 index 0000000..657b9dd --- /dev/null +++ b/src/main/java/org/capstone/maru/domain/MemberRecommendUpdate.java @@ -0,0 +1,30 @@ +package org.capstone.maru.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import java.time.Duration; +import java.time.LocalDateTime; +import lombok.Getter; + +@Getter +@Entity +public class MemberRecommendUpdate { + + @Id + private String memberId; + + private LocalDateTime recommendUpdateAt; + + public MemberRecommendUpdate(String memberId, LocalDateTime recommendUpdateAt) { + this.memberId = memberId; + this.recommendUpdateAt = LocalDateTime.now(); + } + + public Boolean haveToUpdate(LocalDateTime now) { + + Duration duration = Duration.between(recommendUpdateAt, now); + + // 차이가 30분인지 확인 + return duration.equals(Duration.ofMinutes(30)); + } +} diff --git a/src/main/java/org/capstone/maru/repository/postgre/MemberRecommendUpdateRepository.java b/src/main/java/org/capstone/maru/repository/postgre/MemberRecommendUpdateRepository.java new file mode 100644 index 0000000..651df6c --- /dev/null +++ b/src/main/java/org/capstone/maru/repository/postgre/MemberRecommendUpdateRepository.java @@ -0,0 +1,9 @@ +package org.capstone.maru.repository.postgre; + +import org.capstone.maru.domain.MemberRecommendUpdate; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MemberRecommendUpdateRepository extends + JpaRepository { + +} diff --git a/src/main/java/org/capstone/maru/service/ProfileService.java b/src/main/java/org/capstone/maru/service/ProfileService.java index 63f02c5..a83c0a4 100644 --- a/src/main/java/org/capstone/maru/service/ProfileService.java +++ b/src/main/java/org/capstone/maru/service/ProfileService.java @@ -1,11 +1,13 @@ package org.capstone.maru.service; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.capstone.maru.domain.FeatureCard; import org.capstone.maru.domain.MemberAccount; +import org.capstone.maru.domain.MemberRecommendUpdate; import org.capstone.maru.domain.ProfileImage; import org.capstone.maru.domain.Recommend; import org.capstone.maru.domain.jsonb.MemberFeatures; @@ -17,6 +19,7 @@ import org.capstone.maru.dto.response.SharedRoomPostResponse; import org.capstone.maru.dto.response.SimpleMemberProfileResponse; import org.capstone.maru.repository.postgre.MemberCardRepository; +import org.capstone.maru.repository.postgre.MemberRecommendUpdateRepository; import org.capstone.maru.repository.postgre.ProfileImageRepository; import org.capstone.maru.repository.postgre.RecommendRepository; import org.springframework.stereotype.Service; @@ -41,6 +44,8 @@ public class ProfileService { private final RecommendService recommendService; + private final MemberRecommendUpdateRepository memberRecommendUpdateRepository; + @Transactional public FeatureCardDto updateMyCard(String memberId, Long cardId, String location, MemberFeatures features) { @@ -124,9 +129,9 @@ public FeatureCardDto getCard(Long cardId) { log.info("getCard - cardId: {}", cardId); FeatureCard featureCard = memberCardRepository.findById(cardId) - .orElseThrow( - () -> new IllegalArgumentException( - "MemberCard not found")); + .orElseThrow( + () -> new IllegalArgumentException( + "MemberCard not found")); return FeatureCardDto.from(featureCard); } @@ -141,13 +146,9 @@ public void updateProfileImage(String memberId, String fileName) { MemberAccount memberAccount = memberAccountService.searchMemberAccount(memberId); - Optional profileImage = profileImageRepository.findById(fileName); - - if (profileImage.isEmpty()) { - throw new IllegalArgumentException("ProfileImage not found"); - } + ProfileImage profileImage = memberAccount.getProfileImage(); - memberAccount.updateProfileImage(profileImage.get()); + profileImage.updateFileName(fileName); } @Transactional @@ -189,11 +190,22 @@ public List getRecommendMember(String memberId, String gend String cardOption) { log.info("cardOption: {}", cardOption); - recommendService.updateRecommendation( - memberId, - cardOption, - "member" - ).block(); + LocalDateTime now = LocalDateTime.now(); + + Optional recommendUpdate = memberRecommendUpdateRepository.findById( + memberId); + + if (recommendUpdate.isEmpty() || recommendUpdate.get().haveToUpdate(now)) { + recommendService.updateRecommendation( + memberId, + cardOption, + "member" + ).block(); + + MemberRecommendUpdate recommendUpdateSave = new MemberRecommendUpdate(memberId, now); + + memberRecommendUpdateRepository.save(recommendUpdateSave); + } String recommendType = "my".equals(cardOption) ? "mate" : "my";