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:
@ -0,0 +1,51 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { ModuleRef } from '@nestjs/core';
|
||||
|
||||
import { ResolverService } from 'src/engine/api/graphql/graphql-query-runner/interfaces/resolver-service.interface';
|
||||
import {
|
||||
ResolverArgs,
|
||||
WorkspaceResolverBuilderMethodNames,
|
||||
} from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { GraphqlQueryCreateManyResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-many-resolver.service';
|
||||
import { GraphqlQueryDestroyOneResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-destroy-one-resolver.service';
|
||||
import { GraphqlQueryFindDuplicatesResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-duplicates-resolver.service';
|
||||
import { GraphqlQueryFindManyResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service';
|
||||
import { GraphqlQueryFindOneResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-one-resolver.service';
|
||||
import { GraphqlQuerySearchResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-search-resolver.service';
|
||||
import { GraphqlQueryUpdateManyResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-update-many-resolver.service';
|
||||
import { GraphqlQueryUpdateOneResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-update-one-resolver.service';
|
||||
|
||||
@Injectable()
|
||||
export class GraphqlQueryResolverFactory {
|
||||
constructor(private moduleRef: ModuleRef) {}
|
||||
|
||||
public getResolver(
|
||||
operationName: WorkspaceResolverBuilderMethodNames,
|
||||
): ResolverService<ResolverArgs, any> {
|
||||
switch (operationName) {
|
||||
case 'findOne':
|
||||
return this.moduleRef.get(GraphqlQueryFindOneResolverService);
|
||||
case 'findMany':
|
||||
return this.moduleRef.get(GraphqlQueryFindManyResolverService);
|
||||
case 'findDuplicates':
|
||||
return this.moduleRef.get(GraphqlQueryFindDuplicatesResolverService);
|
||||
case 'search':
|
||||
return this.moduleRef.get(GraphqlQuerySearchResolverService);
|
||||
case 'createOne':
|
||||
case 'createMany':
|
||||
return this.moduleRef.get(GraphqlQueryCreateManyResolverService);
|
||||
case 'destroyOne':
|
||||
return this.moduleRef.get(GraphqlQueryDestroyOneResolverService);
|
||||
case 'updateOne':
|
||||
case 'deleteOne':
|
||||
return this.moduleRef.get(GraphqlQueryUpdateOneResolverService);
|
||||
case 'updateMany':
|
||||
case 'deleteMany':
|
||||
case 'restoreMany':
|
||||
return this.moduleRef.get(GraphqlQueryUpdateManyResolverService);
|
||||
default:
|
||||
throw new Error(`Unsupported operation: ${operationName}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user