147 lines
5.5 KiB
Kotlin
147 lines
5.5 KiB
Kotlin
package kr.co.vividnext.sodalive.message
|
|
|
|
import com.querydsl.core.types.dsl.BooleanExpression
|
|
import com.querydsl.jpa.impl.JPAQueryFactory
|
|
import kr.co.vividnext.sodalive.message.QMessage.message
|
|
import org.springframework.data.domain.Pageable
|
|
import org.springframework.data.jpa.repository.JpaRepository
|
|
import org.springframework.stereotype.Repository
|
|
|
|
@Repository
|
|
interface MessageRepository : JpaRepository<Message, Long>, MessageQueryRepository
|
|
|
|
interface MessageQueryRepository {
|
|
fun getSentTextMessageCount(memberId: Long): Int
|
|
fun getSentTextMessageList(pageable: Pageable, memberId: Long): List<Message>
|
|
fun getReceivedTextMessageCount(memberId: Long): Int
|
|
fun getReceivedTextMessageList(pageable: Pageable, memberId: Long): List<Message>
|
|
fun getKeepTextMessageCount(memberId: Long): Int
|
|
fun getKeepTextMessageList(pageable: Pageable, memberId: Long): List<Message>
|
|
fun getSentVoiceMessageCount(memberId: Long): Int
|
|
fun getSentVoiceMessageList(pageable: Pageable, memberId: Long): List<Message>
|
|
fun getReceivedVoiceMessageCount(memberId: Long): Int
|
|
fun getReceivedVoiceMessageList(pageable: Pageable, memberId: Long): List<Message>
|
|
fun getKeepVoiceMessageCount(memberId: Long): Int
|
|
fun getKeepVoiceMessageList(pageable: Pageable, memberId: Long): List<Message>
|
|
}
|
|
|
|
@Repository
|
|
class MessageQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : MessageQueryRepository {
|
|
override fun getSentTextMessageCount(memberId: Long): Int {
|
|
val where = message.messageType.eq(MessageType.TEXT)
|
|
.and(message.isSenderDelete.isFalse)
|
|
.and(message.sender.id.eq(memberId))
|
|
|
|
return totalCount(where)
|
|
}
|
|
|
|
override fun getSentTextMessageList(pageable: Pageable, memberId: Long): List<Message> {
|
|
val where = message.messageType.eq(MessageType.TEXT)
|
|
.and(message.isSenderDelete.isFalse)
|
|
.and(message.sender.id.eq(memberId))
|
|
|
|
return messageList(pageable, where)
|
|
}
|
|
|
|
override fun getReceivedTextMessageCount(memberId: Long): Int {
|
|
val where = message.messageType.eq(MessageType.TEXT)
|
|
.and(message.isRecipientDelete.isFalse)
|
|
.and(message.recipient.id.eq(memberId))
|
|
|
|
return totalCount(where)
|
|
}
|
|
|
|
override fun getReceivedTextMessageList(pageable: Pageable, memberId: Long): List<Message> {
|
|
val where = message.messageType.eq(MessageType.TEXT)
|
|
.and(message.isRecipientDelete.isFalse)
|
|
.and(message.recipient.id.eq(memberId))
|
|
|
|
return messageList(pageable, where)
|
|
}
|
|
|
|
override fun getKeepTextMessageCount(memberId: Long): Int {
|
|
val where = message.messageType.eq(MessageType.TEXT)
|
|
.and(message.isRecipientDelete.isFalse)
|
|
.and(message.isRecipientKeep.isTrue)
|
|
.and(message.recipient.id.eq(memberId))
|
|
|
|
return totalCount(where)
|
|
}
|
|
|
|
override fun getKeepTextMessageList(pageable: Pageable, memberId: Long): List<Message> {
|
|
val where = message.messageType.eq(MessageType.TEXT)
|
|
.and(message.isRecipientDelete.isFalse)
|
|
.and(message.isRecipientKeep.isTrue)
|
|
.and(message.recipient.id.eq(memberId))
|
|
|
|
return messageList(pageable, where)
|
|
}
|
|
|
|
override fun getSentVoiceMessageCount(memberId: Long): Int {
|
|
val where = message.messageType.eq(MessageType.VOICE)
|
|
.and(message.isSenderDelete.isFalse)
|
|
.and(message.sender.id.eq(memberId))
|
|
|
|
return totalCount(where)
|
|
}
|
|
|
|
override fun getSentVoiceMessageList(pageable: Pageable, memberId: Long): List<Message> {
|
|
val where = message.messageType.eq(MessageType.VOICE)
|
|
.and(message.isSenderDelete.isFalse)
|
|
.and(message.sender.id.eq(memberId))
|
|
|
|
return messageList(pageable, where)
|
|
}
|
|
|
|
override fun getReceivedVoiceMessageCount(memberId: Long): Int {
|
|
val where = message.messageType.eq(MessageType.VOICE)
|
|
.and(message.isRecipientDelete.isFalse)
|
|
.and(message.recipient.id.eq(memberId))
|
|
|
|
return totalCount(where)
|
|
}
|
|
|
|
override fun getReceivedVoiceMessageList(pageable: Pageable, memberId: Long): List<Message> {
|
|
val where = message.messageType.eq(MessageType.VOICE)
|
|
.and(message.isRecipientDelete.isFalse)
|
|
.and(message.recipient.id.eq(memberId))
|
|
|
|
return messageList(pageable, where)
|
|
}
|
|
|
|
override fun getKeepVoiceMessageCount(memberId: Long): Int {
|
|
val where = message.messageType.eq(MessageType.VOICE)
|
|
.and(message.isRecipientDelete.isFalse)
|
|
.and(message.isRecipientKeep.isTrue)
|
|
.and(message.recipient.id.eq(memberId))
|
|
|
|
return totalCount(where)
|
|
}
|
|
|
|
override fun getKeepVoiceMessageList(pageable: Pageable, memberId: Long): List<Message> {
|
|
val where = message.messageType.eq(MessageType.VOICE)
|
|
.and(message.isRecipientDelete.isFalse)
|
|
.and(message.isRecipientKeep.isTrue)
|
|
.and(message.recipient.id.eq(memberId))
|
|
|
|
return messageList(pageable, where)
|
|
}
|
|
|
|
private fun messageList(pageable: Pageable, where: BooleanExpression): List<Message> {
|
|
return queryFactory.selectFrom(message)
|
|
.offset(pageable.offset)
|
|
.limit(pageable.pageSize.toLong())
|
|
.where(where)
|
|
.orderBy(message.id.desc())
|
|
.fetch()
|
|
}
|
|
|
|
private fun totalCount(where: BooleanExpression): Int {
|
|
return queryFactory.select(message.id)
|
|
.from(message)
|
|
.where(where)
|
|
.fetch()
|
|
.size
|
|
}
|
|
}
|