다른 회원 프로필 조회 API 추가
This commit is contained in:
		| @@ -0,0 +1,9 @@ | ||||
| package kr.co.vividnext.sodalive.member | ||||
|  | ||||
| import com.querydsl.core.annotations.QueryProjection | ||||
|  | ||||
| data class GetMemberProfileResponse @QueryProjection constructor( | ||||
|     val memberId: Long, | ||||
|     val profileImageUrl: String, | ||||
|     val isBlocked: Boolean | ||||
| ) | ||||
| @@ -10,6 +10,7 @@ import org.springframework.data.domain.Pageable | ||||
| import org.springframework.security.core.annotation.AuthenticationPrincipal | ||||
| import org.springframework.security.core.userdetails.User | ||||
| import org.springframework.web.bind.annotation.GetMapping | ||||
| import org.springframework.web.bind.annotation.PathVariable | ||||
| import org.springframework.web.bind.annotation.PostMapping | ||||
| import org.springframework.web.bind.annotation.PutMapping | ||||
| import org.springframework.web.bind.annotation.RequestBody | ||||
| @@ -240,4 +241,13 @@ class MemberController(private val service: MemberService) { | ||||
|     fun forgotPassword( | ||||
|         @RequestBody request: ForgotPasswordRequest | ||||
|     ) = ApiResponse.ok(service.forgotPassword(request)) | ||||
|  | ||||
|     @GetMapping("/profile/{id}") | ||||
|     fun getMemberProfile( | ||||
|         @PathVariable id: Long, | ||||
|         @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? | ||||
|     ) = run { | ||||
|         if (member == null) throw SodaException("로그인 정보를 확인해주세요.") | ||||
|         ApiResponse.ok(service.getMemberProfile(memberId = id, myMemberId = member.id!!)) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -8,10 +8,12 @@ import kr.co.vividnext.sodalive.live.room.QLiveRoom.liveRoom | ||||
| import kr.co.vividnext.sodalive.member.QMember.member | ||||
| import kr.co.vividnext.sodalive.member.auth.QAuth.auth | ||||
| import kr.co.vividnext.sodalive.member.block.BlockMemberRepository | ||||
| import kr.co.vividnext.sodalive.member.block.QBlockMember.blockMember | ||||
| import kr.co.vividnext.sodalive.member.following.QCreatorFollowing.creatorFollowing | ||||
| import kr.co.vividnext.sodalive.member.nickname.QNicknameChangeLog.nicknameChangeLog | ||||
| import kr.co.vividnext.sodalive.member.notification.QMemberNotification.memberNotification | ||||
| import kr.co.vividnext.sodalive.message.QMessage.message | ||||
| import org.springframework.beans.factory.annotation.Value | ||||
| import org.springframework.data.jpa.repository.JpaRepository | ||||
| import org.springframework.stereotype.Repository | ||||
|  | ||||
| @@ -54,12 +56,17 @@ interface MemberQueryRepository { | ||||
|  | ||||
|     fun getChangeNoticeRecipientPushTokens(creatorId: Long): Map<String, List<List<String>>> | ||||
|     fun getPushTokenFromReservationList(roomId: Long): Map<String, List<List<String>>> | ||||
|  | ||||
|     fun getMemberProfile(memberId: Long, myMemberId: Long): GetMemberProfileResponse | ||||
| } | ||||
|  | ||||
| @Repository | ||||
| class MemberQueryRepositoryImpl( | ||||
|     private val queryFactory: JPAQueryFactory, | ||||
|     private val blockMemberRepository: BlockMemberRepository | ||||
|     private val blockMemberRepository: BlockMemberRepository, | ||||
|  | ||||
|     @Value("\${cloud.aws.cloud-front.host}") | ||||
|     private val cloudFrontHost: String | ||||
| ) : MemberQueryRepository { | ||||
|     override fun findByPushToken(pushToken: String): List<Member> { | ||||
|         return queryFactory | ||||
| @@ -415,4 +422,23 @@ class MemberQueryRepositoryImpl( | ||||
|  | ||||
|         return mapOf("aos" to aosPushTokens, "ios" to iosPushTokens) | ||||
|     } | ||||
|  | ||||
|     override fun getMemberProfile(memberId: Long, myMemberId: Long): GetMemberProfileResponse { | ||||
|         return queryFactory | ||||
|             .select( | ||||
|                 QGetMemberProfileResponse( | ||||
|                     member.id, | ||||
|                     member.profileImage.prepend("/").prepend(cloudFrontHost), | ||||
|                     blockMember.id.isNotNull | ||||
|                 ) | ||||
|             ) | ||||
|             .from(member) | ||||
|             .leftJoin(blockMember) | ||||
|             .on( | ||||
|                 member.id.eq(blockMember.blockedMember.id) | ||||
|                     .and(blockMember.isActive.isTrue) | ||||
|                     .and(blockMember.member.id.eq(memberId)) | ||||
|             ) | ||||
|             .fetchFirst() | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -622,6 +622,10 @@ class MemberService( | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     fun getMemberProfile(memberId: Long, myMemberId: Long): GetMemberProfileResponse { | ||||
|         return repository.getMemberProfile(memberId, myMemberId) | ||||
|     } | ||||
|  | ||||
|     private fun getOrCreateLock(memberId: Long): ReentrantReadWriteLock { | ||||
|         return tokenLocks.computeIfAbsent(memberId) { ReentrantReadWriteLock() } | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user