쿼리 파라미터 만들기

최길중·2026년 2월 23일
    // 관리자 리스트 조회
    @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);
    }
profile
취준생

0개의 댓글