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)