From 4f363120f7fb3aac118c489c56d7263ebff779b3 Mon Sep 17 00:00:00 2001 From: Peter Sanchez Date: Thu, 23 May 2024 11:39:50 -0600 Subject: [PATCH] Handling error properly when a graphql query formatting error is detected --- helpers.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/helpers.go b/helpers.go index 7d1fbb2..6f77a84 100644 --- a/helpers.go +++ b/helpers.go @@ -40,12 +40,15 @@ import ( "netlandish.com/x/gobwebs/validate" ) -// ErrorExtension ... -type ErrorExtension struct { +type errorExtension struct { Code int Field string } +type queryErrorExtension struct { + Code string `json:"code"` +} + var orgSlugKey = "organization.Slug" var tzKey = "user.tz" @@ -56,20 +59,26 @@ func ParseInputErrors(c echo.Context, graphError *gqlclient.Error, fMap gobwebs. if len(graphError.Extensions) == 0 { return graphError } - var ext ErrorExtension + + inputErrs := validate.NewInputErrors() + var ext errorExtension err := json.Unmarshal(graphError.Extensions, &ext) if err != nil { - // Need to address invalid query errors here as they show as - // json parsing errors when it's valid json. Ie, + // Try for query error // {"code":"GRAPHQL_VALIDATION_FAILED"} - return err + var qext queryErrorExtension + err = json.Unmarshal(graphError.Extensions, &qext) + if err != nil { + return err + } + inputErrs["_global_"] = []string{fmt.Sprintf("Query error: %s", qext.Code)} + return inputErrs } if ext.Code == valid.ErrNotFoundCode { return echo.NotFoundHandler(c) } - inputErrs := validate.NewInputErrors() if ext.Code == valid.ErrValidationGlobalCode { inputErrs["_global_"] = []string{graphError.Message} return inputErrs -- 2.45.2