package com.ecep.contract;


import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;

/**
 * 查询服务接口，提供通用的分页查询能力
 * 泛型T表示查询结果的数据类型
 */
public interface QueryService<T> {
    /**
     * 根据查询参数和分页条件获取数据列表
     *
     * @param paramsNode JSON格式的查询参数节点，包含各种过滤条件
     * @param pageable   分页参数，包含页码、每页条数、排序规则等信息
     * @return 分页查询结果，包含符合条件的数据列表和分页元数据
     */
    Page<T> findAll(JsonNode paramsNode, Pageable pageable);

    Specification<T> getSpecification(String searchText);

    Page<T> findAll(Specification<T> spec, Pageable pageable);

    default long count(JsonNode paramsNode) {
        return 0;
    }
}