Skip to content

Commit 109722b

Browse files
committed
refactor: move input filter normalization to baseConnector
1 parent ded1ee5 commit 109722b

File tree

3 files changed

+26
-25
lines changed

3 files changed

+26
-25
lines changed

adminforth/dataConnectors/baseConnector.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,27 @@ export default class AdminForthBaseConnector implements IAdminForthDataSourceCon
4242
return data.length > 0 ? data[0] : null;
4343
}
4444

45+
validateAndNormalizeInputFilters(filter: IAdminForthSingleFilter | IAdminForthAndOrFilter | Array<IAdminForthSingleFilter | IAdminForthAndOrFilter> | undefined): IAdminForthAndOrFilter {
46+
if (!filter) {
47+
// if no filter, return empty "and" filter
48+
return { operator: AdminForthFilterOperators.AND, subFilters: [] };
49+
}
50+
if (typeof filter !== 'object') {
51+
throw new Error(`Filter should be an array or an object`);
52+
}
53+
if (Array.isArray(filter)) {
54+
// if filter is an array, combine them using "and" operator
55+
return { operator: AdminForthFilterOperators.AND, subFilters: filter };
56+
}
57+
if ((filter as IAdminForthAndOrFilter).subFilters) {
58+
// if filter is already AndOr filter - return as is
59+
return filter as IAdminForthAndOrFilter;
60+
}
61+
62+
// by default, assume filter is Single filter, turn it into AndOr filter
63+
return { operator: AdminForthFilterOperators.AND, subFilters: [filter] };
64+
}
65+
4566
validateAndNormalizeFilters(filters: IAdminForthSingleFilter | IAdminForthAndOrFilter | Array<IAdminForthSingleFilter | IAdminForthAndOrFilter>, resource: AdminForthResource): { ok: boolean, error: string } {
4667
if (Array.isArray(filters)) {
4768
// go through all filters in array and call validation+normalization for each

adminforth/modules/operationalResource.ts

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,6 @@
11
import { IAdminForthSingleFilter, IAdminForthAndOrFilter, IAdminForthSort, IOperationalResource, IAdminForthDataSourceConnectorBase, AdminForthResource } from '../types/Back.js';
22
import { AdminForthFilterOperators } from '../types/Common.js';
33

4-
5-
function filtersIfFilter(filter: IAdminForthSingleFilter | IAdminForthAndOrFilter | Array<IAdminForthSingleFilter | IAdminForthAndOrFilter> | undefined): IAdminForthAndOrFilter {
6-
if (!filter) {
7-
// if no filter, return empty "and" filter
8-
return { operator: AdminForthFilterOperators.AND, subFilters: [] };
9-
}
10-
if (typeof filter !== 'object') {
11-
throw new Error(`Filter should be an array or an object`);
12-
}
13-
if (Array.isArray(filter)) {
14-
// if filter is an array, combine them using "and" operator
15-
return { operator: AdminForthFilterOperators.AND, subFilters: filter };
16-
}
17-
if ((filter as IAdminForthAndOrFilter).subFilters) {
18-
// if filter is already AndOr filter - return as is
19-
return filter as IAdminForthAndOrFilter;
20-
}
21-
22-
// by default, assume filter is Single filter, turn it into AndOr filter
23-
return { operator: AdminForthFilterOperators.AND, subFilters: [filter] };
24-
}
25-
264
function sortsIfSort(sort: IAdminForthSort | IAdminForthSort[]): IAdminForthSort[] {
275
return (Array.isArray(sort) ? sort : [sort]) as IAdminForthSort[];
286
}
@@ -40,7 +18,7 @@ export default class OperationalResource implements IOperationalResource {
4018
return (
4119
await this.dataConnector.getData({
4220
resource: this.resourceConfig,
43-
filters: filtersIfFilter(filter),
21+
filters: this.dataConnector.validateAndNormalizeInputFilters(filter),
4422
limit: 1,
4523
offset: 0,
4624
sort: [],
@@ -73,7 +51,7 @@ export default class OperationalResource implements IOperationalResource {
7351

7452
const { data } = await this.dataConnector.getData({
7553
resource: this.resourceConfig,
76-
filters: filtersIfFilter(filter),
54+
filters: this.dataConnector.validateAndNormalizeInputFilters(filter),
7755
limit: appliedLimit,
7856
offset: appliedOffset,
7957
sort: sortsIfSort(sort),
@@ -86,7 +64,7 @@ export default class OperationalResource implements IOperationalResource {
8664
async count(filter: IAdminForthSingleFilter | IAdminForthAndOrFilter | Array<IAdminForthSingleFilter | IAdminForthAndOrFilter> | undefined): Promise<number> {
8765
return await this.dataConnector.getCount({
8866
resource: this.resourceConfig,
89-
filters: filtersIfFilter(filter),
67+
filters: this.dataConnector.validateAndNormalizeInputFilters(filter),
9068
});
9169
}
9270

adminforth/types/Back.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@ export interface IAdminForthDataSourceConnector {
236236
*/
237237
export interface IAdminForthDataSourceConnectorBase extends IAdminForthDataSourceConnector {
238238

239+
validateAndNormalizeInputFilters(filter: IAdminForthSingleFilter | IAdminForthAndOrFilter | Array<IAdminForthSingleFilter | IAdminForthAndOrFilter> | undefined): IAdminForthAndOrFilter;
240+
239241
getPrimaryKey(resource: AdminForthResource): string;
240242

241243
getData({ resource, limit, offset, sort, filters }: {

0 commit comments

Comments
 (0)