// 관리자 리스트 조회
@GetMapping("/admins")
public ResponseEntity<ApiResponse<GetAdminListResponse>> getAllAdmins(
HttpSession session,
@RequestParam(required = false) String keyword,
@RequestParam(required = false, defaultValue = "1") Integer page,
@RequestParam(required = false, defaultValue = "10") Integer size,
@RequestParam(required = false, defaultValue = "createdAt") String sortBy,
@RequestParam(required = false, defaultValue = "asc") String sortDir,
@RequestParam(required = false) String role,
@RequestParam(required = false) String status
) {
GetAdminListResponse response = adminService.getAllAdmins(session, keyword, page, size, sortBy, sortDir, role, status);
return ResponseEntity.status(HttpStatus.OK).body(ApiResponse.success(response));
}
// 관리자 리스트 조회 전용
@Query("""
select p from Admin p
where p.deletedAt is null
and (:status is null or p.status = :status)
and (:role is null or p.role = :role)
and (:keyword is null or :keyword = ''
or lower(p.name) like lower(concat('%', :keyword, '%'))
or lower(p.email) like lower(concat('%', :keyword, '%')))
""")
Page<Admin> findAllAdmins(
@Param("keyword") String keyword,
@Param("role") AdminRole role,
@Param("status") AdminStatus status,
Pageable pageable
);
// 쿼리 파라 미터 조회
@Transactional(readOnly = true)
public GetAdminListResponse getAllAdmins(HttpSession session, String keyword, Integer page, Integer size, String sortBy, String sortDir, String role, String status) {
SessionKey.checkSuperAdmin(session);
int safePage = (page == null || page < 1) ? 1 : page;
int safeSize = (size == null || size < 1) ? 10 : size;
Sort.Direction dir = "desc".equalsIgnoreCase(sortDir) ? Sort.Direction.DESC : Sort.Direction.ASC;
String safeSortBy = (sortBy == null || sortBy.isBlank()) ? "createdAt" : sortBy;
AdminRole roleEnum = (role == null || role.isBlank()) ? null : AdminRole.valueOf(role);
AdminStatus statusEnum = (status == null || status.isBlank()) ? null : AdminStatus.valueOf(status);
Pageable pageable = PageRequest.of(safePage - 1, safeSize, Sort.by(dir, safeSortBy));
Page<Admin> pageResult = adminRepository.findAllAdmins(keyword, roleEnum, statusEnum, pageable);
return GetAdminListResponse.from(pageResult);
}