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)
|
Loading…
Reference in New Issue