334 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			334 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
# Pleroma: A lightweight social networking server
 | 
						|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 | 
						|
# SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
 | 
						|
defmodule Pleroma.Web.ApiSpec.Schemas.Status do
 | 
						|
  alias OpenApiSpex.Schema
 | 
						|
  alias Pleroma.Web.ApiSpec.Schemas.Account
 | 
						|
  alias Pleroma.Web.ApiSpec.Schemas.Attachment
 | 
						|
  alias Pleroma.Web.ApiSpec.Schemas.Emoji
 | 
						|
  alias Pleroma.Web.ApiSpec.Schemas.FlakeID
 | 
						|
  alias Pleroma.Web.ApiSpec.Schemas.Poll
 | 
						|
  alias Pleroma.Web.ApiSpec.Schemas.Tag
 | 
						|
  alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope
 | 
						|
 | 
						|
  require OpenApiSpex
 | 
						|
 | 
						|
  OpenApiSpex.schema(%{
 | 
						|
    title: "Status",
 | 
						|
    description: "Response schema for a status",
 | 
						|
    type: :object,
 | 
						|
    properties: %{
 | 
						|
      account: %Schema{allOf: [Account], description: "The account that authored this status"},
 | 
						|
      application: %Schema{
 | 
						|
        description: "The application used to post this status",
 | 
						|
        type: :object,
 | 
						|
        properties: %{
 | 
						|
          name: %Schema{type: :string},
 | 
						|
          website: %Schema{type: :string, nullable: true, format: :uri}
 | 
						|
        }
 | 
						|
      },
 | 
						|
      bookmarked: %Schema{type: :boolean, description: "Have you bookmarked this status?"},
 | 
						|
      card: %Schema{
 | 
						|
        type: :object,
 | 
						|
        nullable: true,
 | 
						|
        description: "Preview card for links included within status content",
 | 
						|
        required: [:url, :title, :description, :type],
 | 
						|
        properties: %{
 | 
						|
          type: %Schema{
 | 
						|
            type: :string,
 | 
						|
            enum: ["link", "photo", "video", "rich"],
 | 
						|
            description: "The type of the preview card"
 | 
						|
          },
 | 
						|
          provider_name: %Schema{
 | 
						|
            type: :string,
 | 
						|
            nullable: true,
 | 
						|
            description: "The provider of the original resource"
 | 
						|
          },
 | 
						|
          provider_url: %Schema{
 | 
						|
            type: :string,
 | 
						|
            format: :uri,
 | 
						|
            description: "A link to the provider of the original resource"
 | 
						|
          },
 | 
						|
          url: %Schema{type: :string, format: :uri, description: "Location of linked resource"},
 | 
						|
          image: %Schema{
 | 
						|
            type: :string,
 | 
						|
            nullable: true,
 | 
						|
            format: :uri,
 | 
						|
            description: "Preview thumbnail"
 | 
						|
          },
 | 
						|
          title: %Schema{type: :string, description: "Title of linked resource"},
 | 
						|
          description: %Schema{type: :string, description: "Description of preview"}
 | 
						|
        }
 | 
						|
      },
 | 
						|
      content: %Schema{type: :string, format: :html, description: "HTML-encoded status content"},
 | 
						|
      text: %Schema{
 | 
						|
        type: :string,
 | 
						|
        description: "Original unformatted content in plain text",
 | 
						|
        nullable: true
 | 
						|
      },
 | 
						|
      created_at: %Schema{
 | 
						|
        type: :string,
 | 
						|
        format: "date-time",
 | 
						|
        description: "The date when this status was created"
 | 
						|
      },
 | 
						|
      emojis: %Schema{
 | 
						|
        type: :array,
 | 
						|
        items: Emoji,
 | 
						|
        description: "Custom emoji to be used when rendering status content"
 | 
						|
      },
 | 
						|
      favourited: %Schema{type: :boolean, description: "Have you favourited this status?"},
 | 
						|
      favourites_count: %Schema{
 | 
						|
        type: :integer,
 | 
						|
        description: "How many favourites this status has received"
 | 
						|
      },
 | 
						|
      id: FlakeID,
 | 
						|
      in_reply_to_account_id: %Schema{
 | 
						|
        allOf: [FlakeID],
 | 
						|
        nullable: true,
 | 
						|
        description: "ID of the account being replied to"
 | 
						|
      },
 | 
						|
      in_reply_to_id: %Schema{
 | 
						|
        allOf: [FlakeID],
 | 
						|
        nullable: true,
 | 
						|
        description: "ID of the status being replied"
 | 
						|
      },
 | 
						|
      language: %Schema{
 | 
						|
        type: :string,
 | 
						|
        nullable: true,
 | 
						|
        description: "Primary language of this status"
 | 
						|
      },
 | 
						|
      media_attachments: %Schema{
 | 
						|
        type: :array,
 | 
						|
        items: Attachment,
 | 
						|
        description: "Media that is attached to this status"
 | 
						|
      },
 | 
						|
      mentions: %Schema{
 | 
						|
        type: :array,
 | 
						|
        description: "Mentions of users within the status content",
 | 
						|
        items: %Schema{
 | 
						|
          type: :object,
 | 
						|
          properties: %{
 | 
						|
            id: %Schema{allOf: [FlakeID], description: "The account id of the mentioned user"},
 | 
						|
            acct: %Schema{
 | 
						|
              type: :string,
 | 
						|
              description:
 | 
						|
                "The webfinger acct: URI of the mentioned user. Equivalent to `username` for local users, or `username@domain` for remote users."
 | 
						|
            },
 | 
						|
            username: %Schema{type: :string, description: "The username of the mentioned user"},
 | 
						|
            url: %Schema{
 | 
						|
              type: :string,
 | 
						|
              format: :uri,
 | 
						|
              description: "The location of the mentioned user's profile"
 | 
						|
            }
 | 
						|
          }
 | 
						|
        }
 | 
						|
      },
 | 
						|
      muted: %Schema{
 | 
						|
        type: :boolean,
 | 
						|
        description: "Have you muted notifications for this status's conversation?"
 | 
						|
      },
 | 
						|
      pinned: %Schema{
 | 
						|
        type: :boolean,
 | 
						|
        description: "Have you pinned this status? Only appears if the status is pinnable."
 | 
						|
      },
 | 
						|
      pleroma: %Schema{
 | 
						|
        type: :object,
 | 
						|
        properties: %{
 | 
						|
          content: %Schema{
 | 
						|
            type: :object,
 | 
						|
            additionalProperties: %Schema{type: :string},
 | 
						|
            description:
 | 
						|
              "A map consisting of alternate representations of the `content` property with the key being it's mimetype. Currently the only alternate representation supported is `text/plain`"
 | 
						|
          },
 | 
						|
          conversation_id: %Schema{
 | 
						|
            type: :integer,
 | 
						|
            description: "The ID of the AP context the status is associated with (if any)"
 | 
						|
          },
 | 
						|
          direct_conversation_id: %Schema{
 | 
						|
            type: :integer,
 | 
						|
            nullable: true,
 | 
						|
            description:
 | 
						|
              "The ID of the Mastodon direct message conversation the status is associated with (if any)"
 | 
						|
          },
 | 
						|
          emoji_reactions: %Schema{
 | 
						|
            type: :array,
 | 
						|
            description:
 | 
						|
              "A list with emoji / reaction maps. Contains no information about the reacting users, for that use the /statuses/:id/reactions endpoint.",
 | 
						|
            items: %Schema{
 | 
						|
              type: :object,
 | 
						|
              properties: %{
 | 
						|
                name: %Schema{type: :string},
 | 
						|
                count: %Schema{type: :integer},
 | 
						|
                me: %Schema{type: :boolean}
 | 
						|
              }
 | 
						|
            }
 | 
						|
          },
 | 
						|
          expires_at: %Schema{
 | 
						|
            type: :string,
 | 
						|
            format: "date-time",
 | 
						|
            nullable: true,
 | 
						|
            description:
 | 
						|
              "A datetime (ISO 8601) that states when the post will expire (be deleted automatically), or empty if the post won't expire"
 | 
						|
          },
 | 
						|
          in_reply_to_account_acct: %Schema{
 | 
						|
            type: :string,
 | 
						|
            nullable: true,
 | 
						|
            description: "The `acct` property of User entity for replied user (if any)"
 | 
						|
          },
 | 
						|
          local: %Schema{
 | 
						|
            type: :boolean,
 | 
						|
            description: "`true` if the post was made on the local instance"
 | 
						|
          },
 | 
						|
          spoiler_text: %Schema{
 | 
						|
            type: :object,
 | 
						|
            additionalProperties: %Schema{type: :string},
 | 
						|
            description:
 | 
						|
              "A map consisting of alternate representations of the `spoiler_text` property with the key being it's mimetype. Currently the only alternate representation supported is `text/plain`."
 | 
						|
          },
 | 
						|
          thread_muted: %Schema{
 | 
						|
            type: :boolean,
 | 
						|
            description: "`true` if the thread the post belongs to is muted"
 | 
						|
          },
 | 
						|
          parent_visible: %Schema{
 | 
						|
            type: :boolean,
 | 
						|
            description: "`true` if the parent post is visible to the user"
 | 
						|
          }
 | 
						|
        }
 | 
						|
      },
 | 
						|
      poll: %Schema{allOf: [Poll], nullable: true, description: "The poll attached to the status"},
 | 
						|
      reblog: %Schema{
 | 
						|
        allOf: [%OpenApiSpex.Reference{"$ref": "#/components/schemas/Status"}],
 | 
						|
        nullable: true,
 | 
						|
        description: "The status being reblogged"
 | 
						|
      },
 | 
						|
      reblogged: %Schema{type: :boolean, description: "Have you boosted this status?"},
 | 
						|
      reblogs_count: %Schema{
 | 
						|
        type: :integer,
 | 
						|
        description: "How many boosts this status has received"
 | 
						|
      },
 | 
						|
      replies_count: %Schema{
 | 
						|
        type: :integer,
 | 
						|
        description: "How many replies this status has received"
 | 
						|
      },
 | 
						|
      sensitive: %Schema{
 | 
						|
        type: :boolean,
 | 
						|
        description: "Is this status marked as sensitive content?"
 | 
						|
      },
 | 
						|
      spoiler_text: %Schema{
 | 
						|
        type: :string,
 | 
						|
        description:
 | 
						|
          "Subject or summary line, below which status content is collapsed until expanded"
 | 
						|
      },
 | 
						|
      tags: %Schema{type: :array, items: Tag},
 | 
						|
      uri: %Schema{
 | 
						|
        type: :string,
 | 
						|
        format: :uri,
 | 
						|
        description: "URI of the status used for federation"
 | 
						|
      },
 | 
						|
      url: %Schema{
 | 
						|
        type: :string,
 | 
						|
        nullable: true,
 | 
						|
        format: :uri,
 | 
						|
        description: "A link to the status's HTML representation"
 | 
						|
      },
 | 
						|
      visibility: %Schema{
 | 
						|
        allOf: [VisibilityScope],
 | 
						|
        description: "Visibility of this status"
 | 
						|
      }
 | 
						|
    },
 | 
						|
    example: %{
 | 
						|
      "account" => %{
 | 
						|
        "acct" => "nick6",
 | 
						|
        "avatar" => "http://localhost:4001/images/avi.png",
 | 
						|
        "avatar_static" => "http://localhost:4001/images/avi.png",
 | 
						|
        "bot" => false,
 | 
						|
        "created_at" => "2020-04-07T19:48:51.000Z",
 | 
						|
        "display_name" => "Test テスト User 6",
 | 
						|
        "emojis" => [],
 | 
						|
        "fields" => [],
 | 
						|
        "followers_count" => 1,
 | 
						|
        "following_count" => 0,
 | 
						|
        "header" => "http://localhost:4001/images/banner.png",
 | 
						|
        "header_static" => "http://localhost:4001/images/banner.png",
 | 
						|
        "id" => "9toJCsKN7SmSf3aj5c",
 | 
						|
        "locked" => false,
 | 
						|
        "note" => "Tester Number 6",
 | 
						|
        "pleroma" => %{
 | 
						|
          "background_image" => nil,
 | 
						|
          "confirmation_pending" => false,
 | 
						|
          "hide_favorites" => true,
 | 
						|
          "hide_followers" => false,
 | 
						|
          "hide_followers_count" => false,
 | 
						|
          "hide_follows" => false,
 | 
						|
          "hide_follows_count" => false,
 | 
						|
          "is_admin" => false,
 | 
						|
          "is_moderator" => false,
 | 
						|
          "relationship" => %{
 | 
						|
            "blocked_by" => false,
 | 
						|
            "blocking" => false,
 | 
						|
            "domain_blocking" => false,
 | 
						|
            "endorsed" => false,
 | 
						|
            "followed_by" => false,
 | 
						|
            "following" => true,
 | 
						|
            "id" => "9toJCsKN7SmSf3aj5c",
 | 
						|
            "muting" => false,
 | 
						|
            "muting_notifications" => false,
 | 
						|
            "requested" => false,
 | 
						|
            "showing_reblogs" => true,
 | 
						|
            "subscribing" => false
 | 
						|
          },
 | 
						|
          "skip_thread_containment" => false,
 | 
						|
          "tags" => []
 | 
						|
        },
 | 
						|
        "source" => %{
 | 
						|
          "fields" => [],
 | 
						|
          "note" => "Tester Number 6",
 | 
						|
          "pleroma" => %{"actor_type" => "Person", "discoverable" => false},
 | 
						|
          "sensitive" => false
 | 
						|
        },
 | 
						|
        "statuses_count" => 1,
 | 
						|
        "url" => "http://localhost:4001/users/nick6",
 | 
						|
        "username" => "nick6"
 | 
						|
      },
 | 
						|
      "application" => %{"name" => "Web", "website" => nil},
 | 
						|
      "bookmarked" => false,
 | 
						|
      "card" => nil,
 | 
						|
      "content" => "foobar",
 | 
						|
      "created_at" => "2020-04-07T19:48:51.000Z",
 | 
						|
      "emojis" => [],
 | 
						|
      "favourited" => false,
 | 
						|
      "favourites_count" => 0,
 | 
						|
      "id" => "9toJCu5YZW7O7gfvH6",
 | 
						|
      "in_reply_to_account_id" => nil,
 | 
						|
      "in_reply_to_id" => nil,
 | 
						|
      "language" => nil,
 | 
						|
      "media_attachments" => [],
 | 
						|
      "mentions" => [],
 | 
						|
      "muted" => false,
 | 
						|
      "pinned" => false,
 | 
						|
      "pleroma" => %{
 | 
						|
        "content" => %{"text/plain" => "foobar"},
 | 
						|
        "conversation_id" => 345_972,
 | 
						|
        "direct_conversation_id" => nil,
 | 
						|
        "emoji_reactions" => [],
 | 
						|
        "expires_at" => nil,
 | 
						|
        "in_reply_to_account_acct" => nil,
 | 
						|
        "local" => true,
 | 
						|
        "spoiler_text" => %{"text/plain" => ""},
 | 
						|
        "thread_muted" => false
 | 
						|
      },
 | 
						|
      "poll" => nil,
 | 
						|
      "reblog" => nil,
 | 
						|
      "reblogged" => false,
 | 
						|
      "reblogs_count" => 0,
 | 
						|
      "replies_count" => 0,
 | 
						|
      "sensitive" => false,
 | 
						|
      "spoiler_text" => "",
 | 
						|
      "tags" => [],
 | 
						|
      "uri" => "http://localhost:4001/objects/0f5dad44-0e9e-4610-b377-a2631e499190",
 | 
						|
      "url" => "http://localhost:4001/notice/9toJCu5YZW7O7gfvH6",
 | 
						|
      "visibility" => "private"
 | 
						|
    }
 | 
						|
  })
 | 
						|
end
 |