feat: add missing updateMany and deleteMany resolvers on flexible backend (#2758)

* feat: add missing updateMany and deleteMany resolvers on flexible backend

Co-authored-by: v1b3m <vibenjamin6@gmail.com>

* Refactor according to review

Co-authored-by: v1b3m <vibenjamin6@gmail.com>

* Update return types for `createMany`, `updateMany` and `deleteMany`

Co-authored-by: v1b3m <vibenjamin6@gmail.com>

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: v1b3m <vibenjamin6@gmail.com>
This commit is contained in:
gitstart-twenty
2023-11-30 13:13:08 +01:00
committed by GitHub
co-authored by v1b3m gitstart-twenty
parent 1ba062f40c
commit 1822370389
13 changed files with 273 additions and 2 deletions
@@ -9,6 +9,7 @@ import { ObjectMetadataInterface } from 'src/workspace/workspace-schema-builder/
import { TypeDefinitionsStorage } from 'src/workspace/workspace-schema-builder/storages/type-definitions.storage';
import { getResolverName } from 'src/workspace/utils/get-resolver-name.util';
import { getResolverArgs } from 'src/workspace/workspace-schema-builder/utils/get-resolver-args.util';
import { TypeMapperService } from 'src/workspace/workspace-schema-builder/services/type-mapper.service';
import { ArgsFactory } from './args.factory';
import { ObjectTypeDefinitionKind } from './object-type-definition.factory';
@@ -25,6 +26,7 @@ export class RootTypeFactory {
constructor(
private readonly typeDefinitionsStorage: TypeDefinitionsStorage,
private readonly typeMapperService: TypeMapperService,
private readonly argsFactory: ArgsFactory,
) {}
@@ -70,7 +72,7 @@ export class RootTypeFactory {
for (const methodName of workspaceResolverMethodNames) {
const name = getResolverName(objectMetadata, methodName);
const args = getResolverArgs(methodName);
const outputType = this.typeDefinitionsStorage.getObjectTypeByKey(
const objectType = this.typeDefinitionsStorage.getObjectTypeByKey(
objectMetadata.id,
methodName === 'findMany'
? ObjectTypeDefinitionKind.Connection
@@ -84,7 +86,7 @@ export class RootTypeFactory {
options,
);
if (!outputType) {
if (!objectType) {
this.logger.error(
`Could not find a GraphQL type for ${objectMetadata.id} for method ${methodName}`,
{
@@ -99,6 +101,12 @@ export class RootTypeFactory {
);
}
const outputType = this.typeMapperService.mapToGqlType(objectType, {
isArray: ['updateMany', 'deleteMany', 'createMany'].includes(
methodName,
),
});
fieldConfigMap[name] = {
type: outputType,
args: argsType,
@@ -36,6 +36,7 @@ export const getResolverArgs = (
},
};
case 'findOne':
case 'deleteMany':
return {
filter: {
kind: InputTypeDefinitionKind.Filter,
@@ -75,6 +76,17 @@ export const getResolverArgs = (
isNullable: false,
},
};
case 'updateMany':
return {
data: {
kind: InputTypeDefinitionKind.Update,
isNullable: false,
},
filter: {
kind: InputTypeDefinitionKind.Filter,
isNullable: false,
},
};
default:
throw new Error(`Unknown resolver type: ${type}`);
}