feat(admin-member): 관리자 사용자 차단 기능을 추가한다
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
package kr.co.vividnext.sodalive.admin.member
|
||||||
|
|
||||||
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping
|
||||||
|
import org.springframework.web.bind.annotation.RestController
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/admin/member/block")
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
class AdminMemberBlockController(private val service: AdminMemberBlockService) {
|
||||||
|
@PostMapping
|
||||||
|
fun blockMember(@RequestBody request: AdminMemberBlockRequest) = ApiResponse.ok(
|
||||||
|
service.blockMember(request),
|
||||||
|
"차단되었습니다."
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package kr.co.vividnext.sodalive.admin.member
|
||||||
|
|
||||||
|
data class AdminMemberBlockRequest(
|
||||||
|
val memberId: Long,
|
||||||
|
val reason: String
|
||||||
|
)
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
package kr.co.vividnext.sodalive.admin.member
|
||||||
|
|
||||||
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
|
import kr.co.vividnext.sodalive.member.MemberService
|
||||||
|
import kr.co.vividnext.sodalive.member.SignOut
|
||||||
|
import kr.co.vividnext.sodalive.member.SignOutRepository
|
||||||
|
import kr.co.vividnext.sodalive.member.auth.AuthRepository
|
||||||
|
import kr.co.vividnext.sodalive.member.auth.BlockAuth
|
||||||
|
import kr.co.vividnext.sodalive.member.auth.BlockAuthRepository
|
||||||
|
import org.springframework.stereotype.Service
|
||||||
|
import org.springframework.transaction.annotation.Transactional
|
||||||
|
|
||||||
|
@Service
|
||||||
|
class AdminMemberBlockService(
|
||||||
|
private val adminMemberRepository: AdminMemberRepository,
|
||||||
|
private val signOutRepository: SignOutRepository,
|
||||||
|
private val memberService: MemberService,
|
||||||
|
private val authRepository: AuthRepository,
|
||||||
|
private val blockAuthRepository: BlockAuthRepository
|
||||||
|
) {
|
||||||
|
@Transactional
|
||||||
|
fun blockMember(request: AdminMemberBlockRequest) {
|
||||||
|
if (request.reason.isBlank()) {
|
||||||
|
throw SodaException(messageKey = "member.validation.signout_reason_required")
|
||||||
|
}
|
||||||
|
|
||||||
|
val member = adminMemberRepository.findByIdAndActive(memberId = request.memberId)
|
||||||
|
?: throw SodaException(messageKey = "admin.member.not_found")
|
||||||
|
|
||||||
|
val auth = member.auth
|
||||||
|
val memberIdsToBlock = if (auth != null) {
|
||||||
|
authRepository.getActiveMemberIdsByNameAndBirthAndDiAndUniqueCi(
|
||||||
|
name = auth.name,
|
||||||
|
birth = auth.birth,
|
||||||
|
di = auth.di,
|
||||||
|
uniqueCi = auth.uniqueCi
|
||||||
|
)
|
||||||
|
.ifEmpty { listOf(member.id!!) }
|
||||||
|
} else {
|
||||||
|
listOf(member.id!!)
|
||||||
|
}
|
||||||
|
|
||||||
|
memberIdsToBlock
|
||||||
|
.distinct()
|
||||||
|
.forEach { memberId ->
|
||||||
|
val targetMember = adminMemberRepository.findByIdAndActive(memberId = memberId)
|
||||||
|
?: return@forEach
|
||||||
|
|
||||||
|
targetMember.isActive = false
|
||||||
|
targetMember.nickname = "deleted_${targetMember.nickname}"
|
||||||
|
|
||||||
|
val signOut = SignOut(reason = request.reason)
|
||||||
|
signOut.member = targetMember
|
||||||
|
signOutRepository.save(signOut)
|
||||||
|
|
||||||
|
memberService.logoutAll(memberId = targetMember.id!!)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (auth == null) return
|
||||||
|
val alreadyBlockedAuthId = blockAuthRepository.findByUniqueCiAndDi(auth.uniqueCi, auth.di)
|
||||||
|
if (alreadyBlockedAuthId == null || alreadyBlockedAuthId <= 0) {
|
||||||
|
blockAuthRepository.save(
|
||||||
|
BlockAuth(
|
||||||
|
name = auth.name,
|
||||||
|
birth = auth.birth,
|
||||||
|
uniqueCi = auth.uniqueCi,
|
||||||
|
di = auth.di,
|
||||||
|
gender = auth.gender
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user