PageParameters.java

package no.nav.data.common.rest;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

@Slf4j
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageParameters {

    @Schema(defaultValue = "0", minimum = "0")
    private int pageNumber = 0;
    @Schema(defaultValue = "20", minimum = "1", maximum = "250")
    private int pageSize = 20;

    public Pageable createIdSortedPage() {
        validate();
        return PageRequest.of(pageNumber, pageSize, Sort.by("id"));
    }

    public Pageable createSortedPageByFieldDescending(String fieldName) {
        validate();
        return PageRequest.of(pageNumber, pageSize, Sort.by(fieldName).descending());
    }

    private void validate() {
        if (pageNumber < 0) {
            log.warn("invalid pageNumber {}, setting to 0", pageNumber);
            pageNumber = 0;
        }
        if (pageSize < 1) {
            log.warn("invalid pageSize {}, setting to 1", pageSize);
            pageSize = 1;
        }
        if (pageSize > 250) {
            log.warn("invalid pageSize {}, setting to 250", pageSize);
            pageSize = 250;
        }
    }
}