관리자 - 유저 비밀번호 초기화 기능 추가

This commit is contained in:
Klaus 2023-08-30 21:53:45 +09:00
parent 57426b5b5b
commit 41fe37bdb2
4 changed files with 32 additions and 0 deletions

View File

@ -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),

View File

@ -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()
}
}

View File

@ -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])
}
}

View File

@ -0,0 +1,3 @@
package kr.co.vividnext.sodalive.admin.member
data class ResetPasswordRequest(val memberId: Long)