Refactor graphql query runner and add mutation resolvers (#7418)
Fixes https://github.com/twentyhq/twenty/issues/6859 This PR adds all the remaining resolvers for - updateOne/updateMany - createOne/createMany - deleteOne/deleteMany - destroyOne - restoreMany Also - refactored the graphql-query-runner to be able to add other resolvers without too much boilerplate. - add missing events that were not sent anymore as well as webhooks - make resolver injectable so they can inject other services as well - use objectMetadataMap from cache instead of computing it multiple time - various fixes (mutation not correctly parsing JSON, relationHelper fetching data with empty ids set, ...) Next steps: - Wrapping query builder to handle DB events properly - Move webhook emitters to db event listener - Add pagination where it's missing (findDuplicates, nested relations, etc...)
This commit is contained in:
+1
-1
@@ -25,7 +25,7 @@ export class GraphqlQueryFilterConditionParser {
|
||||
public parse(
|
||||
queryBuilder: SelectQueryBuilder<any>,
|
||||
objectNameSingular: string,
|
||||
filter: RecordFilter,
|
||||
filter: Partial<RecordFilter>,
|
||||
): SelectQueryBuilder<any> {
|
||||
if (!filter || Object.keys(filter).length === 0) {
|
||||
return queryBuilder;
|
||||
|
||||
-3
@@ -58,7 +58,6 @@ export class GraphqlQueryFilterFieldParser {
|
||||
}
|
||||
|
||||
const { sql, params } = this.computeWhereConditionParts(
|
||||
fieldMetadata,
|
||||
operator,
|
||||
objectNameSingular,
|
||||
key,
|
||||
@@ -73,7 +72,6 @@ export class GraphqlQueryFilterFieldParser {
|
||||
}
|
||||
|
||||
private computeWhereConditionParts(
|
||||
fieldMetadata: FieldMetadataInterface,
|
||||
operator: string,
|
||||
objectNameSingular: string,
|
||||
key: string,
|
||||
@@ -185,7 +183,6 @@ export class GraphqlQueryFilterFieldParser {
|
||||
);
|
||||
|
||||
const { sql, params } = this.computeWhereConditionParts(
|
||||
fieldMetadata,
|
||||
operator,
|
||||
objectNameSingular,
|
||||
fullFieldName,
|
||||
|
||||
+7
-7
@@ -9,7 +9,6 @@ import {
|
||||
RecordFilter,
|
||||
RecordOrderBy,
|
||||
} from 'src/engine/api/graphql/workspace-query-builder/interfaces/record.interface';
|
||||
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
|
||||
|
||||
import { GraphqlQueryFilterConditionParser } from 'src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-filter/graphql-query-filter-condition.parser';
|
||||
import { GraphqlQueryOrderFieldParser } from 'src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-order/graphql-query-order.parser';
|
||||
@@ -17,6 +16,7 @@ import { GraphqlQuerySelectedFieldsParser } from 'src/engine/api/graphql/graphql
|
||||
import {
|
||||
FieldMetadataMap,
|
||||
ObjectMetadataMap,
|
||||
ObjectMetadataMapItem,
|
||||
} from 'src/engine/metadata-modules/utils/generate-object-metadata-map.util';
|
||||
|
||||
export class GraphqlQueryParser {
|
||||
@@ -39,10 +39,10 @@ export class GraphqlQueryParser {
|
||||
);
|
||||
}
|
||||
|
||||
applyFilterToBuilder(
|
||||
public applyFilterToBuilder(
|
||||
queryBuilder: SelectQueryBuilder<any>,
|
||||
objectNameSingular: string,
|
||||
recordFilter: RecordFilter,
|
||||
recordFilter: Partial<RecordFilter>,
|
||||
): SelectQueryBuilder<any> {
|
||||
return this.filterConditionParser.parse(
|
||||
queryBuilder,
|
||||
@@ -51,7 +51,7 @@ export class GraphqlQueryParser {
|
||||
);
|
||||
}
|
||||
|
||||
applyDeletedAtToBuilder(
|
||||
public applyDeletedAtToBuilder(
|
||||
queryBuilder: SelectQueryBuilder<any>,
|
||||
recordFilter: RecordFilter,
|
||||
): SelectQueryBuilder<any> {
|
||||
@@ -88,7 +88,7 @@ export class GraphqlQueryParser {
|
||||
return false;
|
||||
};
|
||||
|
||||
applyOrderToBuilder(
|
||||
public applyOrderToBuilder(
|
||||
queryBuilder: SelectQueryBuilder<any>,
|
||||
orderBy: RecordOrderBy,
|
||||
objectNameSingular: string,
|
||||
@@ -103,8 +103,8 @@ export class GraphqlQueryParser {
|
||||
return queryBuilder.orderBy(parsedOrderBys as OrderByCondition);
|
||||
}
|
||||
|
||||
parseSelectedFields(
|
||||
parentObjectMetadata: ObjectMetadataInterface,
|
||||
public parseSelectedFields(
|
||||
parentObjectMetadata: ObjectMetadataMapItem,
|
||||
graphqlSelectedFields: Partial<Record<string, any>>,
|
||||
): { select: Record<string, any>; relations: Record<string, any> } {
|
||||
const parentFields =
|
||||
|
||||
Reference in New Issue
Block a user