91 lines
2.3 KiB
Elixir
91 lines
2.3 KiB
Elixir
defmodule Mobilizon.GraphQL.Schema.ActivityType do
|
|
@moduledoc """
|
|
Schema representation for Activity
|
|
"""
|
|
use Absinthe.Schema.Notation
|
|
|
|
alias Mobilizon.Actors.{Actor, Member}
|
|
alias Mobilizon.Discussions.{Comment, Discussion}
|
|
alias Mobilizon.Events.Event
|
|
alias Mobilizon.Posts.Post
|
|
alias Mobilizon.Resources.Resource
|
|
|
|
enum :activity_type do
|
|
value(:event, description: "Activities concerning events")
|
|
value(:post, description: "Activities concerning posts")
|
|
value(:discussion, description: "Activities concerning discussions")
|
|
value(:resource, description: "Activities concerning resources")
|
|
value(:group, description: "Activities concerning group settings")
|
|
value(:member, description: "Activities concerning members")
|
|
end
|
|
|
|
enum :activity_author do
|
|
value(:self, description: "Activities created by the current actor")
|
|
value(:by, description: "Activities created by others")
|
|
end
|
|
|
|
object :activity_param_item do
|
|
meta(:authorize, :user)
|
|
field(:key, :string)
|
|
field(:value, :string)
|
|
end
|
|
|
|
interface :activity_object do
|
|
meta(:authorize, :user)
|
|
field(:id, :id)
|
|
|
|
resolve_type(fn
|
|
%Event{}, _ ->
|
|
:event
|
|
|
|
%Post{}, _ ->
|
|
:post
|
|
|
|
%Actor{type: "Group"}, _ ->
|
|
:group
|
|
|
|
%Member{}, _ ->
|
|
:member
|
|
|
|
%Resource{}, _ ->
|
|
:resource
|
|
|
|
%Discussion{}, _ ->
|
|
:discussion
|
|
|
|
%Comment{}, _ ->
|
|
:comment
|
|
|
|
%Actor{type: :Group}, _ ->
|
|
:group
|
|
|
|
_, _ ->
|
|
nil
|
|
end)
|
|
end
|
|
|
|
@desc """
|
|
A paginated list of activity items
|
|
"""
|
|
object :paginated_activity_list do
|
|
meta(:authorize, :user)
|
|
field(:elements, list_of(:activity), description: "A list of activities")
|
|
field(:total, :integer, description: "The total number of elements in the list")
|
|
end
|
|
|
|
object :activity do
|
|
meta(:authorize, :user)
|
|
field(:id, :id, description: "The activity item ID")
|
|
field(:inserted_at, :datetime, description: "When was the activity inserted")
|
|
field(:priority, :integer)
|
|
field(:type, :activity_type)
|
|
field(:subject, :string)
|
|
field(:subject_params, list_of(:activity_param_item))
|
|
field(:message, :string)
|
|
field(:message_params, list_of(:activity_param_item))
|
|
field(:object, :activity_object)
|
|
field(:author, :actor)
|
|
field(:group, :group)
|
|
end
|
|
end
|