total rebase
[anni] / lib / pleroma / web / api_spec / schemas / poll.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.ApiSpec.Schemas.Poll do
6   alias OpenApiSpex.Schema
7   alias Pleroma.Web.ApiSpec.Schemas.Emoji
8   alias Pleroma.Web.ApiSpec.Schemas.FlakeID
9
10   require OpenApiSpex
11
12   OpenApiSpex.schema(%{
13     title: "Poll",
14     description: "Represents a poll attached to a status",
15     type: :object,
16     properties: %{
17       id: FlakeID,
18       expires_at: %Schema{
19         type: :string,
20         format: :"date-time",
21         nullable: true,
22         description: "When the poll ends"
23       },
24       expired: %Schema{type: :boolean, description: "Is the poll currently expired?"},
25       multiple: %Schema{
26         type: :boolean,
27         description: "Does the poll allow multiple-choice answers?"
28       },
29       votes_count: %Schema{
30         type: :integer,
31         description: "How many votes have been received. Number."
32       },
33       voters_count: %Schema{
34         type: :integer,
35         description: "How many unique accounts have voted. Number."
36       },
37       voted: %Schema{
38         type: :boolean,
39         nullable: true,
40         description:
41           "When called with a user token, has the authorized user voted? Boolean, or null if no current user."
42       },
43       emojis: %Schema{
44         type: :array,
45         items: Emoji,
46         description: "Custom emoji to be used for rendering poll options."
47       },
48       options: %Schema{
49         type: :array,
50         items: %Schema{
51           title: "PollOption",
52           type: :object,
53           properties: %{
54             title: %Schema{type: :string},
55             votes_count: %Schema{type: :integer}
56           }
57         },
58         description: "Possible answers for the poll."
59       },
60       pleroma: %Schema{
61         type: :object,
62         properties: %{
63           non_anonymous: %Schema{
64             type: :boolean,
65             description: "Can voters be publicly identified?"
66           }
67         }
68       }
69     },
70     example: %{
71       id: "34830",
72       expires_at: "2019-12-05T04:05:08.302Z",
73       expired: true,
74       multiple: false,
75       votes_count: 10,
76       voters_count: 10,
77       voted: true,
78       own_votes: [
79         1
80       ],
81       options: [
82         %{
83           title: "accept",
84           votes_count: 6
85         },
86         %{
87           title: "deny",
88           votes_count: 4
89         }
90       ],
91       emojis: [],
92       pleroma: %{
93         non_anonymous: false
94       }
95     }
96   })
97 end