@@ -969,41 +969,11 @@ defmodule AshSql.Aggregate do
969969 { :cont , { :ok , [ aggregate | aggregates ] } }
970970
971971 aggregate , { :ok , aggregates } ->
972- related = Ash.Resource.Info . related ( resource , aggregate . relationship_path )
973-
974- read_action =
975- aggregate . read_action || Ash.Resource.Info . primary_action! ( related , :read ) . name
976-
977- with % { valid?: true } = aggregate_query <- Ash.Query . for_read ( related , read_action ) ,
978- % { valid?: true } = aggregate_query <-
979- Ash.Query . build ( aggregate_query , filter: aggregate . filter , sort: aggregate . sort ) do
980- Ash.Query.Aggregate . new (
981- resource ,
982- aggregate . name ,
983- aggregate . kind ,
984- path: aggregate . relationship_path ,
985- query: aggregate_query ,
986- field: aggregate . field ,
987- default: aggregate . default ,
988- filterable?: aggregate . filterable? ,
989- type: aggregate . type ,
990- sortable?: aggregate . filterable? ,
991- include_nil?: aggregate . include_nil? ,
992- constraints: aggregate . constraints ,
993- implementation: aggregate . implementation ,
994- uniq?: aggregate . uniq? ,
995- read_action:
996- aggregate . read_action ||
997- Ash.Resource.Info . primary_action! (
998- Ash.Resource.Info . related ( resource , aggregate . relationship_path ) ,
999- :read
1000- ) . name ,
1001- authorize?: aggregate . authorize?
1002- )
1003- else
1004- % { errors: errors } ->
1005- { :error , errors }
1006- end
972+ resource
973+ |> resource_aggregate_to_aggregate ( aggregate ,
974+ actor: private_context [ :actor ] ,
975+ tenant: private_context [ :tenant ]
976+ )
1007977 |> case do
1008978 { :ok , aggregate } ->
1009979 aggregate =
@@ -1027,6 +997,44 @@ defmodule AshSql.Aggregate do
1027997 end )
1028998 end
1029999
1000+ @ doc false
1001+ def resource_aggregate_to_aggregate ( resource , aggregate , opts \\ [ ] ) do
1002+ related = Ash.Resource.Info . related ( resource , aggregate . relationship_path )
1003+
1004+ read_action =
1005+ aggregate . read_action || Ash.Resource.Info . primary_action! ( related , :read ) . name
1006+
1007+ with % { valid?: true } = aggregate_query <-
1008+ Ash.Query . for_read ( related , read_action , % { } ,
1009+ actor: opts [ :actor ] ,
1010+ tenant: opts [ :tenant ]
1011+ ) ,
1012+ % { valid?: true } = aggregate_query <-
1013+ Ash.Query . build ( aggregate_query , filter: aggregate . filter , sort: aggregate . sort ) do
1014+ Ash.Query.Aggregate . new (
1015+ resource ,
1016+ aggregate . name ,
1017+ aggregate . kind ,
1018+ path: aggregate . relationship_path ,
1019+ query: aggregate_query ,
1020+ field: aggregate . field ,
1021+ default: aggregate . default ,
1022+ filterable?: aggregate . filterable? ,
1023+ type: aggregate . type ,
1024+ sortable?: aggregate . filterable? ,
1025+ include_nil?: aggregate . include_nil? ,
1026+ constraints: aggregate . constraints ,
1027+ implementation: aggregate . implementation ,
1028+ uniq?: aggregate . uniq? ,
1029+ read_action: read_action ,
1030+ authorize?: aggregate . authorize?
1031+ )
1032+ else
1033+ % { errors: errors } ->
1034+ { :error , errors }
1035+ end
1036+ end
1037+
10301038 defp add_first_join_aggregate (
10311039 query ,
10321040 _resource ,
0 commit comments