From f7e4b036c8d58ab3f9ac226d08c33a19cf605ca4 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 30 Oct 2025 13:39:30 +0100 Subject: [PATCH] . --- packages/rdx-criteria/package.json | 1 - .../rdx-criteria/src/codelytv/Criteria.ts | 44 +++++++++++++++++++ packages/rdx-criteria/src/codelytv/Filter.ts | 37 ++++++++++++++++ .../rdx-criteria/src/codelytv/FilterField.ts | 3 ++ .../src/codelytv/FilterOperator.ts | 42 ++++++++++++++++++ .../rdx-criteria/src/codelytv/FilterValue.ts | 3 ++ packages/rdx-criteria/src/codelytv/Filters.ts | 19 ++++++++ .../src/codelytv/InvalidCriteria.ts | 5 +++ packages/rdx-criteria/src/codelytv/Order.ts | 23 ++++++++++ packages/rdx-criteria/src/codelytv/OrderBy.ts | 3 ++ .../rdx-criteria/src/codelytv/OrderType.ts | 13 ++++++ packages/rdx-criteria/src/codelytv/index.ts | 10 +++++ packages/rdx-criteria/src/critera.ts | 2 +- .../src/criteria-from-url-converter.ts | 4 +- 14 files changed, 205 insertions(+), 4 deletions(-) create mode 100644 packages/rdx-criteria/src/codelytv/Criteria.ts create mode 100644 packages/rdx-criteria/src/codelytv/Filter.ts create mode 100644 packages/rdx-criteria/src/codelytv/FilterField.ts create mode 100644 packages/rdx-criteria/src/codelytv/FilterOperator.ts create mode 100644 packages/rdx-criteria/src/codelytv/FilterValue.ts create mode 100644 packages/rdx-criteria/src/codelytv/Filters.ts create mode 100644 packages/rdx-criteria/src/codelytv/InvalidCriteria.ts create mode 100644 packages/rdx-criteria/src/codelytv/Order.ts create mode 100644 packages/rdx-criteria/src/codelytv/OrderBy.ts create mode 100644 packages/rdx-criteria/src/codelytv/OrderType.ts create mode 100644 packages/rdx-criteria/src/codelytv/index.ts diff --git a/packages/rdx-criteria/package.json b/packages/rdx-criteria/package.json index f4eb767f..1b20acff 100644 --- a/packages/rdx-criteria/package.json +++ b/packages/rdx-criteria/package.json @@ -14,7 +14,6 @@ "@repo/typescript-config": "workspace:*" }, "dependencies": { - "@codelytv/criteria": "^2.0.0", "sequelize": "^6.37.5" } } diff --git a/packages/rdx-criteria/src/codelytv/Criteria.ts b/packages/rdx-criteria/src/codelytv/Criteria.ts new file mode 100644 index 00000000..a9995203 --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/Criteria.ts @@ -0,0 +1,44 @@ +import { FiltersPrimitives } from "./Filter"; +import { Filters } from "./Filters"; +import { InvalidCriteria } from "./InvalidCriteria"; +import { Order } from "./Order"; + +export class Criteria { + constructor( + public readonly filters: Filters, + public readonly order: Order, + public readonly pageSize: number | null, + public readonly pageNumber: number | null, + ) { + if (pageNumber !== null && pageSize === null) { + throw new InvalidCriteria(); + } + } + + 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, + pageNumber, + ); + } + + static withFilters(filters: FiltersPrimitives[]): Criteria { + return Criteria.fromPrimitives(filters, null, null, null, null); + } + + hasOrder(): boolean { + return !this.order.isNone(); + } + + hasFilters(): boolean { + return !this.filters.isEmpty(); + } +} diff --git a/packages/rdx-criteria/src/codelytv/Filter.ts b/packages/rdx-criteria/src/codelytv/Filter.ts new file mode 100644 index 00000000..170622cd --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/Filter.ts @@ -0,0 +1,37 @@ +import { FilterField } from "./FilterField"; +import { FilterOperator, Operator } from "./FilterOperator"; +import { FilterValue } from "./FilterValue"; + +export type FiltersPrimitives = { + field: string; + operator: string; + value: string; +}; + +export class Filter { + readonly field: FilterField; + readonly operator: FilterOperator; + readonly value: FilterValue; + + constructor(field: FilterField, operator: FilterOperator, value: FilterValue) { + this.field = field; + this.operator = operator; + this.value = value; + } + + static fromPrimitives(field: string, operator: string, value: string): Filter { + return new Filter( + new FilterField(field), + new FilterOperator(Operator[operator as keyof typeof Operator]), + new FilterValue(value), + ); + } + + toPrimitives(): FiltersPrimitives { + return { + field: this.field.value, + operator: this.operator.value, + value: this.value.value, + }; + } +} diff --git a/packages/rdx-criteria/src/codelytv/FilterField.ts b/packages/rdx-criteria/src/codelytv/FilterField.ts new file mode 100644 index 00000000..81ca084b --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/FilterField.ts @@ -0,0 +1,3 @@ +export class FilterField { + constructor(public readonly value: string) {} +} diff --git a/packages/rdx-criteria/src/codelytv/FilterOperator.ts b/packages/rdx-criteria/src/codelytv/FilterOperator.ts new file mode 100644 index 00000000..541626fe --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/FilterOperator.ts @@ -0,0 +1,42 @@ +export enum Operator { + EQUAL = "=", + NOT_EQUAL = "!=", + GREATER_THAN = ">", + GREATER_THAN_OR_EQUAL = ">=", + LOWER_THAN = "<", + LOWER_THAN_OR_EQUAL = "<=", + CONTAINS = "CONTAINS", + NOT_CONTAINS = "NOT_CONTAINS", +} + +export class FilterOperator { + constructor(public readonly value: Operator) {} + + isContains(): boolean { + return this.value.valueOf() === Operator.CONTAINS.valueOf(); + } + + isNotContains(): boolean { + return this.value.valueOf() === Operator.NOT_CONTAINS.valueOf(); + } + + isNotEquals(): boolean { + return this.value.valueOf() === Operator.NOT_EQUAL.valueOf(); + } + + isGreaterThan(): boolean { + return this.value.valueOf() === Operator.GREATER_THAN.valueOf(); + } + + isGreaterThanOrEqual(): boolean { + return this.value.valueOf() === Operator.GREATER_THAN_OR_EQUAL.valueOf(); + } + + isLowerThan(): boolean { + return this.value.valueOf() === Operator.LOWER_THAN.valueOf(); + } + + isLowerThanOrEqual(): boolean { + return this.value.valueOf() === Operator.LOWER_THAN_OR_EQUAL.valueOf(); + } +} diff --git a/packages/rdx-criteria/src/codelytv/FilterValue.ts b/packages/rdx-criteria/src/codelytv/FilterValue.ts new file mode 100644 index 00000000..54dab5a4 --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/FilterValue.ts @@ -0,0 +1,3 @@ +export class FilterValue { + constructor(public readonly value: string) {} +} diff --git a/packages/rdx-criteria/src/codelytv/Filters.ts b/packages/rdx-criteria/src/codelytv/Filters.ts new file mode 100644 index 00000000..03f7ada0 --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/Filters.ts @@ -0,0 +1,19 @@ +import { Filter, FiltersPrimitives } from "./Filter"; + +export class Filters { + constructor(public readonly value: Filter[]) {} + + static fromPrimitives(filters: FiltersPrimitives[]): Filters { + return new Filters( + filters.map((filter) => Filter.fromPrimitives(filter.field, filter.operator, filter.value)), + ); + } + + toPrimitives(): FiltersPrimitives[] { + return this.value.map((filter) => filter.toPrimitives()); + } + + isEmpty(): boolean { + return this.value.length === 0; + } +} diff --git a/packages/rdx-criteria/src/codelytv/InvalidCriteria.ts b/packages/rdx-criteria/src/codelytv/InvalidCriteria.ts new file mode 100644 index 00000000..54cd483c --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/InvalidCriteria.ts @@ -0,0 +1,5 @@ +export class InvalidCriteria extends Error { + constructor() { + super("Page size is required when page number is defined"); + } +} diff --git a/packages/rdx-criteria/src/codelytv/Order.ts b/packages/rdx-criteria/src/codelytv/Order.ts new file mode 100644 index 00000000..bffb1bc2 --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/Order.ts @@ -0,0 +1,23 @@ +import { OrderBy } from "./OrderBy"; +import { OrderType, OrderTypes } from "./OrderType"; + +export class Order { + constructor( + public readonly orderBy: OrderBy, + public readonly orderType: OrderType, + ) {} + + static none(): Order { + return new Order(new OrderBy(""), new OrderType(OrderTypes.NONE)); + } + + static fromPrimitives(orderBy: string | null, orderType: string | null): Order { + return orderBy !== null + ? new Order(new OrderBy(orderBy), new OrderType(orderType as OrderTypes)) + : Order.none(); + } + + isNone(): boolean { + return this.orderType.isNone(); + } +} diff --git a/packages/rdx-criteria/src/codelytv/OrderBy.ts b/packages/rdx-criteria/src/codelytv/OrderBy.ts new file mode 100644 index 00000000..8d83637b --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/OrderBy.ts @@ -0,0 +1,3 @@ +export class OrderBy { + constructor(public readonly value: string) {} +} diff --git a/packages/rdx-criteria/src/codelytv/OrderType.ts b/packages/rdx-criteria/src/codelytv/OrderType.ts new file mode 100644 index 00000000..cf47fe4f --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/OrderType.ts @@ -0,0 +1,13 @@ +export enum OrderTypes { + ASC = "ASC", + DESC = "DESC", + NONE = "NONE", +} + +export class OrderType { + constructor(public readonly value: OrderTypes) {} + + isNone(): boolean { + return this.value === OrderTypes.NONE; + } +} diff --git a/packages/rdx-criteria/src/codelytv/index.ts b/packages/rdx-criteria/src/codelytv/index.ts new file mode 100644 index 00000000..fd66448d --- /dev/null +++ b/packages/rdx-criteria/src/codelytv/index.ts @@ -0,0 +1,10 @@ +export * from "./Criteria"; +export * from "./Filter"; +export * from "./FilterField"; +export * from "./FilterOperator"; +export * from "./Filters"; +export * from "./FilterValue"; +export * from "./InvalidCriteria"; +export * from "./Order"; +export * from "./OrderBy"; +export * from "./OrderType"; diff --git a/packages/rdx-criteria/src/critera.ts b/packages/rdx-criteria/src/critera.ts index 9a762a1c..8a7ae2df 100644 --- a/packages/rdx-criteria/src/critera.ts +++ b/packages/rdx-criteria/src/critera.ts @@ -1,4 +1,4 @@ -import { Criteria as BaseCriteria, Filters, FiltersPrimitives, Order } from "@codelytv/criteria"; +import { Criteria as BaseCriteria, Filters, FiltersPrimitives, Order } from "./codelytv"; import { INITIAL_PAGE_INDEX, INITIAL_PAGE_SIZE } from "./defaults"; export class Criteria extends BaseCriteria { diff --git a/packages/rdx-criteria/src/criteria-from-url-converter.ts b/packages/rdx-criteria/src/criteria-from-url-converter.ts index 01514959..925a0227 100644 --- a/packages/rdx-criteria/src/criteria-from-url-converter.ts +++ b/packages/rdx-criteria/src/criteria-from-url-converter.ts @@ -1,4 +1,4 @@ -import { FiltersPrimitives } from "@codelytv/criteria"; +import { FiltersPrimitives } from "./codelytv"; import { Criteria } from "./critera"; import { DEFAULT_ORDER, INITIAL_PAGE_INDEX, INITIAL_PAGE_SIZE } from "./defaults"; @@ -74,7 +74,7 @@ export class CriteriaFromUrlConverter { } }); - // @ts-ignore + // @ts-expect-error return Object.values(tempFilters).filter( (filter) => filter.field !== undefined && filter.operator !== undefined && filter.value !== undefined