1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.ApiSpec.Admin.StatusOperation do
6 alias OpenApiSpex.Operation
7 alias OpenApiSpex.Schema
8 alias Pleroma.Web.ApiSpec.Schemas.Account
9 alias Pleroma.Web.ApiSpec.Schemas.ApiError
10 alias Pleroma.Web.ApiSpec.Schemas.FlakeID
11 alias Pleroma.Web.ApiSpec.Schemas.Status
12 alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope
14 import Pleroma.Web.ApiSpec.Helpers
15 import Pleroma.Web.ApiSpec.StatusOperation, only: [id_param: 0]
17 def open_api_operation(action) do
18 operation = String.to_existing_atom("#{action}_operation")
19 apply(__MODULE__, operation, [])
22 def index_operation do
24 tags: ["Admin", "Statuses"],
25 operationId: "AdminAPI.StatusController.index",
26 security: [%{"oAuth" => ["read:statuses"]}],
31 %Schema{type: :boolean, default: false},
32 "Allows to see private statuses"
37 %Schema{type: :boolean, default: false},
38 "Excludes remote statuses"
43 %Schema{type: :boolean, default: false},
44 "Allows to see reblogs"
49 %Schema{type: :integer, default: 1},
55 %Schema{type: :integer, default: 50},
56 "Number of statuses to return"
61 Operation.response("Array of statuses", "application/json", %Schema{
71 tags: ["Admin", "Statuses"],
72 summary: "Show Status",
73 operationId: "AdminAPI.StatusController.show",
74 parameters: [id_param()],
75 security: [%{"oAuth" => ["read:statuses"]}],
77 200 => Operation.response("Status", "application/json", status()),
78 404 => Operation.response("Not Found", "application/json", ApiError)
83 def update_operation do
85 tags: ["Admin", "Statuses"],
86 summary: "Change the scope of an individual reported status",
87 operationId: "AdminAPI.StatusController.update",
88 parameters: [id_param()],
89 security: [%{"oAuth" => ["write:statuses"]}],
90 requestBody: request_body("Parameters", update_request(), required: true),
92 200 => Operation.response("Status", "application/json", Status),
93 400 => Operation.response("Error", "application/json", ApiError)
98 def delete_operation do
100 tags: ["Admin", "Statuses"],
101 summary: "Delete an individual reported status",
102 operationId: "AdminAPI.StatusController.delete",
103 parameters: [id_param()],
104 security: [%{"oAuth" => ["write:statuses"]}],
106 200 => empty_object_response(),
107 404 => Operation.response("Not Found", "application/json", ApiError)
119 account: %Schema{allOf: [Account, admin_account()]}
131 avatar: %Schema{type: :string},
132 nickname: %Schema{type: :string},
133 display_name: %Schema{type: :string},
134 deactivated: %Schema{type: :boolean},
135 local: %Schema{type: :boolean},
139 admin: %Schema{type: :boolean},
140 moderator: %Schema{type: :boolean}
143 tags: %Schema{type: :string},
144 confirmation_pending: %Schema{type: :string}
149 defp update_request do
155 description: "Mark status and attached media as sensitive?"
157 visibility: VisibilityScope
160 "visibility" => "private",
161 "sensitive" => "false"