2018-11-06 09:30:27 +00:00
|
|
|
defmodule MobilizonWeb.Schema do
|
2019-01-03 13:59:59 +00:00
|
|
|
@moduledoc """
|
|
|
|
GraphQL schema representation
|
|
|
|
"""
|
2018-11-06 09:30:27 +00:00
|
|
|
use Absinthe.Schema
|
|
|
|
|
2019-05-22 12:12:11 +00:00
|
|
|
alias Mobilizon.{Actors, Events, Users, Addresses, Media}
|
2018-11-23 14:03:53 +00:00
|
|
|
alias Mobilizon.Actors.{Actor, Follower, Member}
|
|
|
|
alias Mobilizon.Events.{Event, Comment, Participant}
|
2018-11-06 09:30:27 +00:00
|
|
|
|
|
|
|
import_types(MobilizonWeb.Schema.Custom.UUID)
|
2019-01-14 16:13:17 +00:00
|
|
|
import_types(MobilizonWeb.Schema.Custom.Point)
|
2018-11-06 09:30:27 +00:00
|
|
|
import_types(Absinthe.Type.Custom)
|
|
|
|
import_types(Absinthe.Plug.Types)
|
|
|
|
|
2019-01-25 14:41:10 +00:00
|
|
|
import_types(MobilizonWeb.Schema.UserType)
|
2019-05-22 12:12:11 +00:00
|
|
|
import_types(MobilizonWeb.Schema.PictureType)
|
2019-01-14 16:13:17 +00:00
|
|
|
import_types(MobilizonWeb.Schema.ActorInterface)
|
|
|
|
import_types(MobilizonWeb.Schema.Actors.PersonType)
|
|
|
|
import_types(MobilizonWeb.Schema.Actors.GroupType)
|
|
|
|
import_types(MobilizonWeb.Schema.CommentType)
|
2019-04-12 13:04:32 +00:00
|
|
|
import_types(MobilizonWeb.Schema.SearchType)
|
2019-03-22 09:53:38 +00:00
|
|
|
import_types(MobilizonWeb.Schema.ConfigType)
|
2019-07-23 11:49:22 +00:00
|
|
|
import_types(MobilizonWeb.Schema.ReportType)
|
|
|
|
import_types(MobilizonWeb.Schema.AdminType)
|
2018-11-23 14:03:53 +00:00
|
|
|
|
2019-01-25 08:23:44 +00:00
|
|
|
@desc "A struct containing the id of the deleted object"
|
|
|
|
object :deleted_object do
|
|
|
|
field(:id, :integer)
|
|
|
|
end
|
|
|
|
|
2018-11-06 09:30:27 +00:00
|
|
|
@desc "A JWT and the associated user ID"
|
|
|
|
object :login do
|
2019-08-12 14:04:16 +00:00
|
|
|
field(:access_token, non_null(:string), description: "A JWT Token for this session")
|
2019-08-12 15:41:41 +00:00
|
|
|
|
|
|
|
field(:refresh_token, non_null(:string),
|
|
|
|
description: "A JWT Token to refresh the access token"
|
|
|
|
)
|
|
|
|
|
2018-11-23 14:03:53 +00:00
|
|
|
field(:user, non_null(:user), description: "The user associated to this session")
|
2018-11-06 09:30:27 +00:00
|
|
|
end
|
|
|
|
|
2018-11-23 14:03:53 +00:00
|
|
|
@desc """
|
|
|
|
Represents a notification for an user
|
|
|
|
"""
|
|
|
|
object :notification do
|
|
|
|
field(:id, :integer, description: "The notification ID")
|
|
|
|
field(:user, :user, description: "The user to transmit the notification to")
|
|
|
|
field(:actor, :actor, description: "The notification target profile")
|
|
|
|
|
|
|
|
field(:activity_type, :integer,
|
|
|
|
description:
|
|
|
|
"Whether the notification is about a follow, group join, event change or comment"
|
|
|
|
)
|
|
|
|
|
|
|
|
field(:target_object, :object, description: "The object responsible for the notification")
|
|
|
|
field(:summary, :string, description: "Text inside the notification")
|
|
|
|
field(:seen, :boolean, description: "Whether or not the notification was seen by the user")
|
|
|
|
field(:published, :datetime, description: "Datetime when the notification was published")
|
|
|
|
end
|
|
|
|
|
|
|
|
union :object do
|
|
|
|
types([:event, :person, :group, :comment, :follower, :member, :participant])
|
|
|
|
|
|
|
|
resolve_type(fn
|
|
|
|
%Actor{type: :Person}, _ ->
|
|
|
|
:person
|
|
|
|
|
|
|
|
%Actor{type: :Group}, _ ->
|
|
|
|
:group
|
|
|
|
|
|
|
|
%Event{}, _ ->
|
|
|
|
:event
|
|
|
|
|
|
|
|
%Comment{}, _ ->
|
|
|
|
:comment
|
|
|
|
|
|
|
|
%Follower{}, _ ->
|
|
|
|
:follower
|
|
|
|
|
|
|
|
%Member{}, _ ->
|
|
|
|
:member
|
|
|
|
|
|
|
|
%Participant{}, _ ->
|
|
|
|
:participant
|
|
|
|
end)
|
2018-11-06 09:30:27 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def context(ctx) do
|
|
|
|
loader =
|
|
|
|
Dataloader.new()
|
|
|
|
|> Dataloader.add_source(Actors, Actors.data())
|
2019-03-08 17:52:27 +00:00
|
|
|
|> Dataloader.add_source(Users, Users.data())
|
2018-11-06 09:30:27 +00:00
|
|
|
|> Dataloader.add_source(Events, Events.data())
|
2019-03-22 14:51:23 +00:00
|
|
|
|> Dataloader.add_source(Addresses, Addresses.data())
|
2019-05-22 12:12:11 +00:00
|
|
|
|> Dataloader.add_source(Media, Media.data())
|
2018-11-06 09:30:27 +00:00
|
|
|
|
|
|
|
Map.put(ctx, :loader, loader)
|
|
|
|
end
|
|
|
|
|
|
|
|
def plugins do
|
2019-01-21 14:08:22 +00:00
|
|
|
[Absinthe.Middleware.Dataloader] ++ Absinthe.Plugin.defaults()
|
2018-11-06 09:30:27 +00:00
|
|
|
end
|
|
|
|
|
2018-11-23 14:03:53 +00:00
|
|
|
@desc """
|
|
|
|
Root Query
|
|
|
|
"""
|
2018-11-06 09:30:27 +00:00
|
|
|
query do
|
2019-04-12 13:04:32 +00:00
|
|
|
import_fields(:search_queries)
|
2019-01-25 14:41:10 +00:00
|
|
|
import_fields(:user_queries)
|
|
|
|
import_fields(:person_queries)
|
|
|
|
import_fields(:group_queries)
|
|
|
|
import_fields(:event_queries)
|
|
|
|
import_fields(:participant_queries)
|
2019-02-22 17:07:20 +00:00
|
|
|
import_fields(:tag_queries)
|
2019-03-14 17:31:14 +00:00
|
|
|
import_fields(:address_queries)
|
2019-03-22 09:53:38 +00:00
|
|
|
import_fields(:config_queries)
|
2019-05-22 12:12:11 +00:00
|
|
|
import_fields(:picture_queries)
|
2019-07-23 11:49:22 +00:00
|
|
|
import_fields(:report_queries)
|
|
|
|
import_fields(:admin_queries)
|
2018-11-06 09:30:27 +00:00
|
|
|
end
|
|
|
|
|
2018-11-23 14:03:53 +00:00
|
|
|
@desc """
|
|
|
|
Root Mutation
|
|
|
|
"""
|
2018-11-06 09:30:27 +00:00
|
|
|
mutation do
|
2019-01-25 14:41:10 +00:00
|
|
|
import_fields(:user_mutations)
|
|
|
|
import_fields(:person_mutations)
|
|
|
|
import_fields(:group_mutations)
|
|
|
|
import_fields(:event_mutations)
|
|
|
|
import_fields(:comment_mutations)
|
2019-02-01 14:38:35 +00:00
|
|
|
import_fields(:participant_mutations)
|
2019-03-01 16:11:28 +00:00
|
|
|
import_fields(:member_mutations)
|
2019-03-08 17:52:27 +00:00
|
|
|
import_fields(:feed_token_mutations)
|
2019-05-22 12:12:11 +00:00
|
|
|
import_fields(:picture_mutations)
|
2019-07-23 11:49:22 +00:00
|
|
|
import_fields(:report_mutations)
|
2018-11-06 09:30:27 +00:00
|
|
|
end
|
|
|
|
end
|