feat(recommend): 추천 크리에이터 동시 팔로우 서비스를 추가한다
This commit is contained in:
@@ -6,9 +6,19 @@ import javax.persistence.Entity
|
||||
import javax.persistence.FetchType
|
||||
import javax.persistence.JoinColumn
|
||||
import javax.persistence.ManyToOne
|
||||
import javax.persistence.Table
|
||||
import javax.persistence.UniqueConstraint
|
||||
|
||||
@Entity
|
||||
data class CreatorFollowing(
|
||||
@Table(
|
||||
uniqueConstraints = [
|
||||
UniqueConstraint(
|
||||
name = "uk_creator_following_member_creator",
|
||||
columnNames = ["member_id", "creator_id"]
|
||||
)
|
||||
]
|
||||
)
|
||||
class CreatorFollowing(
|
||||
var isNotify: Boolean = true,
|
||||
var isActive: Boolean = true
|
||||
) : BaseEntity() {
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package kr.co.vividnext.sodalive.v2.recommend.application
|
||||
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.MemberRepository
|
||||
import kr.co.vividnext.sodalive.member.following.CreatorFollowing
|
||||
import kr.co.vividnext.sodalive.member.following.CreatorFollowingRepository
|
||||
import org.springframework.stereotype.Service
|
||||
import org.springframework.transaction.annotation.Transactional
|
||||
|
||||
@Service
|
||||
class RecommendedCreatorFollowService(
|
||||
private val memberRepository: MemberRepository,
|
||||
private val creatorFollowingRepository: CreatorFollowingRepository
|
||||
) {
|
||||
@Transactional
|
||||
fun followCreators(member: Member, creatorIds: List<Long>) {
|
||||
val distinctCreatorIds = creatorIds.distinct()
|
||||
val creatorById = distinctCreatorIds
|
||||
.filter { it != member.id }
|
||||
.associateWith { creatorId ->
|
||||
memberRepository.findCreatorByIdOrNull(creatorId)
|
||||
?: throw SodaException(messageKey = "member.validation.creator_not_found")
|
||||
}
|
||||
|
||||
distinctCreatorIds.forEach { creatorId ->
|
||||
if (creatorId == member.id) {
|
||||
return@forEach
|
||||
}
|
||||
|
||||
val existingFollowing = creatorFollowingRepository.findByCreatorIdAndMemberId(
|
||||
creatorId = creatorId,
|
||||
memberId = member.id!!
|
||||
)
|
||||
if (existingFollowing != null) {
|
||||
if (!existingFollowing.isActive) {
|
||||
existingFollowing.isNotify = true
|
||||
existingFollowing.isActive = true
|
||||
}
|
||||
return@forEach
|
||||
}
|
||||
|
||||
creatorFollowingRepository.save(
|
||||
CreatorFollowing().apply {
|
||||
this.member = member
|
||||
creator = creatorById.getValue(creatorId)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user