moxley

moxley

I’m creating a read AshGraphql query, and I want it to return an error for certain conditions. When I call Ash.Query.add_error(query, "some error message") or similar in the action prepare, the GraphQL query returns:

%{
  "data" => %{"listMemberSelfSubscriptions" => nil},
  "errors" => [
    %{
      "locations" => [%{"column" => 3, "line" => 2}],
      "message" => "Something went wrong. Unique error id: `dd416b26-3ffd-4731-aae3-279a2131cb05`",
      "path" => ["listMemberSelfSubscriptions"]
    }
  ]
}

It always returns a generic “Something went wrong”. How do I pass an error message to the response?

If I use raw Ash.Query without AshGraphql, calling Ash.Query.add_error() results in an UnknownError:

 %Ash.Error.Unknown{
   errors: [
     %Ash.Error.Unknown.UnknownError{
       error: ": Test error",
       field: nil,
       value: nil,
       splode: Ash.Error,
       bread_crumbs: [],
       vars: [],
       path: [],
       stacktrace: #Splode.Stacktrace<>,
       class: :unknown
     }
   ]
 }

For that matter, how do I use Ash.Query.add_error()? There’s no documentation for it:

Showing Posts 1 to 7

moxley

moxley OP

I tried this as well: Error Handling — ash v3.29.3, but Ash.Error.Changes.Required.new/1 is not defined.

So then I used struct literal syntax, and it resulted in the error appearing in the AshGraph response:

prepare fn query, _context do
  error =
    %Ash.Error.Changes.Required{
      field: :foo,
      type: :attribute
    }

  Ash.Query.add_error(query, error)
end

...

resp_body #=> %{
  "data" => nil,
  "errors" => [
    %{
      "code" => "required",
      "fields" => ["foo"],
      "locations" => [%{"column" => 3, "line" => 2}],
      "message" => "is required",
      "path" => ["listMemberSelfSubscriptions"],
      "short_message" => "is required",
      "vars" => []
    }
  ]
}

I think if I play around with one of the other Ash error modules, I’ll find what I need to make this work correctly.

zachdaniel

zachdaniel

Creator of Ash

Ahh, that doc is out of date for 3.0, sorry! Using exception modules like that is “the way”, the only difference is that all our errors are exceptions, so you’d use .exception as if it was any other error. It’s all powered by the library (which was extracted out of Ash) called Splode API Reference — splode v0.3.1

Then, these errors have a specific protocol defined for them to allow them to be exposed over an API (differs depending on the API). You can also define your own errors and use those, if you implement the appropriate protocol.

You can see examples here: ash_graphql/lib/error.ex at main · ash-project/ash_graphql · GitHub

zachdaniel

zachdaniel

Creator of Ash

Did some mild reconstruction of the relevant docs and type specs. The add_error functions point to the error handling guide, and more examples of returning errors have been added to that guide as well. Finally, the last section links to the relevant protocols that must be implemented to show custom errors in APIs.

zachdaniel

zachdaniel

Creator of Ash

Since a release was just done yesterday, I was able to publish these new docs, so the hexdocs for Ash should reflect these updates as of now.

zachdaniel

zachdaniel

Creator of Ash

As you yourself have pointed out, there is still a very long way to go for docs in general, but I’ve begun the (slow and steady) process of beefing up docs, adding links, type specs function docs etc. This will continue for a while. Others in the community are also pitching in which is great. Shout out to @allenwyma especially.

moxley

moxley OP

That’s great to hear! I’ll keep an eye our for opportunities to pitch in with some documentation PRs.

allenwyma

allenwyma

thank you for the recognition. Still trying to squeeze in time for docs!

— All posts loaded —

Where Next? Top

Trending in Questions Top

water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New

Other Trending Topics Top

budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews