added api spec

This commit is contained in:
Maksim Pechnikov 2020-10-28 11:57:46 +03:00 committed by Alexander Strizhakov
parent f0eb5cf5b2
commit bc83fedfb3
No known key found for this signature in database
GPG Key ID: 022896A53AEF1381
3 changed files with 91 additions and 3 deletions

View File

@ -10,6 +10,7 @@ defmodule Pleroma.Web.AdminAPI.TagController do
alias Pleroma.ModerationLog
alias Pleroma.User
alias Pleroma.Web.AdminAPI
alias Pleroma.Web.ApiSpec
alias Pleroma.Web.Plugs.OAuthScopesPlug
plug(
@ -22,15 +23,19 @@ defmodule Pleroma.Web.AdminAPI.TagController do
%{scopes: ["read:accounts"], admin: true} when action in [:list]
)
plug(ApiSpec.CastAndValidate)
action_fallback(AdminAPI.FallbackController)
defdelegate open_api_operation(action), to: ApiSpec.Admin.TagOperation
def list(%{assigns: %{user: _admin}} = conn, _) do
tags = Pleroma.Tag.list_tags()
json(conn, tags)
end
def tag(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames, "tags" => tags}) do
def tag(%{assigns: %{user: admin}} = conn, %{nicknames: nicknames, tags: tags}) do
with {:ok, _} <- User.tag(nicknames, tags) do
ModerationLog.insert_log(%{
actor: admin,
@ -43,7 +48,7 @@ defmodule Pleroma.Web.AdminAPI.TagController do
end
end
def untag(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames, "tags" => tags}) do
def untag(%{assigns: %{user: admin}} = conn, %{nicknames: nicknames, tags: tags}) do
with {:ok, _} <- User.untag(nicknames, tags) do
ModerationLog.insert_log(%{
actor: admin,

View File

@ -0,0 +1,83 @@
# 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.Admin.TagOperation do
alias OpenApiSpex.Operation
alias OpenApiSpex.Schema
import Pleroma.Web.ApiSpec.Helpers
def open_api_operation(action) do
operation = String.to_existing_atom("#{action}_operation")
apply(__MODULE__, operation, [])
end
def list_operation do
%Operation{
tags: ["Admin", "Tags"],
summary: "List available tags.",
operationId: "AdminAPI.TagController.list",
responses: %{
200 =>
Operation.response("Array of tags", "application/json", %Schema{
type: :array,
items: %Schema{type: :string}
})
},
security: [%{"oAuth" => ["read:accounts"]}]
}
end
def tag_operation do
%Operation{
tags: ["Admin", "Tags"],
summary: "Adds tags to users.",
operationId: "AdminAPI.TagController.tag",
parameters: [
Operation.parameter(
:nicknames,
:query,
%Schema{type: :array, items: %Schema{type: :string}},
"User's nicknames"
),
Operation.parameter(
:tags,
:query,
%Schema{type: :array, items: %Schema{type: :string}},
"tags"
)
],
responses: %{
200 => empty_object_response()
},
security: [%{"oAuth" => ["write:accounts"]}]
}
end
def untag_operation do
%Operation{
tags: ["Admin", "Tags"],
summary: "Remove tags from users.",
operationId: "AdminAPI.TagController.untag",
parameters: [
Operation.parameter(
:nicknames,
:query,
%Schema{type: :array, items: %Schema{type: :string}},
"User's nicknames"
),
Operation.parameter(
:tags,
:query,
%Schema{type: :array, items: %Schema{type: :string}},
"tags"
)
],
responses: %{
200 => empty_object_response()
},
security: [%{"oAuth" => ["write:accounts"]}]
}
end
end

View File

@ -40,7 +40,7 @@ defmodule Pleroma.Web.AdminAPI.TagControllerTest do
conn
|> put_req_header("accept", "application/json")
|> get("/api/pleroma/admin/users/tag")
|> json_response(200)
|> json_response_and_validate_schema(200)
assert [
"mrf_tag:disable-any-subscription",