Add generate openapi schema for rest api (#2923)
* Add generate openapi schema for rest api * Split method in utils * Add paramters * Add error response * Update description of filter and order by * Add get/id routes * Add delete route * Use components * Fix Typo * Add tags * Add create query * Add required field * Add update query * Add body request example * Add 201 on create request * Add servers * Fix failing test * Add open-api endpoint * Update description * Return base schema if no auth * Code review returns * Use open-api/types * Fix tag * Use components for parameters * Improve response examples * Improve axios error message * Fix tests
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
|
||||
import { objectMetadataItem } from 'src/core/api-rest/api-rest-query-builder/utils/__tests__/utils';
|
||||
import { objectMetadataItem } from 'src/utils/utils-test/object-metadata-item';
|
||||
import { FilterInputFactory } from 'src/core/api-rest/api-rest-query-builder/factories/input-factories/filter-input.factory';
|
||||
|
||||
describe('FilterInputFactory', () => {
|
||||
|
||||
@ -2,8 +2,8 @@ import { Test, TestingModule } from '@nestjs/testing';
|
||||
|
||||
import { OrderByDirection } from 'src/workspace/workspace-query-builder/interfaces/record.interface';
|
||||
|
||||
import { objectMetadataItem } from 'src/utils/utils-test/object-metadata-item';
|
||||
import { OrderByInputFactory } from 'src/core/api-rest/api-rest-query-builder/factories/input-factories/order-by-input.factory';
|
||||
import { objectMetadataItem } from 'src/core/api-rest/api-rest-query-builder/utils/__tests__/utils';
|
||||
|
||||
describe('OrderByInputFactory', () => {
|
||||
const objectMetadata = { objectMetadataItem: objectMetadataItem };
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { objectMetadataItem } from 'src/core/api-rest/api-rest-query-builder/utils/__tests__/utils';
|
||||
import { objectMetadataItem } from 'src/utils/utils-test/object-metadata-item';
|
||||
import { parseFilter } from 'src/core/api-rest/api-rest-query-builder/factories/input-factories/filter-utils/parse-filter.utils';
|
||||
|
||||
describe('parseFilter', () => {
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
import { Conjunctions } from 'src/core/api-rest/api-rest-query-builder/factories/input-factories/filter-utils/parse-filter.utils';
|
||||
|
||||
export const DEFAULT_CONJUNCTION = Conjunctions.and;
|
||||
|
||||
export const addDefaultConjunctionIfMissing = (filterQuery: string): string => {
|
||||
if (!(filterQuery.includes('(') && filterQuery.includes(')'))) {
|
||||
return `and(${filterQuery})`;
|
||||
return `${DEFAULT_CONJUNCTION}(${filterQuery})`;
|
||||
}
|
||||
|
||||
return filterQuery;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { BadRequestException } from '@nestjs/common';
|
||||
|
||||
enum FilterComparators {
|
||||
export enum FilterComparators {
|
||||
eq = 'eq',
|
||||
neq = 'neq',
|
||||
in = 'in',
|
||||
|
||||
@ -9,7 +9,7 @@ import {
|
||||
import { formatFieldValue } from 'src/core/api-rest/api-rest-query-builder/factories/input-factories/filter-utils/format-field-values.utils';
|
||||
import { FieldValue } from 'src/core/api-rest/types/api-rest-field-value.type';
|
||||
|
||||
enum Conjunctions {
|
||||
export enum Conjunctions {
|
||||
or = 'or',
|
||||
and = 'and',
|
||||
not = 'not',
|
||||
|
||||
@ -9,7 +9,7 @@ import {
|
||||
|
||||
import { checkFields } from 'src/core/api-rest/api-rest-query-builder/utils/fields.utils';
|
||||
|
||||
const DEFAULT_ORDER_DIRECTION = OrderByDirection.AscNullsFirst;
|
||||
export const DEFAULT_ORDER_DIRECTION = OrderByDirection.AscNullsFirst;
|
||||
|
||||
@Injectable()
|
||||
export class OrderByInputFactory {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { objectMetadataItem } from 'src/utils/utils-test/object-metadata-item';
|
||||
import {
|
||||
checkFields,
|
||||
getFieldType,
|
||||
} from 'src/core/api-rest/api-rest-query-builder/utils/fields.utils';
|
||||
import { objectMetadataItem } from 'src/core/api-rest/api-rest-query-builder/utils/__tests__/utils';
|
||||
import { FieldMetadataType } from 'src/metadata/field-metadata/field-metadata.entity';
|
||||
|
||||
describe('FieldUtils', () => {
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
import { mapFieldMetadataToGraphqlQuery } from 'src/core/api-rest/api-rest-query-builder/utils/map-field-metadata-to-graphql-query.utils';
|
||||
import {
|
||||
fieldCurrency,
|
||||
fieldLink,
|
||||
fieldNumber,
|
||||
fieldString,
|
||||
objectMetadataItem,
|
||||
} from 'src/core/api-rest/api-rest-query-builder/utils/__tests__/utils';
|
||||
} from 'src/utils/utils-test/object-metadata-item';
|
||||
import { mapFieldMetadataToGraphqlQuery } from 'src/core/api-rest/api-rest-query-builder/utils/map-field-metadata-to-graphql-query.utils';
|
||||
|
||||
describe('mapFieldMetadataToGraphqlQuery', () => {
|
||||
it('should map properly', () => {
|
||||
|
||||
@ -1,33 +0,0 @@
|
||||
import { FieldMetadataType } from 'src/metadata/field-metadata/field-metadata.entity';
|
||||
|
||||
export const fieldNumber = {
|
||||
name: 'fieldNumber',
|
||||
type: FieldMetadataType.NUMBER,
|
||||
targetColumnMap: { value: 'fieldNumber' },
|
||||
};
|
||||
|
||||
export const fieldString = {
|
||||
name: 'fieldString',
|
||||
type: FieldMetadataType.TEXT,
|
||||
targetColumnMap: { value: 'fieldString' },
|
||||
};
|
||||
|
||||
export const fieldLink = {
|
||||
name: 'fieldLink',
|
||||
type: FieldMetadataType.LINK,
|
||||
targetColumnMap: { label: 'fieldLinkLabel', url: 'fieldLinkUrl' },
|
||||
};
|
||||
|
||||
export const fieldCurrency = {
|
||||
name: 'fieldCurrency',
|
||||
type: FieldMetadataType.CURRENCY,
|
||||
targetColumnMap: {
|
||||
amountMicros: 'fieldCurrencyAmountMicros',
|
||||
currencyCode: 'fieldCurrencyCurrencyCode',
|
||||
},
|
||||
};
|
||||
|
||||
export const objectMetadataItem = {
|
||||
targetTableName: 'testingObject',
|
||||
fields: [fieldNumber, fieldString, fieldLink, fieldCurrency],
|
||||
};
|
||||
@ -28,14 +28,15 @@ export class ApiRestService {
|
||||
try {
|
||||
return await axios.post(`${baseUrl}/graphql`, data, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: request.headers.authorization,
|
||||
},
|
||||
});
|
||||
} catch (err) {
|
||||
return {
|
||||
data: {
|
||||
error: `AxiosError: please double check your query and your API key (to generate a new one, see here: ${this.environmentService.getFrontBaseUrl()}/settings/developers/api-keys)`,
|
||||
status: 400,
|
||||
error: `${err}. Please check your query.`,
|
||||
status: err.response.status,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user