69 lines
2.2 KiB
Elixir
69 lines
2.2 KiB
Elixir
|
defmodule Mobilizon.GraphQL.Schema.MediaType do
|
||
|
@moduledoc """
|
||
|
Schema representation for Medias
|
||
|
"""
|
||
|
use Absinthe.Schema.Notation
|
||
|
|
||
|
alias Mobilizon.GraphQL.Resolvers.Media
|
||
|
|
||
|
@desc "A media"
|
||
|
object :media do
|
||
|
field(:id, :id, description: "The media's ID")
|
||
|
field(:alt, :string, description: "The media's alternative text")
|
||
|
field(:name, :string, description: "The media's name")
|
||
|
field(:url, :string, description: "The media's full URL")
|
||
|
field(:content_type, :string, description: "The media's detected content type")
|
||
|
field(:size, :integer, description: "The media's size")
|
||
|
end
|
||
|
|
||
|
@desc """
|
||
|
A paginated list of medias
|
||
|
"""
|
||
|
object :paginated_media_list do
|
||
|
field(:elements, list_of(:media), description: "The list of medias")
|
||
|
field(:total, :integer, description: "The total number of medias in the list")
|
||
|
end
|
||
|
|
||
|
@desc "An attached media or a link to a media"
|
||
|
input_object :media_input do
|
||
|
# Either a full media object
|
||
|
field(:media, :media_input_object, description: "A full media attached")
|
||
|
# Or directly the ID of an existing media
|
||
|
field(:media_id, :id, description: "The ID of an existing media")
|
||
|
end
|
||
|
|
||
|
@desc "An attached media"
|
||
|
input_object :media_input_object do
|
||
|
field(:name, non_null(:string), description: "The media's name")
|
||
|
field(:alt, :string, description: "The media's alternative text")
|
||
|
field(:file, non_null(:upload), description: "The media file")
|
||
|
field(:actor_id, :id, description: "The media owner")
|
||
|
end
|
||
|
|
||
|
object :media_queries do
|
||
|
@desc "Get a media"
|
||
|
field :media, :media do
|
||
|
arg(:id, non_null(:id), description: "The media ID")
|
||
|
resolve(&Media.media/3)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
object :media_mutations do
|
||
|
@desc "Upload a media"
|
||
|
field :upload_media, :media do
|
||
|
arg(:name, non_null(:string), description: "The media's name")
|
||
|
arg(:alt, :string, description: "The media's alternative text")
|
||
|
arg(:file, non_null(:upload), description: "The media file")
|
||
|
resolve(&Media.upload_media/3)
|
||
|
end
|
||
|
|
||
|
@desc """
|
||
|
Remove a media
|
||
|
"""
|
||
|
field :remove_media, :deleted_object do
|
||
|
arg(:id, non_null(:id), description: "The media's ID")
|
||
|
resolve(&Media.remove_media/3)
|
||
|
end
|
||
|
end
|
||
|
end
|