메시지 API
This commit is contained in:
@@ -5,6 +5,7 @@ import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.live.room.cancel.CancelLiveRequest
|
||||
import kr.co.vividnext.sodalive.live.room.donation.DeleteLiveRoomDonationMessage
|
||||
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRequest
|
||||
import kr.co.vividnext.sodalive.live.room.visit.LiveRoomVisitService
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import org.springframework.data.domain.Pageable
|
||||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
||||
@@ -22,7 +23,10 @@ import org.springframework.web.multipart.MultipartFile
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/live/room")
|
||||
class LiveRoomController(private val service: LiveRoomService) {
|
||||
class LiveRoomController(
|
||||
private val service: LiveRoomService,
|
||||
private val visitService: LiveRoomVisitService
|
||||
) {
|
||||
|
||||
@GetMapping
|
||||
fun getRoomList(
|
||||
@@ -229,4 +233,13 @@ class LiveRoomController(private val service: LiveRoomService) {
|
||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||
ApiResponse.ok(service.quitRoom(roomId, member))
|
||||
}
|
||||
|
||||
@GetMapping("/recent_visit_room/users")
|
||||
fun recentVisitRoomUsers(
|
||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||
) = run {
|
||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
ApiResponse.ok(visitService.getRecentVisitRoomUsers(member.id!!))
|
||||
}
|
||||
}
|
||||
|
@@ -3,6 +3,8 @@ package kr.co.vividnext.sodalive.live.room.visit
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
||||
import kr.co.vividnext.sodalive.live.room.QLiveRoom.liveRoom
|
||||
import kr.co.vividnext.sodalive.live.room.visit.QLiveRoomVisit.liveRoomVisit
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.MemberRole
|
||||
import kr.co.vividnext.sodalive.member.QMember.member
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
import org.springframework.stereotype.Repository
|
||||
@@ -13,6 +15,7 @@ interface LiveRoomVisitRepository : JpaRepository<LiveRoomVisit, Long>, LiveRoom
|
||||
interface LiveRoomVisitQueryRepository {
|
||||
fun findByRoomIdAndMemberId(roomId: Long, memberId: Long): LiveRoomVisit?
|
||||
fun findFirstByMemberIdOrderByUpdatedAtDesc(memberId: Long): LiveRoomVisit?
|
||||
fun getRecentVisitRoomUsers(roomId: Long, memberId: Long): List<Member>
|
||||
}
|
||||
|
||||
@Repository
|
||||
@@ -38,4 +41,17 @@ class LiveRoomVisitQueryRepositoryImpl(private val queryFactory: JPAQueryFactory
|
||||
.orderBy(liveRoomVisit.updatedAt.desc())
|
||||
.fetchFirst()
|
||||
}
|
||||
|
||||
override fun getRecentVisitRoomUsers(roomId: Long, memberId: Long): List<Member> {
|
||||
return queryFactory
|
||||
.selectFrom(member)
|
||||
.where(
|
||||
liveRoomVisit.room.id.eq(roomId)
|
||||
.and(liveRoomVisit.member.isActive.isTrue)
|
||||
.and(liveRoomVisit.member.id.ne(memberId))
|
||||
.and(liveRoomVisit.member.role.ne(MemberRole.ADMIN))
|
||||
.and(liveRoomVisit.member.role.ne(MemberRole.AGENT))
|
||||
)
|
||||
.fetch()
|
||||
}
|
||||
}
|
||||
|
@@ -1,14 +1,21 @@
|
||||
package kr.co.vividnext.sodalive.live.room.visit
|
||||
|
||||
import kr.co.vividnext.sodalive.live.room.LiveRoom
|
||||
import kr.co.vividnext.sodalive.live.room.detail.GetRoomDetailUser
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.stereotype.Service
|
||||
import org.springframework.transaction.annotation.Transactional
|
||||
import java.time.LocalDateTime
|
||||
|
||||
@Service
|
||||
@Transactional(readOnly = true)
|
||||
class LiveRoomVisitService(private val repository: LiveRoomVisitRepository) {
|
||||
class LiveRoomVisitService(
|
||||
private val repository: LiveRoomVisitRepository,
|
||||
|
||||
@Value("\${cloud.aws.cloud-front.host}")
|
||||
private val cloudFrontHost: String
|
||||
) {
|
||||
@Transactional
|
||||
fun roomVisit(room: LiveRoom, member: Member) {
|
||||
var roomVisit = repository.findByRoomIdAndMemberId(room.id!!, member.id!!)
|
||||
@@ -22,4 +29,14 @@ class LiveRoomVisitService(private val repository: LiveRoomVisitRepository) {
|
||||
|
||||
repository.save(roomVisit)
|
||||
}
|
||||
|
||||
fun getRecentVisitRoomUsers(memberId: Long): List<GetRoomDetailUser> {
|
||||
val roomVisit = repository.findFirstByMemberIdOrderByUpdatedAtDesc(memberId)
|
||||
?: return emptyList()
|
||||
|
||||
return repository.getRecentVisitRoomUsers(roomVisit.room!!.id!!, memberId)
|
||||
.asSequence()
|
||||
.map { GetRoomDetailUser(it, cloudFrontHost) }
|
||||
.toList()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user