Compare commits
No commits in common. "b8230646a20b6d594da00fd20cbcd3227bec807e" and "43279541ddf2a769a7cd1631c44f65abbe51bf04" have entirely different histories.
b8230646a2
...
43279541dd
|
@ -86,7 +86,7 @@ class AdminContentService(
|
||||||
?: throw SodaException("없는 콘텐츠 입니다.")
|
?: throw SodaException("없는 콘텐츠 입니다.")
|
||||||
|
|
||||||
if (request.isDefaultCoverImage) {
|
if (request.isDefaultCoverImage) {
|
||||||
audioContent.coverImage = "`profile/default_profile.png`"
|
audioContent.coverImage = "profile/default_profile.png"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.isActive != null) {
|
if (request.isActive != null) {
|
||||||
|
|
|
@ -68,8 +68,7 @@ class CanService(private val repository: CanRepository) {
|
||||||
}
|
}
|
||||||
|
|
||||||
CanUsage.CHANGE_NICKNAME -> "닉네임 변경"
|
CanUsage.CHANGE_NICKNAME -> "닉네임 변경"
|
||||||
CanUsage.ORDER_CONTENT -> "[콘텐츠 구매] ${it.audioContent!!.title}"
|
CanUsage.ORDER_CONTENT -> "콘텐츠 구매"
|
||||||
CanUsage.PAID_COMMUNITY_POST -> "[게시글 보기] ${it.communityPost?.member?.nickname ?: ""}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val createdAt = it.createdAt!!
|
val createdAt = it.createdAt!!
|
||||||
|
|
|
@ -15,7 +15,6 @@ import kr.co.vividnext.sodalive.can.use.UseCanRepository
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.AudioContent
|
import kr.co.vividnext.sodalive.content.AudioContent
|
||||||
import kr.co.vividnext.sodalive.content.order.Order
|
import kr.co.vividnext.sodalive.content.order.Order
|
||||||
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.CreatorCommunity
|
|
||||||
import kr.co.vividnext.sodalive.live.room.LiveRoom
|
import kr.co.vividnext.sodalive.live.room.LiveRoom
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.MemberRepository
|
import kr.co.vividnext.sodalive.member.MemberRepository
|
||||||
|
@ -39,7 +38,6 @@ class CanPaymentService(
|
||||||
liveRoom: LiveRoom? = null,
|
liveRoom: LiveRoom? = null,
|
||||||
order: Order? = null,
|
order: Order? = null,
|
||||||
audioContent: AudioContent? = null,
|
audioContent: AudioContent? = null,
|
||||||
communityPost: CreatorCommunity? = null,
|
|
||||||
container: String
|
container: String
|
||||||
) {
|
) {
|
||||||
val member = memberRepository.findByIdOrNull(id = memberId)
|
val member = memberRepository.findByIdOrNull(id = memberId)
|
||||||
|
@ -92,10 +90,6 @@ class CanPaymentService(
|
||||||
recipientId = liveRoom.member!!.id!!
|
recipientId = liveRoom.member!!.id!!
|
||||||
useCan.room = liveRoom
|
useCan.room = liveRoom
|
||||||
useCan.member = member
|
useCan.member = member
|
||||||
} else if (canUsage == CanUsage.PAID_COMMUNITY_POST && communityPost != null) {
|
|
||||||
recipientId = communityPost.member!!.id!!
|
|
||||||
useCan.communityPost = communityPost
|
|
||||||
useCan.member = member
|
|
||||||
} else {
|
} else {
|
||||||
throw SodaException("잘못된 요청입니다.")
|
throw SodaException("잘못된 요청입니다.")
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,5 @@ enum class CanUsage {
|
||||||
DONATION,
|
DONATION,
|
||||||
CHANGE_NICKNAME,
|
CHANGE_NICKNAME,
|
||||||
ORDER_CONTENT,
|
ORDER_CONTENT,
|
||||||
SPIN_ROULETTE,
|
SPIN_ROULETTE
|
||||||
PAID_COMMUNITY_POST
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package kr.co.vividnext.sodalive.can.use
|
||||||
import kr.co.vividnext.sodalive.common.BaseEntity
|
import kr.co.vividnext.sodalive.common.BaseEntity
|
||||||
import kr.co.vividnext.sodalive.content.AudioContent
|
import kr.co.vividnext.sodalive.content.AudioContent
|
||||||
import kr.co.vividnext.sodalive.content.order.Order
|
import kr.co.vividnext.sodalive.content.order.Order
|
||||||
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.CreatorCommunity
|
|
||||||
import kr.co.vividnext.sodalive.live.room.LiveRoom
|
import kr.co.vividnext.sodalive.live.room.LiveRoom
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import javax.persistence.CascadeType
|
import javax.persistence.CascadeType
|
||||||
|
@ -43,14 +42,10 @@ data class UseCan(
|
||||||
@JoinColumn(name = "order_id", nullable = true)
|
@JoinColumn(name = "order_id", nullable = true)
|
||||||
var order: Order? = null
|
var order: Order? = null
|
||||||
|
|
||||||
@ManyToOne(fetch = FetchType.LAZY)
|
@OneToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "content_id", nullable = true)
|
@JoinColumn(name = "content_id", nullable = true)
|
||||||
var audioContent: AudioContent? = null
|
var audioContent: AudioContent? = null
|
||||||
|
|
||||||
@ManyToOne(fetch = FetchType.LAZY)
|
|
||||||
@JoinColumn(name = "creator_community_id", nullable = true)
|
|
||||||
var communityPost: CreatorCommunity? = null
|
|
||||||
|
|
||||||
@OneToMany(mappedBy = "useCan", cascade = [CascadeType.ALL])
|
@OneToMany(mappedBy = "useCan", cascade = [CascadeType.ALL])
|
||||||
val useCanCalculates: MutableList<UseCanCalculate> = mutableListOf()
|
val useCanCalculates: MutableList<UseCanCalculate> = mutableListOf()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,28 +1,7 @@
|
||||||
package kr.co.vividnext.sodalive.can.use
|
package kr.co.vividnext.sodalive.can.use
|
||||||
|
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
|
||||||
import kr.co.vividnext.sodalive.can.use.QUseCan.useCan
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
import org.springframework.data.jpa.repository.JpaRepository
|
||||||
import org.springframework.stereotype.Repository
|
import org.springframework.stereotype.Repository
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
interface UseCanRepository : JpaRepository<UseCan, Long>, UseCanQueryRepository
|
interface UseCanRepository : JpaRepository<UseCan, Long>
|
||||||
|
|
||||||
interface UseCanQueryRepository {
|
|
||||||
fun isExistOrdered(postId: Long, memberId: Long): Boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
class UseCanQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : UseCanQueryRepository {
|
|
||||||
override fun isExistOrdered(postId: Long, memberId: Long): Boolean {
|
|
||||||
val useCanId = queryFactory.select(useCan.id)
|
|
||||||
.from(useCan)
|
|
||||||
.where(
|
|
||||||
useCan.member.id.eq(memberId)
|
|
||||||
.and(useCan.isRefund.isFalse)
|
|
||||||
.and(useCan.communityPost.id.eq(postId))
|
|
||||||
)
|
|
||||||
.fetchFirst()
|
|
||||||
|
|
||||||
return useCanId != null && useCanId > 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,6 +3,5 @@ package kr.co.vividnext.sodalive.explorer.profile.creatorCommunity
|
||||||
data class CreateCommunityPostRequest(
|
data class CreateCommunityPostRequest(
|
||||||
val content: String,
|
val content: String,
|
||||||
val isCommentAvailable: Boolean,
|
val isCommentAvailable: Boolean,
|
||||||
val isAdult: Boolean,
|
val isAdult: Boolean
|
||||||
val price: Int = 0
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package kr.co.vividnext.sodalive.explorer.profile.creatorCommunity
|
package kr.co.vividnext.sodalive.explorer.profile.creatorCommunity
|
||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.BaseEntity
|
import kr.co.vividnext.sodalive.common.BaseEntity
|
||||||
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.comment.GetCommunityPostCommentListItem
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import javax.persistence.Column
|
import javax.persistence.Column
|
||||||
import javax.persistence.Entity
|
import javax.persistence.Entity
|
||||||
|
@ -13,7 +12,6 @@ import javax.persistence.ManyToOne
|
||||||
data class CreatorCommunity(
|
data class CreatorCommunity(
|
||||||
@Column(columnDefinition = "TEXT", nullable = false)
|
@Column(columnDefinition = "TEXT", nullable = false)
|
||||||
var content: String,
|
var content: String,
|
||||||
var price: Int,
|
|
||||||
var isCommentAvailable: Boolean,
|
var isCommentAvailable: Boolean,
|
||||||
var isAdult: Boolean,
|
var isAdult: Boolean,
|
||||||
@Column(nullable = true)
|
@Column(nullable = true)
|
||||||
|
@ -23,37 +21,4 @@ data class CreatorCommunity(
|
||||||
@ManyToOne(fetch = FetchType.LAZY)
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "member_id", nullable = false)
|
@JoinColumn(name = "member_id", nullable = false)
|
||||||
var member: Member? = null
|
var member: Member? = null
|
||||||
|
|
||||||
fun toCommunityPostListResponse(
|
|
||||||
imageHost: String,
|
|
||||||
content: String,
|
|
||||||
date: String,
|
|
||||||
isLike: Boolean,
|
|
||||||
existOrdered: Boolean,
|
|
||||||
likeCount: Int,
|
|
||||||
commentCount: Int,
|
|
||||||
firstComment: GetCommunityPostCommentListItem?
|
|
||||||
): GetCommunityPostListResponse {
|
|
||||||
return GetCommunityPostListResponse(
|
|
||||||
postId = id!!,
|
|
||||||
creatorId = member!!.id!!,
|
|
||||||
creatorNickname = member!!.nickname,
|
|
||||||
creatorProfileUrl = "$imageHost/${member?.profileImage ?: "profile/default-profile.png"}",
|
|
||||||
imageUrl = if (imagePath != null) {
|
|
||||||
"$imageHost/$imagePath"
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
},
|
|
||||||
content = content,
|
|
||||||
price = price,
|
|
||||||
date = date,
|
|
||||||
isCommentAvailable = isCommentAvailable,
|
|
||||||
isAdult = false,
|
|
||||||
isLike = isLike,
|
|
||||||
existOrdered = existOrdered,
|
|
||||||
likeCount = likeCount,
|
|
||||||
commentCount = commentCount,
|
|
||||||
firstComment = firstComment
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,22 +195,4 @@ class CreatorCommunityController(private val service: CreatorCommunityService) {
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/purchase")
|
|
||||||
fun purchasePost(
|
|
||||||
@RequestBody request: PurchasePostRequest,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
|
||||||
) = run {
|
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
|
||||||
|
|
||||||
ApiResponse.ok(
|
|
||||||
service.purchasePost(
|
|
||||||
postId = request.postId,
|
|
||||||
memberId = member.id!!,
|
|
||||||
timezone = request.timezone,
|
|
||||||
isAdult = member.auth != null,
|
|
||||||
container = request.container
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,12 +20,10 @@ interface CreatorCommunityQueryRepository {
|
||||||
offset: Long,
|
offset: Long,
|
||||||
limit: Long,
|
limit: Long,
|
||||||
isAdult: Boolean
|
isAdult: Boolean
|
||||||
): List<SelectCommunityPostResponse>
|
): List<CreatorCommunity>
|
||||||
|
|
||||||
fun findByIdAndActive(postId: Long, isAdult: Boolean): CreatorCommunity?
|
fun findByIdAndActive(postId: Long, isAdult: Boolean): CreatorCommunity?
|
||||||
fun getLatestPostListFromCreatorsYouFollow(memberId: Long, isAdult: Boolean): List<SelectCommunityPostResponse>
|
fun getLatestPostListFromCreatorsYouFollow(memberId: Long, isAdult: Boolean): List<CreatorCommunity>
|
||||||
|
|
||||||
fun getCommunityPost(postId: Long, isAdult: Boolean): SelectCommunityPostResponse?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CreatorCommunityQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : CreatorCommunityQueryRepository {
|
class CreatorCommunityQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : CreatorCommunityQueryRepository {
|
||||||
|
@ -44,7 +42,7 @@ class CreatorCommunityQueryRepositoryImpl(private val queryFactory: JPAQueryFact
|
||||||
offset: Long,
|
offset: Long,
|
||||||
limit: Long,
|
limit: Long,
|
||||||
isAdult: Boolean
|
isAdult: Boolean
|
||||||
): List<SelectCommunityPostResponse> {
|
): List<CreatorCommunity> {
|
||||||
var where = creatorCommunity.member.id.eq(creatorId)
|
var where = creatorCommunity.member.id.eq(creatorId)
|
||||||
.and(creatorCommunity.isActive.isTrue)
|
.and(creatorCommunity.isActive.isTrue)
|
||||||
|
|
||||||
|
@ -53,20 +51,7 @@ class CreatorCommunityQueryRepositoryImpl(private val queryFactory: JPAQueryFact
|
||||||
}
|
}
|
||||||
|
|
||||||
return queryFactory
|
return queryFactory
|
||||||
.select(
|
.selectFrom(creatorCommunity)
|
||||||
QSelectCommunityPostResponse(
|
|
||||||
creatorCommunity.id,
|
|
||||||
creatorCommunity.member.id,
|
|
||||||
creatorCommunity.member.nickname,
|
|
||||||
creatorCommunity.member.profileImage.coalesce("profile/default_profile.png"),
|
|
||||||
creatorCommunity.imagePath,
|
|
||||||
creatorCommunity.content,
|
|
||||||
creatorCommunity.createdAt,
|
|
||||||
creatorCommunity.isCommentAvailable,
|
|
||||||
creatorCommunity.price
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.from(creatorCommunity)
|
|
||||||
.innerJoin(creatorCommunity.member, member)
|
.innerJoin(creatorCommunity.member, member)
|
||||||
.where(where)
|
.where(where)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
|
@ -89,10 +74,7 @@ class CreatorCommunityQueryRepositoryImpl(private val queryFactory: JPAQueryFact
|
||||||
.fetchFirst()
|
.fetchFirst()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getLatestPostListFromCreatorsYouFollow(
|
override fun getLatestPostListFromCreatorsYouFollow(memberId: Long, isAdult: Boolean): List<CreatorCommunity> {
|
||||||
memberId: Long,
|
|
||||||
isAdult: Boolean
|
|
||||||
): List<SelectCommunityPostResponse> {
|
|
||||||
val creatorCommunity = QCreatorCommunity.creatorCommunity
|
val creatorCommunity = QCreatorCommunity.creatorCommunity
|
||||||
val latest = QCreatorCommunity.creatorCommunity
|
val latest = QCreatorCommunity.creatorCommunity
|
||||||
|
|
||||||
|
@ -128,51 +110,10 @@ class CreatorCommunityQueryRepositoryImpl(private val queryFactory: JPAQueryFact
|
||||||
)
|
)
|
||||||
|
|
||||||
return queryFactory
|
return queryFactory
|
||||||
.select(
|
.selectFrom(creatorCommunity)
|
||||||
QSelectCommunityPostResponse(
|
|
||||||
creatorCommunity.id,
|
|
||||||
creatorCommunity.member.id,
|
|
||||||
creatorCommunity.member.nickname,
|
|
||||||
creatorCommunity.member.profileImage.coalesce("profile/default_profile.png"),
|
|
||||||
creatorCommunity.imagePath,
|
|
||||||
creatorCommunity.content,
|
|
||||||
creatorCommunity.createdAt,
|
|
||||||
creatorCommunity.isCommentAvailable,
|
|
||||||
creatorCommunity.price
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.from(creatorCommunity)
|
|
||||||
.innerJoin(creatorCommunity.member, member)
|
|
||||||
.where(where)
|
.where(where)
|
||||||
.orderBy(creatorCommunity.createdAt.desc())
|
.orderBy(creatorCommunity.createdAt.desc())
|
||||||
.limit(10)
|
.limit(10)
|
||||||
.fetch()
|
.fetch()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCommunityPost(postId: Long, isAdult: Boolean): SelectCommunityPostResponse? {
|
|
||||||
var where = creatorCommunity.id.eq(postId)
|
|
||||||
.and(creatorCommunity.isActive.isTrue)
|
|
||||||
|
|
||||||
if (!isAdult) {
|
|
||||||
where = where.and(creatorCommunity.isAdult.isFalse)
|
|
||||||
}
|
|
||||||
|
|
||||||
return queryFactory
|
|
||||||
.select(
|
|
||||||
QSelectCommunityPostResponse(
|
|
||||||
creatorCommunity.id,
|
|
||||||
creatorCommunity.member.id,
|
|
||||||
creatorCommunity.member.nickname,
|
|
||||||
creatorCommunity.member.profileImage.coalesce("profile/default_profile.png"),
|
|
||||||
creatorCommunity.imagePath,
|
|
||||||
creatorCommunity.content,
|
|
||||||
creatorCommunity.createdAt,
|
|
||||||
creatorCommunity.isCommentAvailable,
|
|
||||||
creatorCommunity.price
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.from(creatorCommunity)
|
|
||||||
.where(where)
|
|
||||||
.fetchFirst()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,6 @@ package kr.co.vividnext.sodalive.explorer.profile.creatorCommunity
|
||||||
import com.amazonaws.services.s3.model.ObjectMetadata
|
import com.amazonaws.services.s3.model.ObjectMetadata
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import kr.co.vividnext.sodalive.aws.s3.S3Uploader
|
import kr.co.vividnext.sodalive.aws.s3.S3Uploader
|
||||||
import kr.co.vividnext.sodalive.can.payment.CanPaymentService
|
|
||||||
import kr.co.vividnext.sodalive.can.use.CanUsage
|
|
||||||
import kr.co.vividnext.sodalive.can.use.UseCanRepository
|
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.comment.CreatorCommunityComment
|
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.comment.CreatorCommunityComment
|
||||||
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.comment.CreatorCommunityCommentRepository
|
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.comment.CreatorCommunityCommentRepository
|
||||||
|
@ -31,13 +28,10 @@ import java.time.LocalDateTime
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
class CreatorCommunityService(
|
class CreatorCommunityService(
|
||||||
private val canPaymentService: CanPaymentService,
|
|
||||||
|
|
||||||
private val repository: CreatorCommunityRepository,
|
private val repository: CreatorCommunityRepository,
|
||||||
private val blockMemberRepository: BlockMemberRepository,
|
private val blockMemberRepository: BlockMemberRepository,
|
||||||
private val likeRepository: CreatorCommunityLikeRepository,
|
private val likeRepository: CreatorCommunityLikeRepository,
|
||||||
private val commentRepository: CreatorCommunityCommentRepository,
|
private val commentRepository: CreatorCommunityCommentRepository,
|
||||||
private val useCanRepository: UseCanRepository,
|
|
||||||
|
|
||||||
private val s3Uploader: S3Uploader,
|
private val s3Uploader: S3Uploader,
|
||||||
private val objectMapper: ObjectMapper,
|
private val objectMapper: ObjectMapper,
|
||||||
|
@ -53,13 +47,8 @@ class CreatorCommunityService(
|
||||||
fun createCommunityPost(postImage: MultipartFile?, requestString: String, member: Member) {
|
fun createCommunityPost(postImage: MultipartFile?, requestString: String, member: Member) {
|
||||||
val request = objectMapper.readValue(requestString, CreateCommunityPostRequest::class.java)
|
val request = objectMapper.readValue(requestString, CreateCommunityPostRequest::class.java)
|
||||||
|
|
||||||
if (request.price > 0 && postImage == null) {
|
|
||||||
throw SodaException("유료 게시글 등록을 위해서는 이미지가 필요합니다.")
|
|
||||||
}
|
|
||||||
|
|
||||||
val post = CreatorCommunity(
|
val post = CreatorCommunity(
|
||||||
content = request.content,
|
content = request.content,
|
||||||
price = request.price,
|
|
||||||
isCommentAvailable = request.isCommentAvailable,
|
isCommentAvailable = request.isCommentAvailable,
|
||||||
isAdult = request.isAdult
|
isAdult = request.isAdult
|
||||||
)
|
)
|
||||||
|
@ -144,10 +133,6 @@ class CreatorCommunityService(
|
||||||
limit: Long,
|
limit: Long,
|
||||||
isAdult: Boolean
|
isAdult: Boolean
|
||||||
): List<GetCommunityPostListResponse> {
|
): List<GetCommunityPostListResponse> {
|
||||||
if (blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = creatorId)) {
|
|
||||||
return listOf()
|
|
||||||
}
|
|
||||||
|
|
||||||
val postList = repository.getCommunityPostList(
|
val postList = repository.getCommunityPostList(
|
||||||
creatorId = creatorId,
|
creatorId = creatorId,
|
||||||
offset = offset,
|
offset = offset,
|
||||||
|
@ -156,12 +141,19 @@ class CreatorCommunityService(
|
||||||
)
|
)
|
||||||
|
|
||||||
return postList
|
return postList
|
||||||
|
.asSequence()
|
||||||
|
.filter {
|
||||||
|
!blockMemberRepository.isBlocked(
|
||||||
|
blockedMemberId = memberId,
|
||||||
|
memberId = creatorId
|
||||||
|
)
|
||||||
|
}
|
||||||
.map {
|
.map {
|
||||||
val isLike = likeRepository.findByPostIdAndMemberId(postId = it.id, memberId = memberId)?.isActive
|
val isLike =
|
||||||
?: false
|
likeRepository.findByPostIdAndMemberId(postId = it.id!!, memberId = memberId)?.isActive ?: false
|
||||||
val likeCount = likeRepository.totalCountCommunityPostLikeByPostId(it.id)
|
val likeCount = likeRepository.totalCountCommunityPostLikeByPostId(it.id!!)
|
||||||
val commentCount = if (it.isCommentAvailable) {
|
val commentCount = if (it.isCommentAvailable) {
|
||||||
commentRepository.totalCountCommentByPostId(postId = it.id)
|
commentRepository.totalCountCommentByPostId(postId = it.id!!)
|
||||||
} else {
|
} else {
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
@ -169,7 +161,7 @@ class CreatorCommunityService(
|
||||||
commentRepository.findByPostId(
|
commentRepository.findByPostId(
|
||||||
cloudFrontHost = imageHost,
|
cloudFrontHost = imageHost,
|
||||||
timezone = timezone,
|
timezone = timezone,
|
||||||
id = it.id,
|
id = it.id!!,
|
||||||
offset = 0,
|
offset = 0,
|
||||||
limit = 1
|
limit = 1
|
||||||
)
|
)
|
||||||
|
@ -183,33 +175,31 @@ class CreatorCommunityService(
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
val existOrdered = useCanRepository.isExistOrdered(postId = it.id, memberId = memberId)
|
GetCommunityPostListResponse(
|
||||||
|
postId = it.id!!,
|
||||||
val content = if (it.price > 0 && memberId != it.creatorId) {
|
creatorId = it.member!!.id!!,
|
||||||
if (existOrdered) {
|
creatorNickname = it.member!!.nickname,
|
||||||
it.content
|
creatorProfileUrl = if (it.member!!.profileImage != null) {
|
||||||
|
"$imageHost/${it.member!!.profileImage}"
|
||||||
} else {
|
} else {
|
||||||
it.content.substring(0, 5).plus("...")
|
"$imageHost/profile/default-profile.png"
|
||||||
}
|
|
||||||
} else {
|
|
||||||
it.content
|
|
||||||
}
|
|
||||||
|
|
||||||
it.toCommunityPostListResponse(
|
|
||||||
imageHost = imageHost,
|
|
||||||
content = content,
|
|
||||||
date = getTimeAgoString(it.date),
|
|
||||||
isLike = isLike,
|
|
||||||
existOrdered = if (memberId == it.creatorId) {
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
existOrdered
|
|
||||||
},
|
},
|
||||||
|
imageUrl = if (it.imagePath != null) {
|
||||||
|
"$imageHost/${it.imagePath!!}"
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
},
|
||||||
|
content = it.content,
|
||||||
|
date = getTimeAgoString(it.createdAt!!),
|
||||||
|
isCommentAvailable = it.isCommentAvailable,
|
||||||
|
isAdult = it.isAdult,
|
||||||
|
isLike = isLike,
|
||||||
likeCount = likeCount,
|
likeCount = likeCount,
|
||||||
commentCount = commentCount,
|
commentCount = commentCount,
|
||||||
firstComment = firstComment
|
firstComment = firstComment
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCommunityPostDetail(
|
fun getCommunityPostDetail(
|
||||||
|
@ -218,16 +208,16 @@ class CreatorCommunityService(
|
||||||
timezone: String,
|
timezone: String,
|
||||||
isAdult: Boolean
|
isAdult: Boolean
|
||||||
): GetCommunityPostListResponse {
|
): GetCommunityPostListResponse {
|
||||||
val post = repository.getCommunityPost(postId, isAdult = isAdult)
|
val post = repository.findByIdAndActive(postId, isAdult = isAdult)
|
||||||
?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
|
?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
|
||||||
|
|
||||||
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = post.creatorId)
|
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = post.member!!.id!!)
|
||||||
if (isBlocked) throw SodaException("${post.creatorNickname}님의 요청으로 접근이 제한됩니다.")
|
if (isBlocked) throw SodaException("${post.member!!.nickname}님의 요청으로 접근이 제한됩니다.")
|
||||||
|
|
||||||
val isLike = likeRepository.findByPostIdAndMemberId(postId = post.id, memberId = memberId)?.isActive ?: false
|
val isLike = likeRepository.findByPostIdAndMemberId(postId = post.id!!, memberId = memberId)?.isActive ?: false
|
||||||
val likeCount = likeRepository.totalCountCommunityPostLikeByPostId(post.id)
|
val likeCount = likeRepository.totalCountCommunityPostLikeByPostId(post.id!!)
|
||||||
val commentCount = if (post.isCommentAvailable) {
|
val commentCount = if (post.isCommentAvailable) {
|
||||||
commentRepository.totalCountCommentByPostId(postId = post.id)
|
commentRepository.totalCountCommentByPostId(postId = post.id!!)
|
||||||
} else {
|
} else {
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
@ -235,7 +225,7 @@ class CreatorCommunityService(
|
||||||
commentRepository.findByPostId(
|
commentRepository.findByPostId(
|
||||||
cloudFrontHost = imageHost,
|
cloudFrontHost = imageHost,
|
||||||
timezone = timezone,
|
timezone = timezone,
|
||||||
id = post.id,
|
id = post.id!!,
|
||||||
offset = 0,
|
offset = 0,
|
||||||
limit = 1
|
limit = 1
|
||||||
)
|
)
|
||||||
|
@ -249,28 +239,25 @@ class CreatorCommunityService(
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
val existOrdered = useCanRepository.isExistOrdered(postId = post.id, memberId = memberId)
|
return GetCommunityPostListResponse(
|
||||||
|
postId = post.id!!,
|
||||||
val content = if (post.price > 0 && memberId != post.creatorId) {
|
creatorId = post.member!!.id!!,
|
||||||
if (existOrdered) {
|
creatorNickname = post.member!!.nickname,
|
||||||
post.content
|
creatorProfileUrl = if (post.member!!.profileImage != null) {
|
||||||
|
"$imageHost/${post.member!!.profileImage}"
|
||||||
} else {
|
} else {
|
||||||
post.content.substring(0, 5).plus("...")
|
"$imageHost/profile/default-profile.png"
|
||||||
}
|
|
||||||
} else {
|
|
||||||
post.content
|
|
||||||
}
|
|
||||||
|
|
||||||
return post.toCommunityPostListResponse(
|
|
||||||
imageHost = imageHost,
|
|
||||||
content = content,
|
|
||||||
date = getTimeAgoString(post.date),
|
|
||||||
isLike = isLike,
|
|
||||||
existOrdered = if (memberId == post.creatorId) {
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
existOrdered
|
|
||||||
},
|
},
|
||||||
|
imageUrl = if (post.imagePath != null) {
|
||||||
|
"$imageHost/${post.imagePath!!}"
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
},
|
||||||
|
content = post.content,
|
||||||
|
date = getTimeAgoString(post.createdAt!!),
|
||||||
|
isCommentAvailable = post.isCommentAvailable,
|
||||||
|
isAdult = post.isAdult,
|
||||||
|
isLike = isLike,
|
||||||
likeCount = likeCount,
|
likeCount = likeCount,
|
||||||
commentCount = commentCount,
|
commentCount = commentCount,
|
||||||
firstComment = firstComment
|
firstComment = firstComment
|
||||||
|
@ -396,10 +383,11 @@ class CreatorCommunityService(
|
||||||
val postList = repository.getLatestPostListFromCreatorsYouFollow(memberId = memberId, isAdult = isAdult)
|
val postList = repository.getLatestPostListFromCreatorsYouFollow(memberId = memberId, isAdult = isAdult)
|
||||||
|
|
||||||
return postList
|
return postList
|
||||||
|
.asSequence()
|
||||||
.filter {
|
.filter {
|
||||||
!blockMemberRepository.isBlocked(
|
!blockMemberRepository.isBlocked(
|
||||||
blockedMemberId = memberId,
|
blockedMemberId = memberId,
|
||||||
memberId = it.creatorId
|
memberId = it.member!!.id!!
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
.map {
|
.map {
|
||||||
|
@ -415,7 +403,7 @@ class CreatorCommunityService(
|
||||||
commentRepository.findByPostId(
|
commentRepository.findByPostId(
|
||||||
cloudFrontHost = imageHost,
|
cloudFrontHost = imageHost,
|
||||||
timezone = timezone,
|
timezone = timezone,
|
||||||
id = it.id,
|
id = it.id!!,
|
||||||
offset = 0,
|
offset = 0,
|
||||||
limit = 1
|
limit = 1
|
||||||
)
|
)
|
||||||
|
@ -429,95 +417,30 @@ class CreatorCommunityService(
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
val existOrdered = useCanRepository.isExistOrdered(postId = it.id, memberId = memberId)
|
GetCommunityPostListResponse(
|
||||||
|
postId = it.id!!,
|
||||||
val content = if (it.price > 0 && memberId != it.creatorId) {
|
creatorId = it.member!!.id!!,
|
||||||
if (existOrdered) {
|
creatorNickname = it.member!!.nickname,
|
||||||
it.content
|
creatorProfileUrl = if (it.member!!.profileImage != null) {
|
||||||
|
"$imageHost/${it.member!!.profileImage}"
|
||||||
} else {
|
} else {
|
||||||
it.content.substring(0, 5).plus("...")
|
"$imageHost/profile/default-profile.png"
|
||||||
}
|
|
||||||
} else {
|
|
||||||
it.content
|
|
||||||
}
|
|
||||||
|
|
||||||
it.toCommunityPostListResponse(
|
|
||||||
imageHost = imageHost,
|
|
||||||
content = content,
|
|
||||||
date = getTimeAgoString(it.date),
|
|
||||||
isLike = isLike,
|
|
||||||
existOrdered = if (memberId == it.creatorId) {
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
existOrdered
|
|
||||||
},
|
},
|
||||||
|
imageUrl = if (it.imagePath != null) {
|
||||||
|
"$imageHost/${it.imagePath!!}"
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
},
|
||||||
|
content = it.content,
|
||||||
|
date = getTimeAgoString(it.createdAt!!),
|
||||||
|
isCommentAvailable = it.isCommentAvailable,
|
||||||
|
isAdult = it.isAdult,
|
||||||
|
isLike = isLike,
|
||||||
likeCount = likeCount,
|
likeCount = likeCount,
|
||||||
commentCount = commentCount,
|
commentCount = commentCount,
|
||||||
firstComment = firstComment
|
firstComment = firstComment
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
.toList()
|
||||||
|
|
||||||
@Transactional
|
|
||||||
fun purchasePost(
|
|
||||||
postId: Long,
|
|
||||||
memberId: Long,
|
|
||||||
timezone: String,
|
|
||||||
isAdult: Boolean,
|
|
||||||
container: String
|
|
||||||
): GetCommunityPostListResponse {
|
|
||||||
val post = repository.findByIdAndActive(postId, isAdult)
|
|
||||||
?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
|
|
||||||
|
|
||||||
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = post.member!!.id!!)
|
|
||||||
if (isBlocked) throw SodaException("${post.member!!.nickname}님의 요청으로 접근이 제한됩니다.")
|
|
||||||
|
|
||||||
val existOrdered = useCanRepository.isExistOrdered(postId = postId, memberId = memberId)
|
|
||||||
|
|
||||||
if (!existOrdered) {
|
|
||||||
canPaymentService.spendCan(
|
|
||||||
memberId = memberId,
|
|
||||||
needCan = post.price,
|
|
||||||
canUsage = CanUsage.PAID_COMMUNITY_POST,
|
|
||||||
communityPost = post,
|
|
||||||
container = container
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val isLike = likeRepository.findByPostIdAndMemberId(postId = post.id!!, memberId = memberId)?.isActive ?: false
|
|
||||||
val likeCount = likeRepository.totalCountCommunityPostLikeByPostId(post.id!!)
|
|
||||||
val commentCount = if (post.isCommentAvailable) {
|
|
||||||
commentRepository.totalCountCommentByPostId(postId = post.id!!)
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
}
|
|
||||||
val commentList = if (post.isCommentAvailable) {
|
|
||||||
commentRepository.findByPostId(
|
|
||||||
cloudFrontHost = imageHost,
|
|
||||||
timezone = timezone,
|
|
||||||
id = post.id!!,
|
|
||||||
offset = 0,
|
|
||||||
limit = 1
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
listOf()
|
|
||||||
}
|
|
||||||
|
|
||||||
val firstComment = if (post.isCommentAvailable && commentList.isNotEmpty()) {
|
|
||||||
commentList[0]
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
|
|
||||||
return post.toCommunityPostListResponse(
|
|
||||||
imageHost = imageHost,
|
|
||||||
content = post.content,
|
|
||||||
date = getTimeAgoString(post.createdAt!!),
|
|
||||||
isLike = isLike,
|
|
||||||
existOrdered = true,
|
|
||||||
likeCount = likeCount,
|
|
||||||
commentCount = commentCount,
|
|
||||||
firstComment = firstComment
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,12 +10,10 @@ data class GetCommunityPostListResponse @QueryProjection constructor(
|
||||||
val creatorProfileUrl: String,
|
val creatorProfileUrl: String,
|
||||||
val imageUrl: String?,
|
val imageUrl: String?,
|
||||||
val content: String,
|
val content: String,
|
||||||
val price: Int,
|
|
||||||
val date: String,
|
val date: String,
|
||||||
val isCommentAvailable: Boolean,
|
val isCommentAvailable: Boolean,
|
||||||
val isAdult: Boolean,
|
val isAdult: Boolean,
|
||||||
val isLike: Boolean,
|
val isLike: Boolean,
|
||||||
val existOrdered: Boolean,
|
|
||||||
val likeCount: Int,
|
val likeCount: Int,
|
||||||
val commentCount: Int,
|
val commentCount: Int,
|
||||||
val firstComment: GetCommunityPostCommentListItem?
|
val firstComment: GetCommunityPostCommentListItem?
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.explorer.profile.creatorCommunity
|
|
||||||
|
|
||||||
data class PurchasePostRequest(val postId: Long, val timezone: String, val container: String)
|
|
|
@ -1,50 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.explorer.profile.creatorCommunity
|
|
||||||
|
|
||||||
import com.querydsl.core.annotations.QueryProjection
|
|
||||||
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.comment.GetCommunityPostCommentListItem
|
|
||||||
import java.time.LocalDateTime
|
|
||||||
|
|
||||||
data class SelectCommunityPostResponse @QueryProjection constructor(
|
|
||||||
val id: Long,
|
|
||||||
val creatorId: Long,
|
|
||||||
val creatorNickname: String,
|
|
||||||
val creatorProfileUrl: String,
|
|
||||||
val imagePath: String?,
|
|
||||||
val content: String,
|
|
||||||
val date: LocalDateTime,
|
|
||||||
val isCommentAvailable: Boolean,
|
|
||||||
val price: Int
|
|
||||||
) {
|
|
||||||
fun toCommunityPostListResponse(
|
|
||||||
imageHost: String,
|
|
||||||
content: String,
|
|
||||||
date: String,
|
|
||||||
isLike: Boolean,
|
|
||||||
existOrdered: Boolean,
|
|
||||||
likeCount: Int,
|
|
||||||
commentCount: Int,
|
|
||||||
firstComment: GetCommunityPostCommentListItem?
|
|
||||||
): GetCommunityPostListResponse {
|
|
||||||
return GetCommunityPostListResponse(
|
|
||||||
postId = id,
|
|
||||||
creatorId = creatorId,
|
|
||||||
creatorNickname = creatorNickname,
|
|
||||||
creatorProfileUrl = "$imageHost/$creatorProfileUrl",
|
|
||||||
imageUrl = if (imagePath != null) {
|
|
||||||
"$imageHost/$imagePath"
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
},
|
|
||||||
content = content,
|
|
||||||
price = price,
|
|
||||||
date = date,
|
|
||||||
isCommentAvailable = isCommentAvailable,
|
|
||||||
isAdult = false,
|
|
||||||
isLike = isLike,
|
|
||||||
existOrdered = existOrdered,
|
|
||||||
likeCount = likeCount,
|
|
||||||
commentCount = commentCount,
|
|
||||||
firstComment = firstComment
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue