| @@ -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), | ||||
|   | ||||
| @@ -15,6 +15,7 @@ interface AdminMemberQueryRepository { | ||||
|  | ||||
|     fun searchMemberTotalCount(searchWord: String, role: MemberRole? = null): Int | ||||
|     fun getCreatorAllList(): List<GetAdminCreatorAllListResponse> | ||||
|     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() | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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<GetAdminCreatorAllListResponse> { | ||||
|         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) { | ||||
|         val additionalCan = ceil(charge.chargeCan * 0.2).toInt() | ||||
|         val additionalCan = ceil(charge.chargeCan * 0.15).toInt() | ||||
|         applyEvent( | ||||
|             additionalCan = additionalCan, | ||||
|             member = member, | ||||
|   | ||||
| @@ -19,7 +19,11 @@ class LiveRecommendRepository( | ||||
|     @Value("\${cloud.aws.cloud-front.host}") | ||||
|     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() | ||||
|  | ||||
|         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( | ||||
|   | ||||
| @@ -14,6 +14,7 @@ class LiveRecommendService( | ||||
|     fun getRecommendLive(member: Member): List<GetRecommendLiveResponse> { | ||||
|         return repository.getRecommendLive( | ||||
|             memberId = member.id!!, | ||||
|             isBlocked = { blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) }, | ||||
|             isAdult = member.auth != null | ||||
|         ) | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user