diff --git a/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/model/query/MemberWithFriendshipStatusQuery.java b/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/model/query/MemberWithFriendshipStatusQuery.java new file mode 100644 index 00000000..36f1f1a2 --- /dev/null +++ b/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/model/query/MemberWithFriendshipStatusQuery.java @@ -0,0 +1,10 @@ +package com.namo.spring.db.mysql.domains.user.model.query; + +import com.namo.spring.db.mysql.domains.user.entity.Member; +import com.namo.spring.db.mysql.domains.user.type.FriendshipStatus; + +public record MemberWithFriendshipStatusQuery( + Member member, + FriendshipStatus friendshipStatus +) { +} diff --git a/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/repository/FriendshipRepository.java b/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/repository/FriendshipRepository.java index f85c2f4b..86b47f35 100644 --- a/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/repository/FriendshipRepository.java +++ b/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/repository/FriendshipRepository.java @@ -32,7 +32,7 @@ public interface FriendshipRepository extends JpaRepository<Friendship, Long> { * @param endDate * @return 친구 memberId, nickname, birthday */ - @Query("SELECT new com.namo.spring.db.mysql.domains.user.model.query.FriendBirthdayQuery(fr.id, fr.nickname, fr.birthday) " + + @Query("SELECT new com.namo.spring.db.mysql.domains.user.model.query.FriendshipWithBirthdayQuery(fr.id, fr.nickname, fr.birthday) " + "FROM Friendship f JOIN f.friend fr " + "WHERE f.member.id = :memberId " + "AND fr.birthdayVisible = true " + @@ -56,7 +56,7 @@ List<FriendshipWithBirthdayQuery> findBirthdayVisibleFriendIdsByPeriod( * @param memberId * @return 친구 memberId, nickname, birthday */ - @Query("SELECT new com.namo.spring.db.mysql.domains.user.model.query.FriendBirthdayQuery(fr.id, fr.nickname, fr.birthday) " + + @Query("SELECT new com.namo.spring.db.mysql.domains.user.model.query.FriendshipWithBirthdayQuery(fr.id, fr.nickname, fr.birthday) " + "FROM Friendship f JOIN f.friend fr " + "WHERE f.member.id = :memberId " + "AND fr.birthdayVisible = true " + diff --git a/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/repository/MemberRepository.java b/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/repository/MemberRepository.java index 7c503c21..6dc017e0 100644 --- a/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/repository/MemberRepository.java +++ b/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/repository/MemberRepository.java @@ -4,12 +4,14 @@ import java.util.List; import java.util.Optional; +import com.namo.spring.db.mysql.domains.user.model.query.MemberWithFriendshipStatusQuery; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import com.namo.spring.db.mysql.domains.user.entity.Member; import com.namo.spring.db.mysql.domains.user.type.MemberStatus; import com.namo.spring.db.mysql.domains.user.type.SocialType; +import org.springframework.data.repository.query.Param; public interface MemberRepository extends JpaRepository<Member, Long> { @@ -33,4 +35,12 @@ public interface MemberRepository extends JpaRepository<Member, Long> { Optional<Member> findByIdAndStatus(Long memberId, MemberStatus status); Optional<Member> findByNicknameAndTagAndStatus(String nickname, String tag, MemberStatus status); + + @Query("SELECT new com.namo.spring.db.mysql.domains.user.model.query.MemberWithFriendshipStatusQuery(" + + "m, CASE WHEN f IS NOT NULL THEN f.status ELSE null END) " + + "FROM Member m " + + "LEFT JOIN Friendship f ON f.member.id = :memberId AND f.friend.id = :targetId " + + "WHERE m.id = :targetId") + MemberWithFriendshipStatusQuery findByMemberIdWithFriendStatus(@Param("memberId") Long memberId, @Param("targetId") Long targetId); + } diff --git a/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/service/MemberService.java b/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/service/MemberService.java index 1dfc1305..7cdc3507 100644 --- a/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/service/MemberService.java +++ b/storage/db-mysql-v2/src/main/java/com/namo/spring/db/mysql/domains/user/service/MemberService.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Optional; +import com.namo.spring.db.mysql.domains.user.model.query.MemberWithFriendshipStatusQuery; import org.springframework.transaction.annotation.Transactional; import com.namo.spring.core.common.annotation.DomainService; @@ -39,4 +40,8 @@ public Optional<Member> readMemberByStatus(Long memberId, MemberStatus status){ public Optional<Member> readMemberByStatus(String nickname, String tag, MemberStatus status){ return memberRepository.findByNicknameAndTagAndStatus(nickname, tag, status); } + + public MemberWithFriendshipStatusQuery findMemberWithFriendshipStatus(Long memberId, Long targetId) { + return memberRepository.findByMemberIdWithFriendStatus(memberId, targetId); + } }