test #27
|
@ -4,6 +4,7 @@ import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import org.springframework.data.domain.Pageable
|
import org.springframework.data.domain.Pageable
|
||||||
import org.springframework.security.access.prepost.PreAuthorize
|
import org.springframework.security.access.prepost.PreAuthorize
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping
|
||||||
import org.springframework.web.bind.annotation.PutMapping
|
import org.springframework.web.bind.annotation.PutMapping
|
||||||
import org.springframework.web.bind.annotation.RequestBody
|
import org.springframework.web.bind.annotation.RequestBody
|
||||||
import org.springframework.web.bind.annotation.RequestMapping
|
import org.springframework.web.bind.annotation.RequestMapping
|
||||||
|
@ -14,6 +15,12 @@ import org.springframework.web.bind.annotation.RestController
|
||||||
@RequestMapping("/admin/member")
|
@RequestMapping("/admin/member")
|
||||||
@PreAuthorize("hasRole('ADMIN')")
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
class AdminMemberController(private val service: AdminMemberService) {
|
class AdminMemberController(private val service: AdminMemberService) {
|
||||||
|
@PostMapping("/password/reset")
|
||||||
|
fun resetPassword(@RequestBody request: ResetPasswordRequest) = ApiResponse.ok(
|
||||||
|
service.resetPassword(request = request),
|
||||||
|
"비밀번호가 초기화 되었습니다."
|
||||||
|
)
|
||||||
|
|
||||||
@PutMapping
|
@PutMapping
|
||||||
fun updateMember(@RequestBody request: UpdateMemberRequest) = ApiResponse.ok(
|
fun updateMember(@RequestBody request: UpdateMemberRequest) = ApiResponse.ok(
|
||||||
service.updateMember(request = request),
|
service.updateMember(request = request),
|
||||||
|
|
|
@ -15,6 +15,7 @@ interface AdminMemberQueryRepository {
|
||||||
|
|
||||||
fun searchMemberTotalCount(searchWord: String, role: MemberRole? = null): Int
|
fun searchMemberTotalCount(searchWord: String, role: MemberRole? = null): Int
|
||||||
fun getCreatorAllList(): List<GetAdminCreatorAllListResponse>
|
fun getCreatorAllList(): List<GetAdminCreatorAllListResponse>
|
||||||
|
fun findByIdAndActive(memberId: Long): Member?
|
||||||
}
|
}
|
||||||
|
|
||||||
class AdminMemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : AdminMemberQueryRepository {
|
class AdminMemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : AdminMemberQueryRepository {
|
||||||
|
@ -109,4 +110,15 @@ class AdminMemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory)
|
||||||
)
|
)
|
||||||
.fetch()
|
.fetch()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun findByIdAndActive(memberId: Long): Member? {
|
||||||
|
return queryFactory
|
||||||
|
.selectFrom(member)
|
||||||
|
.where(
|
||||||
|
member.id.eq(memberId)
|
||||||
|
.and(member.isActive.isTrue)
|
||||||
|
)
|
||||||
|
.orderBy(member.id.desc())
|
||||||
|
.fetchFirst()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import kr.co.vividnext.sodalive.member.MemberRole
|
||||||
import org.springframework.beans.factory.annotation.Value
|
import org.springframework.beans.factory.annotation.Value
|
||||||
import org.springframework.data.domain.Pageable
|
import org.springframework.data.domain.Pageable
|
||||||
import org.springframework.data.repository.findByIdOrNull
|
import org.springframework.data.repository.findByIdOrNull
|
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
import org.springframework.transaction.annotation.Transactional
|
import org.springframework.transaction.annotation.Transactional
|
||||||
import java.time.ZoneId
|
import java.time.ZoneId
|
||||||
|
@ -14,6 +15,7 @@ import java.time.format.DateTimeFormatter
|
||||||
@Service
|
@Service
|
||||||
class AdminMemberService(
|
class AdminMemberService(
|
||||||
private val repository: AdminMemberRepository,
|
private val repository: AdminMemberRepository,
|
||||||
|
private val passwordEncoder: PasswordEncoder,
|
||||||
|
|
||||||
@Value("\${cloud.aws.cloud-front.host}")
|
@Value("\${cloud.aws.cloud-front.host}")
|
||||||
private val cloudFrontHost: String
|
private val cloudFrontHost: String
|
||||||
|
@ -133,4 +135,12 @@ class AdminMemberService(
|
||||||
fun getCreatorAllList(): List<GetAdminCreatorAllListResponse> {
|
fun getCreatorAllList(): List<GetAdminCreatorAllListResponse> {
|
||||||
return repository.getCreatorAllList()
|
return repository.getCreatorAllList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
fun resetPassword(request: ResetPasswordRequest) {
|
||||||
|
val member = repository.findByIdAndActive(memberId = request.memberId)
|
||||||
|
?: throw SodaException("잘못된 회원정보입니다.\n다시 시도해 주세요.")
|
||||||
|
|
||||||
|
member.password = passwordEncoder.encode(member.email.split("@")[0])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
package kr.co.vividnext.sodalive.admin.member
|
||||||
|
|
||||||
|
data class ResetPasswordRequest(val memberId: Long)
|
|
@ -89,7 +89,7 @@ class ChargeEventService(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun applyFirstChargeEvent(charge: Charge, member: Member) {
|
private fun applyFirstChargeEvent(charge: Charge, member: Member) {
|
||||||
val additionalCan = ceil(charge.chargeCan * 0.2).toInt()
|
val additionalCan = ceil(charge.chargeCan * 0.15).toInt()
|
||||||
applyEvent(
|
applyEvent(
|
||||||
additionalCan = additionalCan,
|
additionalCan = additionalCan,
|
||||||
member = member,
|
member = member,
|
||||||
|
|
|
@ -19,7 +19,11 @@ class LiveRecommendRepository(
|
||||||
@Value("\${cloud.aws.cloud-front.host}")
|
@Value("\${cloud.aws.cloud-front.host}")
|
||||||
private val cloudFrontHost: String
|
private val cloudFrontHost: String
|
||||||
) {
|
) {
|
||||||
fun getRecommendLive(memberId: Long, isAdult: Boolean): List<GetRecommendLiveResponse> {
|
fun getRecommendLive(
|
||||||
|
memberId: Long,
|
||||||
|
isBlocked: (Long) -> Boolean,
|
||||||
|
isAdult: Boolean
|
||||||
|
): List<GetRecommendLiveResponse> {
|
||||||
val dateNow = LocalDateTime.now()
|
val dateNow = LocalDateTime.now()
|
||||||
|
|
||||||
var where = recommendLiveCreatorBanner.startDate.loe(dateNow)
|
var where = recommendLiveCreatorBanner.startDate.loe(dateNow)
|
||||||
|
@ -41,6 +45,9 @@ class LiveRecommendRepository(
|
||||||
.where(where)
|
.where(where)
|
||||||
.orderBy(recommendLiveCreatorBanner.orders.asc())
|
.orderBy(recommendLiveCreatorBanner.orders.asc())
|
||||||
.fetch()
|
.fetch()
|
||||||
|
.asSequence()
|
||||||
|
.filter { !isBlocked(it.creatorId) }
|
||||||
|
.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getOnAirRecommendChannelList(
|
fun getOnAirRecommendChannelList(
|
||||||
|
|
|
@ -14,6 +14,7 @@ class LiveRecommendService(
|
||||||
fun getRecommendLive(member: Member): List<GetRecommendLiveResponse> {
|
fun getRecommendLive(member: Member): List<GetRecommendLiveResponse> {
|
||||||
return repository.getRecommendLive(
|
return repository.getRecommendLive(
|
||||||
memberId = member.id!!,
|
memberId = member.id!!,
|
||||||
|
isBlocked = { blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) },
|
||||||
isAdult = member.auth != null
|
isAdult = member.auth != null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue