diff --git a/server/src/tenant/entity-resolver/entity-resolver.service.ts b/server/src/tenant/entity-resolver/entity-resolver.service.ts index 9d78144d3..0312c3aa4 100644 --- a/server/src/tenant/entity-resolver/entity-resolver.service.ts +++ b/server/src/tenant/entity-resolver/entity-resolver.service.ts @@ -88,4 +88,19 @@ export class EntityResolverService { return runner.updateOne(args); } + + async deleteOne( + args: { id: string }, + context: SchemaBuilderContext, + info: GraphQLResolveInfo, + ) { + const runner = new PGGraphQLQueryRunner(this.dataSourceService, { + tableName: context.tableName, + workspaceId: context.workspaceId, + info, + fields: context.fields, + }); + + return runner.deleteOne(args); + } } diff --git a/server/src/tenant/entity-resolver/pg-graphql/pg-graphql-query-builder.util.ts b/server/src/tenant/entity-resolver/pg-graphql/pg-graphql-query-builder.util.ts index 7120d7014..60be59a87 100644 --- a/server/src/tenant/entity-resolver/pg-graphql/pg-graphql-query-builder.util.ts +++ b/server/src/tenant/entity-resolver/pg-graphql/pg-graphql-query-builder.util.ts @@ -19,6 +19,7 @@ type CommandArgs = { findOne: { filter?: any }; createMany: { data: any[] }; updateOne: { id: string; data: any }; + deleteOne: { id: string }; }; export interface PGGraphQLQueryBuilderOptions { @@ -115,4 +116,20 @@ export class PGGraphQLQueryBuilder { } `; } + + deleteOne(args: CommandArgs['deleteOne']) { + const { tableName } = this.options; + const fieldsString = this.getFieldsString(); + + return ` + mutation { + deleteFrom${tableName}Collection(filter: { id: { eq: "${args.id}" } }) { + affectedCount + records { + ${fieldsString} + } + } + } + `; + } } diff --git a/server/src/tenant/entity-resolver/pg-graphql/pg-graphql-query-runner.util.ts b/server/src/tenant/entity-resolver/pg-graphql/pg-graphql-query-runner.util.ts index bd19cb0df..5c7526e83 100644 --- a/server/src/tenant/entity-resolver/pg-graphql/pg-graphql-query-runner.util.ts +++ b/server/src/tenant/entity-resolver/pg-graphql/pg-graphql-query-runner.util.ts @@ -103,4 +103,11 @@ export class PGGraphQLQueryRunner { return this.parseResult(result, 'update')?.records?.[0]; } + + async deleteOne(args: { id: string }): Promise { + const query = this.queryBuilder.deleteOne(args); + const result = await this.execute(query, this.options.workspaceId); + + return this.parseResult(result, 'deleteFrom')?.records?.[0]; + } } diff --git a/server/src/tenant/schema-builder/schema-builder.service.ts b/server/src/tenant/schema-builder/schema-builder.service.ts index 619af2fb9..65aeab287 100644 --- a/server/src/tenant/schema-builder/schema-builder.service.ts +++ b/server/src/tenant/schema-builder/schema-builder.service.ts @@ -156,6 +156,19 @@ export class SchemaBuilderService { ); }, }, + [`deleteOne${upperFirst(entityName.singular)}`]: { + type: new GraphQLNonNull(ObjectType), + args: { + id: { type: new GraphQLNonNull(GraphQLID) }, + }, + resolve: (root, args, context, info) => { + return this.entityResolverService.deleteOne( + args, + schemaBuilderContext, + info, + ); + }, + }, } as GraphQLFieldConfigMap; }