m9t
Use metadata to return additional information
Hi there!
I’m using ash_json_api and I’m trying to add metadata to the response of a create action, but it doesn’t seem to be included in the meta field. I’ve got the following relevant pieces in my resource:
json_api do
type "asset"
routes do
base "/assets"
get :read
index :read
post :create
end
end
actions do
defaults [:read]
create :create do
# Set the current user as the owner of the asset
change relate_actor(:user)
# Create signed url for the asset
metadata :signed_url, :string, allow_nil?: false
change Swoop.Media.Changes.GeneratePresignedUrl
end
end
In GeneratePresignedUrl I’m returning this in a after_action function:
result = Ash.Resource.put_metadata(result, :signed_url, url)
{:ok, result}
But unfortunately after doing a POST to the endpoint with curl, I’m getting empty meta fields:
{"data":{"attributes":{},"id":"11700f40-c37b-4776-b3b0-7d1207cbb6d0","links":{},"meta":{},"relationships":{},"type":"asset"},"jsonapi":{"version":"1.0"},"links":{"self":"http://localhost:4000/api/json/assets"},"meta":{}}
What am I missing?
Thanks in advance!
Most Liked
zachdaniel
The way you are attempting to use it is actually its intended use case
However, it just hasn’t been hooked up to ash_json_api yet. AshGraphql has a way to expose metadata in exactly that same way. It requires some adjustments to our open api schema generation logic, because we need to do one of three things:
- allow you to configure a special type name for the results of the action, i.e
asset-with-url - we have to add that
metato all types - we have to keep
metaas untyped “object”
Its a solvable problem, just hasn’t been implemented yet ![]()
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #hex










