Skip to content

Commit

Permalink
evolution: add extra param on Request - gid-oss#11
Browse files Browse the repository at this point in the history
  • Loading branch information
GSI committed Mar 13, 2023
1 parent e8fddfe commit 7922373
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
QueryExtra,
QueryFields,
QueryFilter,
QueryFilterArr,
Expand All @@ -21,4 +22,5 @@ export interface CreateQueryParams {
page?: number;
resetCache?: boolean;
includeDeleted?: number;
extra?: QueryExtra;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ObjectLiteral } from '@dataui/crud-util';
import { QueryFields, QueryFilter, QueryJoin, QuerySort, SCondition } from '../types';

export interface ParsedRequestParams {
export interface ParsedRequestParams<EXTRA = {}> {
fields: QueryFields;
paramsFilter: QueryFilter[];
authPersist: ObjectLiteral;
Expand All @@ -15,4 +15,11 @@ export interface ParsedRequestParams {
page: number;
cache: number;
includeDeleted: number;
/**
* Extra options.
*
* Custom extra option come from Request and can be used anywhere you want for your business rules.
* CrudRequest lib. do not evaluat this attribut.
*/
extra?: EXTRA;
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@ export interface RequestQueryBuilderOptions {
page?: string | string[];
cache?: string | string[];
includeDeleted?: string | string[];
extra?: string | string[];
};
}
1 change: 1 addition & 0 deletions packages/crud-request/src/request-query.builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export class RequestQueryBuilder {
page: 'page',
cache: 'cache',
includeDeleted: 'include_deleted',
extra: 'extra.',
},
};
private paramNames: {
Expand Down
19 changes: 18 additions & 1 deletion packages/crud-request/src/request-query.parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import {
validateUUID,
} from './request-query.validator';
import {
ComparisonOperator,
ComparisonOperator, QueryExtra,
QueryFields,
QueryFilter,
QueryJoin,
Expand All @@ -54,6 +54,7 @@ export class RequestQueryParser implements ParsedRequestParams {
public page: number;
public cache: number;
public includeDeleted: number;
public extra?: QueryExtra;

private _params: any;
private _query: any;
Expand Down Expand Up @@ -83,6 +84,7 @@ export class RequestQueryParser implements ParsedRequestParams {
page: this.page,
cache: this.cache,
includeDeleted: this.includeDeleted,
extra: this.extra,
};
}

Expand Down Expand Up @@ -129,6 +131,8 @@ export class RequestQueryParser implements ParsedRequestParams {
'includeDeleted',
this.numericParser.bind(this, 'includeDeleted'),
)[0];

this.extra = this.parseExtraFromQueryParam();
}
}

Expand Down Expand Up @@ -209,6 +213,19 @@ export class RequestQueryParser implements ParsedRequestParams {
return [];
}

private parseExtraFromQueryParam(): QueryExtra {
const params = Array.isArray(this._options.paramNamesMap.extra) ? this._options.paramNamesMap.extra : [this._options.paramNamesMap.extra];
const extraKeys = Object
.keys(this._query || {})
.filter(k => params.find(p => k?.startsWith(p)))
.reduce((o, k) => {
o[k.replace('extra.', '')] = this.parseValues(this._query[k]);
return o;
}, {});

return Object.keys(extraKeys).length > 0 ? extraKeys : null;
}

private parseValue(val: any) {
try {
const parsed = JSON.parse(val);
Expand Down
3 changes: 3 additions & 0 deletions packages/crud-request/src/types/request-query.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ export interface QuerySort {
order: QuerySortOperator;
}

/** Extra object or null */
export type QueryExtra = any | null;

export type QuerySortArr = [string, QuerySortOperator];

export type QuerySortOperator = 'ASC' | 'DESC';
Expand Down
4 changes: 2 additions & 2 deletions packages/crud/src/interfaces/crud-request.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { ParsedRequestParams } from '@dataui/crud-request';

import { CrudRequestOptions } from '../interfaces';

export interface CrudRequest {
parsed: ParsedRequestParams;
export interface CrudRequest<EXTRA = {}> {
parsed: ParsedRequestParams<EXTRA>;
options: CrudRequestOptions;
}

0 comments on commit 7922373

Please sign in to comment.