diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberController.kt index 436e23f..7070169 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberController.kt @@ -4,6 +4,7 @@ import kr.co.vividnext.sodalive.common.ApiResponse import org.springframework.data.domain.Pageable import org.springframework.security.access.prepost.PreAuthorize 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.RequestBody import org.springframework.web.bind.annotation.RequestMapping @@ -14,6 +15,12 @@ import org.springframework.web.bind.annotation.RestController @RequestMapping("/admin/member") @PreAuthorize("hasRole('ADMIN')") class AdminMemberController(private val service: AdminMemberService) { + @PostMapping("/password/reset") + fun resetPassword(@RequestBody request: ResetPasswordRequest) = ApiResponse.ok( + service.resetPassword(request = request), + "비밀번호가 초기화 되었습니다." + ) + @PutMapping fun updateMember(@RequestBody request: UpdateMemberRequest) = ApiResponse.ok( service.updateMember(request = request), diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberRepository.kt index 4b1a2ed..538259b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberRepository.kt @@ -15,6 +15,7 @@ interface AdminMemberQueryRepository { fun searchMemberTotalCount(searchWord: String, role: MemberRole? = null): Int fun getCreatorAllList(): List + fun findByIdAndActive(memberId: Long): Member? } class AdminMemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : AdminMemberQueryRepository { @@ -109,4 +110,15 @@ class AdminMemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) ) .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() + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberService.kt index 8b81fbc..7cccc74 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/AdminMemberService.kt @@ -6,6 +6,7 @@ import kr.co.vividnext.sodalive.member.MemberRole import org.springframework.beans.factory.annotation.Value import org.springframework.data.domain.Pageable import org.springframework.data.repository.findByIdOrNull +import org.springframework.security.crypto.password.PasswordEncoder import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import java.time.ZoneId @@ -14,6 +15,7 @@ import java.time.format.DateTimeFormatter @Service class AdminMemberService( private val repository: AdminMemberRepository, + private val passwordEncoder: PasswordEncoder, @Value("\${cloud.aws.cloud-front.host}") private val cloudFrontHost: String @@ -133,4 +135,12 @@ class AdminMemberService( fun getCreatorAllList(): List { 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]) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/ResetPasswordRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/ResetPasswordRequest.kt new file mode 100644 index 0000000..009df01 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/ResetPasswordRequest.kt @@ -0,0 +1,3 @@ +package kr.co.vividnext.sodalive.admin.member + +data class ResetPasswordRequest(val memberId: Long) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/event/ChargeEventService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/event/ChargeEventService.kt index 7a8ff3e..ba53b6e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/event/ChargeEventService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/event/ChargeEventService.kt @@ -89,7 +89,7 @@ class ChargeEventService( } private fun applyFirstChargeEvent(charge: Charge, member: Member) { - val additionalCan = ceil(charge.chargeCan * 0.2).toInt() + val additionalCan = ceil(charge.chargeCan * 0.15).toInt() applyEvent( additionalCan = additionalCan, member = member, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt index 3287f3e..0f147df 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt @@ -19,7 +19,11 @@ class LiveRecommendRepository( @Value("\${cloud.aws.cloud-front.host}") private val cloudFrontHost: String ) { - fun getRecommendLive(memberId: Long, isAdult: Boolean): List { + fun getRecommendLive( + memberId: Long, + isBlocked: (Long) -> Boolean, + isAdult: Boolean + ): List { val dateNow = LocalDateTime.now() var where = recommendLiveCreatorBanner.startDate.loe(dateNow) @@ -41,6 +45,9 @@ class LiveRecommendRepository( .where(where) .orderBy(recommendLiveCreatorBanner.orders.asc()) .fetch() + .asSequence() + .filter { !isBlocked(it.creatorId) } + .toList() } fun getOnAirRecommendChannelList( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt index a842415..1c6e486 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt @@ -14,6 +14,7 @@ class LiveRecommendService( fun getRecommendLive(member: Member): List { return repository.getRecommendLive( memberId = member.id!!, + isBlocked = { blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) }, isAdult = member.auth != null ) }