mirror of
https://akkoma.dev/AkkomaGang/akkoma.git
synced 2024-12-14 22:30:44 +00:00
d7d159c49f
The spec was copied from another endpoint, including the operation id, leading to scrubbing the valid parameters from the request and simply not working.
187 lines
5.6 KiB
Elixir
187 lines
5.6 KiB
Elixir
defmodule Pleroma.Web.ApiSpec.FrontendSettingsOperation do
|
|
alias OpenApiSpex.Operation
|
|
alias OpenApiSpex.Schema
|
|
import Pleroma.Web.ApiSpec.Helpers
|
|
|
|
@spec open_api_operation(atom) :: Operation.t()
|
|
def open_api_operation(action) do
|
|
operation = String.to_existing_atom("#{action}_operation")
|
|
apply(__MODULE__, operation, [])
|
|
end
|
|
|
|
@spec list_profiles_operation() :: Operation.t()
|
|
def list_profiles_operation() do
|
|
%Operation{
|
|
tags: ["Frontends"],
|
|
summary: "Frontend Settings Profiles",
|
|
description: "List frontend setting profiles",
|
|
operationId: "AkkomaAPI.FrontendSettingsController.list_profiles",
|
|
parameters: [frontend_name_param()],
|
|
security: [%{"oAuth" => ["read:accounts"]}],
|
|
responses: %{
|
|
200 =>
|
|
Operation.response("Profiles", "application/json", %Schema{
|
|
type: :array,
|
|
items: %Schema{
|
|
type: :object,
|
|
properties: %{
|
|
name: %Schema{type: :string},
|
|
version: %Schema{type: :integer}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
end
|
|
|
|
@spec get_profile_operation() :: Operation.t()
|
|
def get_profile_operation() do
|
|
%Operation{
|
|
tags: ["Frontends"],
|
|
summary: "Frontend Settings Profile",
|
|
description: "Get frontend setting profile",
|
|
operationId: "AkkomaAPI.FrontendSettingsController.get_profile",
|
|
security: [%{"oAuth" => ["read:accounts"]}],
|
|
parameters: [frontend_name_param(), profile_name_param()],
|
|
responses: %{
|
|
200 =>
|
|
Operation.response("Profile", "application/json", %Schema{
|
|
type: :object,
|
|
properties: %{
|
|
"version" => %Schema{type: :integer},
|
|
"settings" => %Schema{type: :object, additionalProperties: true}
|
|
}
|
|
}),
|
|
404 => Operation.response("Not Found", "application/json", %Schema{type: :object})
|
|
}
|
|
}
|
|
end
|
|
|
|
@spec delete_profile_operation() :: Operation.t()
|
|
def delete_profile_operation() do
|
|
%Operation{
|
|
tags: ["Frontends"],
|
|
summary: "Delete frontend Settings Profile",
|
|
description: "Delete frontend setting profile",
|
|
operationId: "AkkomaAPI.FrontendSettingsController.delete_profile",
|
|
security: [%{"oAuth" => ["write:accounts"]}],
|
|
parameters: [frontend_name_param(), profile_name_param()],
|
|
responses: %{
|
|
200 => Operation.response("Empty", "application/json", %Schema{type: :object}),
|
|
404 => Operation.response("Not Found", "application/json", %Schema{type: :object})
|
|
}
|
|
}
|
|
end
|
|
|
|
@spec update_profile_operation() :: Operation.t()
|
|
def update_profile_operation() do
|
|
%Operation{
|
|
tags: ["Frontends"],
|
|
summary: "Frontend Settings Profile",
|
|
description: "Update frontend setting profile",
|
|
operationId: "AkkomaAPI.FrontendSettingsController.update_profile_operation",
|
|
security: [%{"oAuth" => ["write:accounts"]}],
|
|
parameters: [frontend_name_param(), profile_name_param()],
|
|
requestBody: profile_body_param(),
|
|
responses: %{
|
|
200 => Operation.response("Settings", "application/json", %Schema{type: :object}),
|
|
422 => Operation.response("Invalid", "application/json", %Schema{type: :object})
|
|
}
|
|
}
|
|
end
|
|
|
|
def available_frontends_operation() do
|
|
%Operation{
|
|
tags: ["Frontends"],
|
|
summary: "Frontend Settings Profiles",
|
|
description: "List frontend setting profiles",
|
|
operationId: "AkkomaAPI.FrontendSettingsController.available_frontends",
|
|
responses: %{
|
|
200 =>
|
|
Operation.response("Frontends", "application/json", %Schema{
|
|
type: :array,
|
|
items: %Schema{
|
|
type: :string
|
|
}
|
|
})
|
|
}
|
|
}
|
|
end
|
|
|
|
def update_preferred_frontend_operation() do
|
|
%Operation{
|
|
tags: ["Frontends"],
|
|
summary: "Update preferred frontend setting",
|
|
description: "Store preferred frontend in cookies",
|
|
operationId: "AkkomaAPI.FrontendSettingsController.update_preferred_frontend",
|
|
requestBody:
|
|
request_body(
|
|
"Frontend",
|
|
%Schema{
|
|
type: :object,
|
|
required: [:frontend_name],
|
|
properties: %{
|
|
frontend_name: %Schema{
|
|
type: :string,
|
|
description: "Frontend name"
|
|
}
|
|
}
|
|
},
|
|
required: true
|
|
),
|
|
responses: %{
|
|
200 =>
|
|
Operation.response("Frontends", "application/json", %Schema{
|
|
type: :object,
|
|
properties: %{
|
|
frontend_name: %Schema{
|
|
type: :string
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
end
|
|
|
|
def frontend_name_param do
|
|
Operation.parameter(:frontend_name, :path, :string, "Frontend name",
|
|
example: "pleroma-fe",
|
|
required: true
|
|
)
|
|
end
|
|
|
|
def profile_name_param do
|
|
Operation.parameter(:profile_name, :path, :string, "Profile name",
|
|
example: "mobile",
|
|
required: true
|
|
)
|
|
end
|
|
|
|
def profile_body_param do
|
|
request_body(
|
|
"Settings",
|
|
%Schema{
|
|
title: "Frontend Setting Profile",
|
|
type: :object,
|
|
required: [:version, :settings],
|
|
properties: %{
|
|
version: %Schema{
|
|
type: :integer,
|
|
description: "Version of the profile, must increment by 1 each time",
|
|
example: 1
|
|
},
|
|
settings: %Schema{
|
|
type: :object,
|
|
description: "Settings of the profile",
|
|
example: %{
|
|
theme: "dark",
|
|
locale: "en"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
required: true
|
|
)
|
|
end
|
|
end
|