[GraphQL] Expose events from followed/member group activity

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2021-10-29 10:42:37 +02:00
parent 88b078ebce
commit 23fddaedf1
5 changed files with 98 additions and 2 deletions

View File

@@ -5,7 +5,7 @@ defmodule Mobilizon.GraphQL.Resolvers.User do
import Mobilizon.Users.Guards
alias Mobilizon.{Actors, Admin, Config, Events, Users}
alias Mobilizon.{Actors, Admin, Config, Events, FollowedGroupActivity, Users}
alias Mobilizon.Actors.Actor
alias Mobilizon.Federation.ActivityPub.{Actions, Relay}
alias Mobilizon.Service.Auth.Authenticator
@@ -633,6 +633,23 @@ defmodule Mobilizon.GraphQL.Resolvers.User do
}}
end
def user_followed_group_events(%User{id: user_id}, %{page: page, limit: limit}, %{
context: %{current_user: %User{id: logged_in_user_id}}
})
when user_id == logged_in_user_id do
activities = FollowedGroupActivity.user_followed_group_events(user_id, page, limit)
activities = %Page{
activities
| elements:
Enum.map(activities.elements, fn [event, group, profile] ->
%{group: group, profile: profile, event: event}
end)
}
{:ok, activities}
end
@spec update_user_login_information(User.t(), map()) ::
{:ok, User.t()} | {:error, Ecto.Changeset.t()}
defp update_user_login_information(

View File

@@ -49,6 +49,7 @@ defmodule Mobilizon.GraphQL.Schema do
import_types(Schema.StatisticsType)
import_types(Schema.Users.PushSubscription)
import_types(Schema.Users.ActivitySetting)
import_types(Schema.FollowedGroupActivityType)
@desc "A struct containing the id of the deleted object"
object :deleted_object do
@@ -157,7 +158,6 @@ defmodule Mobilizon.GraphQL.Schema do
import_fields(:resource_queries)
import_fields(:post_queries)
import_fields(:statistics_queries)
# import_fields(:push_queries)
end
@desc """

View File

@@ -0,0 +1,20 @@
defmodule Mobilizon.GraphQL.Schema.FollowedGroupActivityType do
@moduledoc """
Schema representation for a follow activity
"""
use Absinthe.Schema.Notation
@desc "A paginated list of follow group events"
object :paginated_followed_group_events do
field(:elements, list_of(:followed_group_event), description: "A list of follow group events")
field(:total, :integer, description: "The total number of follow group events in the list")
end
@desc "A follow group event"
object :followed_group_event do
field(:user, :user)
field(:profile, :person)
field(:group, :group)
field(:event, :event)
end
end

View File

@@ -104,6 +104,22 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
resolve(&User.user_drafted_events/3)
end
field(:followed_group_events, :paginated_followed_group_events,
description: "The suggested events from the groups this user follows"
) do
arg(:page, :integer,
default_value: 1,
description: "The page in the follow group events list"
)
arg(:limit, :integer,
default_value: 10,
description: "The limit of follow group events per page"
)
resolve(&User.user_followed_group_events/3)
end
field(:settings, :user_settings, description: "The list of settings for this user") do
resolve(&User.user_settings/3)
end