Improve GraphQL documentation and cleanup API
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -19,6 +19,9 @@ defmodule Mobilizon.GraphQL.Schema.Actors.FollowerType do
|
||||
field(:updated_at, :datetime, description: "When the follow was updated")
|
||||
end
|
||||
|
||||
@desc """
|
||||
A paginated list of follower objects
|
||||
"""
|
||||
object :paginated_follower_list do
|
||||
field(:elements, list_of(:follower), description: "A list of followers")
|
||||
field(:total, :integer, description: "The total number of elements in the list")
|
||||
|
||||
@@ -54,10 +54,18 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
|
||||
|
||||
# This one should have a privacy setting
|
||||
field :organized_events, :paginated_event_list do
|
||||
arg(:after_datetime, :datetime, default_value: nil)
|
||||
arg(:before_datetime, :datetime, default_value: nil)
|
||||
arg(:page, :integer, default_value: 1)
|
||||
arg(:limit, :integer, default_value: 10)
|
||||
arg(:after_datetime, :datetime,
|
||||
default_value: nil,
|
||||
description: "Filter events that begin after this datetime"
|
||||
)
|
||||
|
||||
arg(:before_datetime, :datetime,
|
||||
default_value: nil,
|
||||
description: "Filter events that begin before this datetime"
|
||||
)
|
||||
|
||||
arg(:page, :integer, default_value: 1, description: "The page in the paginated event list")
|
||||
arg(:limit, :integer, default_value: 10, description: "The limit of events per page")
|
||||
resolve(&Group.find_events_for_group/3)
|
||||
description("A list of the events this actor has organized")
|
||||
end
|
||||
@@ -74,23 +82,27 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
|
||||
)
|
||||
|
||||
field :members, :paginated_member_list do
|
||||
arg(:page, :integer, default_value: 1)
|
||||
arg(:limit, :integer, default_value: 10)
|
||||
arg(:roles, :string, default_value: "")
|
||||
arg(:page, :integer, default_value: 1, description: "The page in the paginated member list")
|
||||
arg(:limit, :integer, default_value: 10, description: "The limit of members per page")
|
||||
arg(:roles, :string, default_value: "", description: "Filter members by their role")
|
||||
resolve(&Member.find_members_for_group/3)
|
||||
description("A paginated list of group members")
|
||||
end
|
||||
|
||||
field :resources, :paginated_resource_list do
|
||||
arg(:page, :integer, default_value: 1)
|
||||
arg(:limit, :integer, default_value: 10)
|
||||
arg(:page, :integer,
|
||||
default_value: 1,
|
||||
description: "The page in the paginated resource list"
|
||||
)
|
||||
|
||||
arg(:limit, :integer, default_value: 10, description: "The limit of resources per page")
|
||||
resolve(&Resource.find_resources_for_group/3)
|
||||
description("A paginated list of the resources this group has")
|
||||
end
|
||||
|
||||
field :posts, :paginated_post_list do
|
||||
arg(:page, :integer, default_value: 1)
|
||||
arg(:limit, :integer, default_value: 10)
|
||||
arg(:page, :integer, default_value: 1, description: "The page in the paginated post list")
|
||||
arg(:limit, :integer, default_value: 10, description: "The limit of posts per page")
|
||||
resolve(&Post.find_posts_for_group/3)
|
||||
description("A paginated list of the posts this group has")
|
||||
end
|
||||
@@ -120,9 +132,12 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
|
||||
value(:open, description: "The actor is open to followings")
|
||||
end
|
||||
|
||||
@desc """
|
||||
A paginated list of groups
|
||||
"""
|
||||
object :paginated_group_list do
|
||||
field(:elements, list_of(:group), description: "A list of groups")
|
||||
field(:total, :integer, description: "The total number of elements in the list")
|
||||
field(:total, :integer, description: "The total number of groups in the list")
|
||||
end
|
||||
|
||||
@desc "The list of visibility options for a group"
|
||||
@@ -134,25 +149,33 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
|
||||
object :group_queries do
|
||||
@desc "Get all groups"
|
||||
field :groups, :paginated_group_list do
|
||||
arg(:preferred_username, :string, default_value: "")
|
||||
arg(:name, :string, default_value: "")
|
||||
arg(:domain, :string, default_value: "")
|
||||
arg(:local, :boolean, default_value: true)
|
||||
arg(:suspended, :boolean, default_value: false)
|
||||
arg(:page, :integer, default_value: 1)
|
||||
arg(:limit, :integer, default_value: 10)
|
||||
arg(:preferred_username, :string, default_value: "", description: "Filter by username")
|
||||
arg(:name, :string, default_value: "", description: "Filter by name")
|
||||
arg(:domain, :string, default_value: "", description: "Filter by domain")
|
||||
|
||||
arg(:local, :boolean,
|
||||
default_value: true,
|
||||
description: "Filter whether group is local or not"
|
||||
)
|
||||
|
||||
arg(:suspended, :boolean, default_value: false, description: "Filter by suspended status")
|
||||
arg(:page, :integer, default_value: 1, description: "The page in the paginated group list")
|
||||
arg(:limit, :integer, default_value: 10, description: "The limit of groups per page")
|
||||
resolve(&Group.list_groups/3)
|
||||
end
|
||||
|
||||
@desc "Get a group by its ID"
|
||||
field :get_group, :group do
|
||||
arg(:id, non_null(:id))
|
||||
arg(:id, non_null(:id), description: "The group ID")
|
||||
resolve(&Group.get_group/3)
|
||||
end
|
||||
|
||||
@desc "Get a group by its preferred username"
|
||||
field :group, :group do
|
||||
arg(:preferred_username, non_null(:string))
|
||||
arg(:preferred_username, non_null(:string),
|
||||
description: "The group preferred_username, eventually containing their domain if remote"
|
||||
)
|
||||
|
||||
resolve(&Group.find_group/3)
|
||||
end
|
||||
end
|
||||
@@ -162,8 +185,6 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
|
||||
field :create_group, :group do
|
||||
arg(:preferred_username, non_null(:string), description: "The name for the group")
|
||||
|
||||
arg(:creator_actor_id, non_null(:id), description: "The identity that creates the group")
|
||||
|
||||
arg(:name, :string, description: "The displayed name for the group")
|
||||
arg(:summary, :string, description: "The summary for the group", default_value: "")
|
||||
|
||||
@@ -182,7 +203,7 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
|
||||
"The banner for the group, either as an object or directly the ID of an existing Picture"
|
||||
)
|
||||
|
||||
arg(:physical_address, :address_input)
|
||||
arg(:physical_address, :address_input, description: "The physical address for the group")
|
||||
|
||||
resolve(&Group.create_group/3)
|
||||
end
|
||||
@@ -210,14 +231,14 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
|
||||
"The banner for the group, either as an object or directly the ID of an existing Picture"
|
||||
)
|
||||
|
||||
arg(:physical_address, :address_input)
|
||||
arg(:physical_address, :address_input, description: "The physical address for the group")
|
||||
|
||||
resolve(&Group.update_group/3)
|
||||
end
|
||||
|
||||
@desc "Delete a group"
|
||||
field :delete_group, :deleted_object do
|
||||
arg(:group_id, non_null(:id))
|
||||
arg(:group_id, non_null(:id), description: "The group ID")
|
||||
|
||||
resolve(&Group.delete_group/3)
|
||||
end
|
||||
|
||||
@@ -19,16 +19,22 @@ defmodule Mobilizon.GraphQL.Schema.Actors.MemberType do
|
||||
field(:updated_at, :naive_datetime, description: "When was this member updated")
|
||||
end
|
||||
|
||||
@desc """
|
||||
Values for a member role
|
||||
"""
|
||||
enum :member_role_enum do
|
||||
value(:not_approved)
|
||||
value(:invited)
|
||||
value(:member)
|
||||
value(:moderator)
|
||||
value(:administrator)
|
||||
value(:creator)
|
||||
value(:rejected)
|
||||
value(:not_approved, description: "The member needs to be approved by the group admins")
|
||||
value(:invited, description: "The member has been invited")
|
||||
value(:member, description: "Regular member")
|
||||
value(:moderator, description: "The member is a moderator")
|
||||
value(:administrator, description: "The member is an administrator")
|
||||
value(:creator, description: "The member was the creator of the group. Shouldn't be used.")
|
||||
value(:rejected, description: "The member has been rejected or excluded from the group")
|
||||
end
|
||||
|
||||
@desc """
|
||||
A paginated list of members
|
||||
"""
|
||||
object :paginated_member_list do
|
||||
field(:elements, list_of(:member), description: "A list of members")
|
||||
field(:total, :integer, description: "The total number of elements in the list")
|
||||
@@ -37,51 +43,54 @@ defmodule Mobilizon.GraphQL.Schema.Actors.MemberType do
|
||||
object :member_mutations do
|
||||
@desc "Join a group"
|
||||
field :join_group, :member do
|
||||
arg(:group_id, non_null(:id))
|
||||
arg(:group_id, non_null(:id), description: "The group ID")
|
||||
|
||||
resolve(&Group.join_group/3)
|
||||
end
|
||||
|
||||
@desc "Leave a group"
|
||||
field :leave_group, :deleted_object do
|
||||
arg(:group_id, non_null(:id))
|
||||
arg(:group_id, non_null(:id), description: "The group ID")
|
||||
|
||||
resolve(&Group.leave_group/3)
|
||||
end
|
||||
|
||||
@desc "Invite an actor to join the group"
|
||||
field :invite_member, :member do
|
||||
arg(:group_id, non_null(:id))
|
||||
arg(:target_actor_username, non_null(:string))
|
||||
arg(:group_id, non_null(:id), description: "The group ID")
|
||||
|
||||
arg(:target_actor_username, non_null(:string),
|
||||
description: "The targeted person's federated username"
|
||||
)
|
||||
|
||||
resolve(&Member.invite_member/3)
|
||||
end
|
||||
|
||||
@desc "Accept an invitation to a group"
|
||||
field :accept_invitation, :member do
|
||||
arg(:id, non_null(:id))
|
||||
arg(:id, non_null(:id), description: "The member ID")
|
||||
|
||||
resolve(&Member.accept_invitation/3)
|
||||
end
|
||||
|
||||
@desc "Reject an invitation to a group"
|
||||
field :reject_invitation, :member do
|
||||
arg(:id, non_null(:id))
|
||||
arg(:id, non_null(:id), description: "The member ID")
|
||||
|
||||
resolve(&Member.reject_invitation/3)
|
||||
end
|
||||
|
||||
field :update_member, :member do
|
||||
arg(:member_id, non_null(:id))
|
||||
arg(:role, non_null(:member_role_enum))
|
||||
arg(:member_id, non_null(:id), description: "The member ID")
|
||||
arg(:role, non_null(:member_role_enum), description: "The new member role")
|
||||
|
||||
resolve(&Member.update_member/3)
|
||||
end
|
||||
|
||||
@desc "Remove a member from a group"
|
||||
field :remove_member, :member do
|
||||
arg(:group_id, non_null(:id))
|
||||
arg(:member_id, non_null(:id))
|
||||
arg(:group_id, non_null(:id), description: "The group ID")
|
||||
arg(:member_id, non_null(:id), description: "The member ID")
|
||||
|
||||
resolve(&Member.remove_member/3)
|
||||
end
|
||||
|
||||
@@ -58,8 +58,8 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
field(:organized_events, :paginated_event_list,
|
||||
description: "A list of the events this actor has organized"
|
||||
) do
|
||||
arg(:page, :integer, default_value: 1)
|
||||
arg(:limit, :integer, default_value: 10)
|
||||
arg(:page, :integer, default_value: 1, description: "The page in the paginated event list")
|
||||
arg(:limit, :integer, default_value: 10, description: "The limit of events per page")
|
||||
resolve(&Person.organized_events_for_person/3)
|
||||
end
|
||||
|
||||
@@ -68,8 +68,14 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
description: "The list of events this person goes to"
|
||||
) do
|
||||
arg(:event_id, :id)
|
||||
arg(:page, :integer, default_value: 1)
|
||||
arg(:limit, :integer, default_value: 10)
|
||||
|
||||
arg(:page, :integer,
|
||||
default_value: 1,
|
||||
description: "The page in the paginated participation list"
|
||||
)
|
||||
|
||||
arg(:limit, :integer, default_value: 10, description: "The limit of participations per page")
|
||||
|
||||
resolve(&Person.person_participations/3)
|
||||
end
|
||||
|
||||
@@ -81,6 +87,14 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
end
|
||||
end
|
||||
|
||||
@desc """
|
||||
A paginated list of persons
|
||||
"""
|
||||
object :paginated_person_list do
|
||||
field(:elements, list_of(:person), description: "A list of persons")
|
||||
field(:total, :integer, description: "The total number of persons in the list")
|
||||
end
|
||||
|
||||
object :person_queries do
|
||||
@desc "Get the current actor for the logged-in user"
|
||||
field :logged_person, :person do
|
||||
@@ -89,13 +103,13 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
|
||||
@desc "Get a person by its (federated) username"
|
||||
field :fetch_person, :person do
|
||||
arg(:preferred_username, non_null(:string))
|
||||
arg(:preferred_username, non_null(:string), description: "The person's federated username")
|
||||
resolve(&Person.fetch_person/3)
|
||||
end
|
||||
|
||||
@desc "Get a person by its ID"
|
||||
field :person, :person do
|
||||
arg(:id, non_null(:id))
|
||||
arg(:id, non_null(:id), description: "The person ID")
|
||||
resolve(&Person.get_person/3)
|
||||
end
|
||||
|
||||
@@ -104,14 +118,20 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
resolve(&Person.identities/3)
|
||||
end
|
||||
|
||||
field :persons, :persons do
|
||||
arg(:preferred_username, :string, default_value: "")
|
||||
arg(:name, :string, default_value: "")
|
||||
arg(:domain, :string, default_value: "")
|
||||
arg(:local, :boolean, default_value: true)
|
||||
arg(:suspended, :boolean, default_value: false)
|
||||
arg(:page, :integer, default_value: 1)
|
||||
arg(:limit, :integer, default_value: 10)
|
||||
@desc "List the profiles"
|
||||
field :persons, :paginated_person_list do
|
||||
arg(:preferred_username, :string, default_value: "", description: "Filter by username")
|
||||
arg(:name, :string, default_value: "", description: "Filter by name")
|
||||
arg(:domain, :string, default_value: "", description: "Filter by domain")
|
||||
|
||||
arg(:local, :boolean,
|
||||
default_value: true,
|
||||
description: "Filter by profile being local or not"
|
||||
)
|
||||
|
||||
arg(:suspended, :boolean, default_value: false, description: "Filter by suspended status")
|
||||
arg(:page, :integer, default_value: 1, description: "The page in the paginated person list")
|
||||
arg(:limit, :integer, default_value: 10, description: "The limit of persons per page")
|
||||
resolve(&Person.list_persons/3)
|
||||
end
|
||||
end
|
||||
@@ -119,7 +139,7 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
object :person_mutations do
|
||||
@desc "Create a new person for user"
|
||||
field :create_person, :person do
|
||||
arg(:preferred_username, non_null(:string))
|
||||
arg(:preferred_username, non_null(:string), description: "The username for the profile")
|
||||
|
||||
arg(:name, :string, description: "The displayed name for the new profile", default_value: "")
|
||||
|
||||
@@ -140,7 +160,7 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
|
||||
@desc "Update an identity"
|
||||
field :update_person, :person do
|
||||
arg(:id, non_null(:id))
|
||||
arg(:id, non_null(:id), description: "The person's ID")
|
||||
|
||||
arg(:name, :string, description: "The displayed name for this profile")
|
||||
|
||||
@@ -161,14 +181,14 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
|
||||
@desc "Delete an identity"
|
||||
field :delete_person, :person do
|
||||
arg(:id, non_null(:id))
|
||||
arg(:id, non_null(:id), description: "The person's ID")
|
||||
|
||||
resolve(&Person.delete_person/3)
|
||||
end
|
||||
|
||||
@desc "Register a first profile on registration"
|
||||
field :register_person, :person do
|
||||
arg(:preferred_username, non_null(:string))
|
||||
arg(:preferred_username, non_null(:string), description: "The username for the profile")
|
||||
|
||||
arg(:name, :string, description: "The displayed name for the new profile", default_value: "")
|
||||
|
||||
@@ -190,16 +210,18 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
end
|
||||
|
||||
object :person_subscriptions do
|
||||
@desc "Notify when a person's participation's status changed for an event"
|
||||
field :event_person_participation_changed, :person do
|
||||
arg(:person_id, non_null(:id))
|
||||
arg(:person_id, non_null(:id), description: "The person's ID")
|
||||
|
||||
config(fn args, _ ->
|
||||
{:ok, topic: args.person_id}
|
||||
end)
|
||||
end
|
||||
|
||||
@desc "Notify when a person's membership's status changed for a group"
|
||||
field :group_membership_changed, :person do
|
||||
arg(:person_id, non_null(:id))
|
||||
arg(:person_id, non_null(:id), description: "The person's ID")
|
||||
|
||||
config(fn args, _ ->
|
||||
{:ok, topic: args.person_id}
|
||||
|
||||
Reference in New Issue
Block a user