From 1d22ffe2a679f8dedb97bbb5d5058d0e9bb3db25 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 8 Nov 2023 12:36:03 +0100 Subject: [PATCH] Fix error formatting. --- .../GraphQL/CachingGraphQLResolver.cs | 4 ++- .../Contents/GraphQL/Types/ErrorProvider.cs | 35 +++++++++++++++++++ .../Contents/GraphQL/Types/ErrorVisitor.cs | 5 --- backend/src/Squidex/Config/Web/WebServices.cs | 3 ++ 4 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ErrorProvider.cs diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/CachingGraphQLResolver.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/CachingGraphQLResolver.cs index e66c0325d..9758948a7 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/CachingGraphQLResolver.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/CachingGraphQLResolver.cs @@ -55,7 +55,9 @@ public sealed class CachingGraphQLResolver : IConfigureExecution options.Schema = await GetSchemaAsync(context.App); options.HandleError(serviceProvider); - return await next(options); + var a = await next(options); + + return a; } public async Task GetSchemaAsync(IAppEntity app) diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ErrorProvider.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ErrorProvider.cs new file mode 100644 index 000000000..2756e4775 --- /dev/null +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ErrorProvider.cs @@ -0,0 +1,35 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using GraphQL; +using GraphQL.Execution; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Validation; + +namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types; + +public sealed class ErrorProvider : ErrorInfoProvider +{ + public override ErrorInfo GetInfo(ExecutionError executionError) + { + var actual = base.GetInfo(executionError); + + if (executionError.InnerException is ValidationException or DomainException) + { + if (!string.IsNullOrWhiteSpace(actual.Message)) + { + actual.Message = $"{actual.Message} - {executionError.InnerException.Message}"; + } + else + { + actual.Message = executionError.InnerException.Message; + } + } + + return actual; + } +} diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ErrorVisitor.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ErrorVisitor.cs index f6ca66e71..0c2ff6efe 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ErrorVisitor.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ErrorVisitor.cs @@ -33,11 +33,6 @@ internal static class ErrorVisitor log.LogError(context.OriginalException, "Failed to resolve execute query."); } - if (context.OriginalException is ValidationException or DomainException) - { - context.Exception = new ExecutionError(context.OriginalException.Message); - } - return Task.CompletedTask; }; } diff --git a/backend/src/Squidex/Config/Web/WebServices.cs b/backend/src/Squidex/Config/Web/WebServices.cs index 245ec9f39..d00d3a606 100644 --- a/backend/src/Squidex/Config/Web/WebServices.cs +++ b/backend/src/Squidex/Config/Web/WebServices.cs @@ -7,6 +7,7 @@ using GraphQL; using GraphQL.DI; +using GraphQL.Execution; using GraphQL.Server.Transports.AspNetCore; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Infrastructure; @@ -17,6 +18,7 @@ using Squidex.Config.Domain; using Squidex.Domain.Apps.Core.Contents; using Squidex.Domain.Apps.Entities; using Squidex.Domain.Apps.Entities.Contents.GraphQL; +using Squidex.Domain.Apps.Entities.Contents.GraphQL.Types; using Squidex.Infrastructure.Caching; using Squidex.Infrastructure.Json.Objects; using Squidex.Pipeline.Plugins; @@ -107,6 +109,7 @@ public static class WebServices services.AddGraphQL(builder => { builder.UseApolloTracing(); + builder.AddErrorInfoProvider(); builder.AddSchema(); builder.AddSystemTextJson(); builder.AddDataLoader();