Introduce the group activity section

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2021-02-24 19:06:48 +01:00
parent d0567f783d
commit 3fe64a4389
70 changed files with 3224 additions and 70 deletions

View File

@@ -0,0 +1,78 @@
defmodule Mobilizon.GraphQL.Schema.ActivityType do
@moduledoc """
Schema representation for Activity
"""
use Absinthe.Schema.Notation
alias Mobilizon.Actors.{Actor, Member}
alias Mobilizon.Discussions.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
object :activity_param_item do
field(:key, :string)
field(:value, :string)
end
interface :activity_object do
field(:id, :id)
resolve_type(fn
%Event{}, _ ->
:event
%Post{}, _ ->
:post
%Actor{type: "Group"}, _ ->
:group
%Member{}, _ ->
:member
%Resource{}, _ ->
:resource
%Discussion{}, _ ->
:discussion
%Actor{type: :Group}, _ ->
:group
_, _ ->
nil
end)
end
@desc """
A paginated list of activity items
"""
object :paginated_activity_list do
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
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

View File

@@ -10,6 +10,7 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
alias Mobilizon.Addresses
alias Mobilizon.GraphQL.Resolvers.{
Activity,
Discussion,
Followers,
Group,
@@ -28,7 +29,7 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
Represents a group of actors
"""
object :group do
interfaces([:actor, :interactable])
interfaces([:actor, :interactable, :activity_object])
field(:id, :id, description: "Internal ID for this group")
field(:url, :string, description: "The ActivityPub actor's URL")
@@ -142,6 +143,19 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
resolve(&Followers.find_followers_for_group/3)
description("A paginated list of the followers this group has")
end
field :activity, :paginated_activity_list do
arg(:page, :integer,
default_value: 1,
description: "The page in the paginated activity items list"
)
arg(:limit, :integer, default_value: 10, description: "The limit of activity items per page")
arg(:type, :activity_type, description: "Filter by type of activity")
resolve(&Activity.group_activity/3)
description("The group activity")
end
end
@desc """

View File

@@ -10,6 +10,7 @@ defmodule Mobilizon.GraphQL.Schema.Actors.MemberType do
Represents a member of a group
"""
object :member do
interfaces([:activity_object])
field(:id, :id, description: "The member's ID")
field(:parent, :group, description: "Of which the profile is member")
field(:actor, :person, description: "Which profile is member of")

View File

@@ -11,6 +11,7 @@ defmodule Mobilizon.GraphQL.Schema.Discussions.DiscussionType do
@desc "A discussion"
object :discussion do
interfaces([:activity_object])
field(:id, :id, description: "Internal ID for this discussion")
field(:title, :string, description: "The title for this discussion")
field(:slug, :string, description: "The slug for the discussion")

View File

@@ -17,7 +17,7 @@ defmodule Mobilizon.GraphQL.Schema.EventType do
@desc "An event"
object :event do
interfaces([:action_log_object, :interactable])
interfaces([:action_log_object, :interactable, :activity_object])
field(:id, :id, description: "Internal ID for this event")
field(:uuid, :uuid, description: "The Event UUID")
field(:url, :string, description: "The ActivityPub Event URL")

View File

@@ -7,6 +7,7 @@ defmodule Mobilizon.GraphQL.Schema.PostType do
@desc "A post"
object :post do
interfaces([:activity_object])
field(:id, :id, description: "The post's ID")
field(:title, :string, description: "The post's title")
field(:slug, :string, description: "The post's slug")

View File

@@ -9,6 +9,7 @@ defmodule Mobilizon.GraphQL.Schema.ResourceType do
@desc "A resource"
object :resource do
interfaces([:activity_object])
field(:id, :id, description: "The resource's ID")
field(:title, :string, description: "The resource's title")
field(:summary, :string, description: "The resource's summary")