목록/역할 변경/상태 변경/삭제. 본인 계정 변경·삭제 차단. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
67 lines
2.3 KiB
Java
67 lines
2.3 KiB
Java
package com.sb.web.admin.service;
|
|
|
|
import com.sb.web.auth.domain.Member;
|
|
import com.sb.web.auth.dto.MemberAdminResponse;
|
|
import com.sb.web.auth.mapper.MemberMapper;
|
|
import com.sb.web.common.exception.ApiException;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* 관리자용 회원 관리 서비스. (목록/역할/상태/삭제)
|
|
* 본인 계정에 대한 역할·상태·삭제는 잠금 방지를 위해 차단한다.
|
|
*/
|
|
@Service
|
|
@RequiredArgsConstructor
|
|
public class MemberAdminService {
|
|
|
|
private final MemberMapper memberMapper;
|
|
|
|
public List<MemberAdminResponse> list() {
|
|
return memberMapper.findAll().stream().map(MemberAdminResponse::from).toList();
|
|
}
|
|
|
|
@Transactional
|
|
public MemberAdminResponse updateRole(Long targetId, String role, Long currentAdminId) {
|
|
Member target = mustFind(targetId);
|
|
if (targetId.equals(currentAdminId)) {
|
|
throw new ApiException(HttpStatus.BAD_REQUEST, "본인의 역할은 변경할 수 없습니다.");
|
|
}
|
|
memberMapper.updateRole(targetId, role);
|
|
target.setRole(role);
|
|
return MemberAdminResponse.from(target);
|
|
}
|
|
|
|
@Transactional
|
|
public MemberAdminResponse updateStatus(Long targetId, String status, Long currentAdminId) {
|
|
Member target = mustFind(targetId);
|
|
if (targetId.equals(currentAdminId)) {
|
|
throw new ApiException(HttpStatus.BAD_REQUEST, "본인의 상태는 변경할 수 없습니다.");
|
|
}
|
|
memberMapper.updateStatus(targetId, status);
|
|
target.setStatus(status);
|
|
return MemberAdminResponse.from(target);
|
|
}
|
|
|
|
@Transactional
|
|
public void delete(Long targetId, Long currentAdminId) {
|
|
mustFind(targetId);
|
|
if (targetId.equals(currentAdminId)) {
|
|
throw new ApiException(HttpStatus.BAD_REQUEST, "본인 계정은 삭제할 수 없습니다.");
|
|
}
|
|
memberMapper.deleteById(targetId);
|
|
}
|
|
|
|
private Member mustFind(Long id) {
|
|
Member m = memberMapper.findById(id);
|
|
if (m == null) {
|
|
throw new ApiException(HttpStatus.NOT_FOUND, "회원을 찾을 수 없습니다.");
|
|
}
|
|
return m;
|
|
}
|
|
}
|