BryanJBryce
Orders have many OrderItems have many OrderItemModifiers
OrderItem and OrderItemModifier both have attributes of quantity and price
I want Order to be able to aggregate/calculate the total for the order.
First I looked at Aggregates, specifically at sum, but since I need to do multiplication I thought maybe a Calculation would be needed. I’d like to do it as an expression so that Postgres is doing the calculation/aggregation and not Elixir code.
Update: I think I figured this out, Calculations and Aggregates are not an either or thing where if Aggregates don’t work use Calculations, you can also build up complex logic by combing simple calculations and Aggregates, I think…
I still have an error in GraphQL with one of the Aggregates, so I’m going to put my solution here and see if there’s an issue with it:
OrderItemModifier:
calculations do
calculate :total, :decimal, expr(price * quantity)
end
OrderItem:
calculations do
calculate :subtotal, :decimal, expr(price * quantity + modifiers_total)
end
aggregates do
sum :modifiers_total, :modifiers, :total
end
Order:
aggregates do
sum :subtotal, :order_items, :sub_total
sum :tax_total, :order_taxes, :percentage
end
calculations do
calculate :total, :decimal, expr(subtotal * tax_total)
end
It could just be a typo somewhere (GraphQL errors like this are typically basic Ash errors that don’t get caught), but I’m getting this error from AshGraphQL after trying to compile this new code:
== Compilation error in file lib/point_of_sale/schema.ex ==
** (UndefinedFunctionError) function nil.embedded?/0 is undefined. If you are using the dot syntax, such as module.function(), make sure the left-hand side of the dot is a module atom
nil.embedded?()
(ash_graphql 0.26.9) lib/resource/resource.ex:2473: AshGraphql.Resource.filterable?/2
(elixir 1.16.1) lib/enum.ex:4277: Enum.filter_list/2
(ash_graphql 0.26.9) lib/resource/resource.ex:2386: AshGraphql.Resource.aggregate_filter_fields/2
(ash_graphql 0.26.9) lib/resource/resource.ex:2352: AshGraphql.Resource.resource_filter_fields/2
(ash_graphql 0.26.9) lib/resource/resource.ex:1283: AshGraphql.Resource.args/5
(ash_graphql 0.26.9) lib/resource/resource.ex:473: anonymous fn/6 in AshGraphql.Resource.queries/5
(elixir 1.16.1) lib/enum.ex:1700: Enum.“-map/2-lists^map/1-1-”/2
Trending in Questions
Other Trending Topics
Latest Ash Threads
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
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #ai
- #phoenix_html
- #elixirconf-us
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 4- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
BryanJBryce
LOL, indeed it was a typo:
:sub_totalin the Order aggregate :subtotal should be:subtotalNow to test if this chain of calculations and aggregates works.
zachdaniel
We should definitely make that errror better, can you open an issue?
BryanJBryce
BryanJBryce
Logged here: Better error for typos in Aggregates when using AshGraphQL · Issue #115 · ash-project/ash_graphql · GitHub