ash_graphql/test/support/resources/channel/channel.ex
2024-02-12 10:06:14 -05:00

74 lines
1.4 KiB
Elixir

defmodule AshGraphql.Test.Channel do
@moduledoc false
use Ash.Resource,
data_layer: Ash.DataLayer.Ets,
extensions: [AshGraphql.Resource]
require Ash.Query
graphql do
type :channel
queries do
get :channel, :read
end
end
actions do
create :create do
primary?(true)
end
read(:read, primary?: true)
update(:update, primary?: true)
destroy(:destroy, primary?: true)
end
attributes do
uuid_primary_key(:id)
create_timestamp(:created_at, private?: false)
end
calculations do
calculate(
:direct_channel_messages,
{:array, AshGraphql.Test.MessageUnion},
fn record,
%{
api: api
} ->
record = api.load!(record, :messages)
{:ok,
record.messages
|> Enum.map(
&%Ash.Union{type: AshGraphql.Test.MessageUnion.struct_to_name(&1), value: &1}
)}
end
)
calculate :indirect_channel_messages,
AshGraphql.Test.PageOfChannelMessages,
AshGraphql.Test.PageOfChannelMessagesCalculation do
argument :offset, :integer do
default(0)
end
argument :limit, :integer do
default(10)
end
end
end
aggregates do
count(:channel_message_count, :messages)
end
relationships do
has_many(:messages, AshGraphql.Test.Message)
end
end