forked from AkkomaGang/akkoma
9fcff7851f
Too many changes in OpenAPI spec to describe each one, but basically it is tag fixes, bringing consitency to operation summaries and fixing some incorrect information.
195 lines
5.6 KiB
Elixir
195 lines
5.6 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
defmodule Pleroma.Web.ApiSpec.ListOperation do
|
|
alias OpenApiSpex.Operation
|
|
alias OpenApiSpex.Schema
|
|
alias Pleroma.Web.ApiSpec.Schemas.Account
|
|
alias Pleroma.Web.ApiSpec.Schemas.ApiError
|
|
alias Pleroma.Web.ApiSpec.Schemas.FlakeID
|
|
alias Pleroma.Web.ApiSpec.Schemas.List
|
|
|
|
import Pleroma.Web.ApiSpec.Helpers
|
|
|
|
def open_api_operation(action) do
|
|
operation = String.to_existing_atom("#{action}_operation")
|
|
apply(__MODULE__, operation, [])
|
|
end
|
|
|
|
def index_operation do
|
|
%Operation{
|
|
tags: ["Lists"],
|
|
summary: "Retrieve a list of lists",
|
|
description: "Fetch all lists that the user owns",
|
|
security: [%{"oAuth" => ["read:lists"]}],
|
|
operationId: "ListController.index",
|
|
responses: %{
|
|
200 => Operation.response("Array of List", "application/json", array_of_lists())
|
|
}
|
|
}
|
|
end
|
|
|
|
def create_operation do
|
|
%Operation{
|
|
tags: ["Lists"],
|
|
summary: "Create a list",
|
|
description: "Fetch the list with the given ID. Used for verifying the title of a list.",
|
|
operationId: "ListController.create",
|
|
requestBody: create_update_request(),
|
|
security: [%{"oAuth" => ["write:lists"]}],
|
|
responses: %{
|
|
200 => Operation.response("List", "application/json", List),
|
|
400 => Operation.response("Error", "application/json", ApiError),
|
|
404 => Operation.response("Error", "application/json", ApiError)
|
|
}
|
|
}
|
|
end
|
|
|
|
def show_operation do
|
|
%Operation{
|
|
tags: ["Lists"],
|
|
summary: "Retrieve a list",
|
|
description: "Fetch the list with the given ID. Used for verifying the title of a list.",
|
|
operationId: "ListController.show",
|
|
parameters: [id_param()],
|
|
security: [%{"oAuth" => ["read:lists"]}],
|
|
responses: %{
|
|
200 => Operation.response("List", "application/json", List),
|
|
404 => Operation.response("Error", "application/json", ApiError)
|
|
}
|
|
}
|
|
end
|
|
|
|
def update_operation do
|
|
%Operation{
|
|
tags: ["Lists"],
|
|
summary: "Update a list",
|
|
description: "Change the title of a list",
|
|
operationId: "ListController.update",
|
|
parameters: [id_param()],
|
|
requestBody: create_update_request(),
|
|
security: [%{"oAuth" => ["write:lists"]}],
|
|
responses: %{
|
|
200 => Operation.response("List", "application/json", List),
|
|
422 => Operation.response("Error", "application/json", ApiError)
|
|
}
|
|
}
|
|
end
|
|
|
|
def delete_operation do
|
|
%Operation{
|
|
tags: ["Lists"],
|
|
summary: "Delete a list",
|
|
operationId: "ListController.delete",
|
|
parameters: [id_param()],
|
|
security: [%{"oAuth" => ["write:lists"]}],
|
|
responses: %{
|
|
200 => Operation.response("Empty object", "application/json", %Schema{type: :object})
|
|
}
|
|
}
|
|
end
|
|
|
|
def list_accounts_operation do
|
|
%Operation{
|
|
tags: ["Lists"],
|
|
summary: "Retrieve accounts in list",
|
|
operationId: "ListController.list_accounts",
|
|
parameters: [id_param()],
|
|
security: [%{"oAuth" => ["read:lists"]}],
|
|
responses: %{
|
|
200 =>
|
|
Operation.response("Array of Account", "application/json", %Schema{
|
|
type: :array,
|
|
items: Account
|
|
})
|
|
}
|
|
}
|
|
end
|
|
|
|
def add_to_list_operation do
|
|
%Operation{
|
|
tags: ["Lists"],
|
|
summary: "Add accounts to list",
|
|
description: "Add accounts to the given list.",
|
|
operationId: "ListController.add_to_list",
|
|
parameters: [id_param()],
|
|
requestBody: add_remove_accounts_request(true),
|
|
security: [%{"oAuth" => ["write:lists"]}],
|
|
responses: %{
|
|
200 => Operation.response("Empty object", "application/json", %Schema{type: :object})
|
|
}
|
|
}
|
|
end
|
|
|
|
def remove_from_list_operation do
|
|
%Operation{
|
|
tags: ["Lists"],
|
|
summary: "Remove accounts from list",
|
|
operationId: "ListController.remove_from_list",
|
|
parameters: [
|
|
id_param(),
|
|
Operation.parameter(
|
|
:account_ids,
|
|
:query,
|
|
%Schema{type: :array, items: %Schema{type: :string}},
|
|
"Array of account IDs"
|
|
)
|
|
],
|
|
requestBody: add_remove_accounts_request(false),
|
|
security: [%{"oAuth" => ["write:lists"]}],
|
|
responses: %{
|
|
200 => Operation.response("Empty object", "application/json", %Schema{type: :object})
|
|
}
|
|
}
|
|
end
|
|
|
|
defp array_of_lists do
|
|
%Schema{
|
|
title: "ArrayOfLists",
|
|
description: "Response schema for lists",
|
|
type: :array,
|
|
items: List,
|
|
example: [
|
|
%{"id" => "123", "title" => "my list"},
|
|
%{"id" => "1337", "title" => "another list"}
|
|
]
|
|
}
|
|
end
|
|
|
|
defp id_param do
|
|
Operation.parameter(:id, :path, :string, "List ID",
|
|
example: "123",
|
|
required: true
|
|
)
|
|
end
|
|
|
|
defp create_update_request do
|
|
request_body(
|
|
"Parameters",
|
|
%Schema{
|
|
description: "POST body for creating or updating a List",
|
|
type: :object,
|
|
properties: %{
|
|
title: %Schema{type: :string, description: "List title"}
|
|
},
|
|
required: [:title]
|
|
},
|
|
required: true
|
|
)
|
|
end
|
|
|
|
defp add_remove_accounts_request(required) when is_boolean(required) do
|
|
request_body(
|
|
"Parameters",
|
|
%Schema{
|
|
description: "POST body for adding/removing accounts to/from a List",
|
|
type: :object,
|
|
properties: %{
|
|
account_ids: %Schema{type: :array, description: "Array of account IDs", items: FlakeID}
|
|
}
|
|
},
|
|
required: required
|
|
)
|
|
end
|
|
end
|