import { Criteria as BaseCriteria, Filters, FiltersPrimitives, Order } from "@codelytv/criteria"; import { INITIAL_PAGE_INDEX, INITIAL_PAGE_SIZE } from "./defaults"; export class Criteria extends BaseCriteria { /** * Creates a new Criteria instance. * * @param filters - The filters to apply. * @param order - The order to apply. * @param pageSize - The size of the page. * @param pageNumber - The number of the page. */ constructor( public readonly filters: Filters, public readonly order: Order, public readonly pageSize: number, public readonly pageNumber: number ) { super(filters, order, pageSize, pageNumber); } static fromPrimitives( filters: FiltersPrimitives[], orderBy: string | null, orderType: string | null, pageSize: number | null, pageNumber: number | null ): Criteria { return new Criteria( Filters.fromPrimitives(filters), Order.fromPrimitives(orderBy, orderType), pageSize ?? INITIAL_PAGE_SIZE, pageNumber ?? INITIAL_PAGE_INDEX ); } toPrimitives() { return { filters: this.filters.toPrimitives(), orderBy: this.order.orderBy.value, orderType: this.order.orderType.value, pageSize: this.pageSize, pageNumber: this.pageNumber, }; } toJSON() { return this.toPrimitives(); } }