Fix filter rest api (#10537)
## Context Rest API is now using cache metadata but the change was not done everywhere which was breaking the API <img width="953" alt="Screenshot 2025-02-27 at 10 48 31" src="https://github.com/user-attachments/assets/84f549a6-59b5-4989-b1ba-2d5c515ee47c" />
This commit is contained in:
@ -1,10 +1,79 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
|
||||
import { objectMetadataItemMock } from 'src/engine/api/__mocks__/object-metadata-item.mock';
|
||||
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
|
||||
|
||||
import {
|
||||
fieldCurrencyMock,
|
||||
fieldNumberMock,
|
||||
fieldTextMock,
|
||||
objectMetadataItemMock,
|
||||
} from 'src/engine/api/__mocks__/object-metadata-item.mock';
|
||||
import { FilterInputFactory } from 'src/engine/api/rest/input-factories/filter-input.factory';
|
||||
import { FieldMetadataMap } from 'src/engine/metadata-modules/types/field-metadata-map';
|
||||
|
||||
describe('FilterInputFactory', () => {
|
||||
const objectMetadata = { objectMetadataItem: objectMetadataItemMock };
|
||||
const completeFieldNumberMock: FieldMetadataInterface = {
|
||||
id: 'field-number-id',
|
||||
type: fieldNumberMock.type,
|
||||
name: fieldNumberMock.name,
|
||||
label: 'Field Number',
|
||||
objectMetadataId: 'object-metadata-id',
|
||||
isNullable: fieldNumberMock.isNullable,
|
||||
defaultValue: fieldNumberMock.defaultValue,
|
||||
};
|
||||
|
||||
const completeFieldTextMock: FieldMetadataInterface = {
|
||||
id: 'field-text-id',
|
||||
type: fieldTextMock.type,
|
||||
name: fieldTextMock.name,
|
||||
label: 'Field Text',
|
||||
objectMetadataId: 'object-metadata-id',
|
||||
isNullable: fieldTextMock.isNullable,
|
||||
defaultValue: fieldTextMock.defaultValue,
|
||||
};
|
||||
|
||||
const completeFieldCurrencyMock: FieldMetadataInterface = {
|
||||
id: 'field-currency-id',
|
||||
type: fieldCurrencyMock.type,
|
||||
name: fieldCurrencyMock.name,
|
||||
label: 'Field Currency',
|
||||
objectMetadataId: 'object-metadata-id',
|
||||
isNullable: fieldCurrencyMock.isNullable,
|
||||
defaultValue: fieldCurrencyMock.defaultValue,
|
||||
};
|
||||
|
||||
const fieldsById: FieldMetadataMap = {
|
||||
'field-number-id': completeFieldNumberMock,
|
||||
'field-text-id': completeFieldTextMock,
|
||||
'field-currency-id': completeFieldCurrencyMock,
|
||||
};
|
||||
|
||||
const fieldsByName: FieldMetadataMap = {
|
||||
[completeFieldNumberMock.name]: completeFieldNumberMock,
|
||||
[completeFieldTextMock.name]: completeFieldTextMock,
|
||||
[completeFieldCurrencyMock.name]: completeFieldCurrencyMock,
|
||||
};
|
||||
|
||||
const objectMetadataMapItem = {
|
||||
...objectMetadataItemMock,
|
||||
fieldsById,
|
||||
fieldsByName,
|
||||
};
|
||||
|
||||
const objectMetadataMaps = {
|
||||
byId: {
|
||||
[objectMetadataItemMock.id || 'mock-id']: objectMetadataMapItem,
|
||||
},
|
||||
idByNameSingular: {
|
||||
[objectMetadataItemMock.nameSingular]:
|
||||
objectMetadataItemMock.id || 'mock-id',
|
||||
},
|
||||
};
|
||||
|
||||
const objectMetadata = {
|
||||
objectMetadataMaps,
|
||||
objectMetadataMapItem,
|
||||
};
|
||||
|
||||
let service: FilterInputFactory;
|
||||
|
||||
|
||||
@ -6,10 +6,18 @@ import { addDefaultConjunctionIfMissing } from 'src/engine/api/rest/core/query-b
|
||||
import { checkFilterQuery } from 'src/engine/api/rest/core/query-builder/utils/filter-utils/check-filter-query.utils';
|
||||
import { parseFilter } from 'src/engine/api/rest/core/query-builder/utils/filter-utils/parse-filter.utils';
|
||||
import { FieldValue } from 'src/engine/api/rest/core/types/field-value.type';
|
||||
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
|
||||
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
|
||||
|
||||
@Injectable()
|
||||
export class FilterInputFactory {
|
||||
create(request: Request, objectMetadata): Record<string, FieldValue> {
|
||||
create(
|
||||
request: Request,
|
||||
objectMetadata: {
|
||||
objectMetadataMaps: ObjectMetadataMaps;
|
||||
objectMetadataMapItem: ObjectMetadataItemWithFieldMaps;
|
||||
},
|
||||
): Record<string, FieldValue> {
|
||||
let filterQuery = request.query.filter;
|
||||
|
||||
if (typeof filterQuery !== 'string') {
|
||||
@ -20,6 +28,6 @@ export class FilterInputFactory {
|
||||
|
||||
filterQuery = addDefaultConjunctionIfMissing(filterQuery);
|
||||
|
||||
return parseFilter(filterQuery, objectMetadata.objectMetadataItem);
|
||||
return parseFilter(filterQuery, objectMetadata.objectMetadataMapItem);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user