# Aggregates causing error in AshGraphQL

`Order`s have many `OrderItem`s have many `OrderItemModifier`s

`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

LOL, indeed it was a typo:

`:sub_total` in the Order aggregate :subtotal should be `:subtotal`

Now to test if this chain of calculations and aggregates works.

1 Like

We should definitely make that errror better, can you open an issue?

1 Like
1 Like