aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/announcement.ex7
-rw-r--r--lib/pleroma/web/admin_api/controllers/announcement_controller.ex9
-rw-r--r--lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex16
3 files changed, 30 insertions, 2 deletions
diff --git a/lib/pleroma/announcement.ex b/lib/pleroma/announcement.ex
index 8c15d5bdf..6c11eff7e 100644
--- a/lib/pleroma/announcement.ex
+++ b/lib/pleroma/announcement.ex
@@ -61,6 +61,13 @@ defmodule Pleroma.Announcement do
|> Repo.all()
end
+ def list_paginated(%{limit: limited_number, offset: offset_number}) do
+ __MODULE__
+ |> limit(^limited_number)
+ |> offset(^offset_number)
+ |> Repo.all()
+ end
+
def get_by_id(id) do
Repo.get_by(__MODULE__, id: id)
end
diff --git a/lib/pleroma/web/admin_api/controllers/announcement_controller.ex b/lib/pleroma/web/admin_api/controllers/announcement_controller.ex
index 6195e582a..6ad5fc12c 100644
--- a/lib/pleroma/web/admin_api/controllers/announcement_controller.ex
+++ b/lib/pleroma/web/admin_api/controllers/announcement_controller.ex
@@ -16,8 +16,13 @@ defmodule Pleroma.Web.AdminAPI.AnnouncementController do
defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.AnnouncementOperation
- def index(conn, _params) do
- announcements = Announcement.list_all()
+ defp default_limit, do: 20
+
+ def index(conn, params) do
+ limit = Map.get(params, :limit, default_limit())
+ offset = Map.get(params, :offset, 0)
+
+ announcements = Announcement.list_paginated(%{limit: limit, offset: offset})
render(conn, "index.json", announcements: announcements)
end
diff --git a/lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex b/lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex
index cdf04d357..58a039e72 100644
--- a/lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex
+++ b/lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex
@@ -21,8 +21,24 @@ defmodule Pleroma.Web.ApiSpec.Admin.AnnouncementOperation do
summary: "Retrieve a list of announcements",
operationId: "AdminAPI.AnnouncementController.index",
security: [%{"oAuth" => ["admin:read"]}],
+ parameters: [
+ Operation.parameter(
+ :limit,
+ :query,
+ %Schema{type: :integer, minimum: 1},
+ "the maximum number of announcements to return"
+ ),
+ Operation.parameter(
+ :offset,
+ :query,
+ %Schema{type: :integer, minimum: 0},
+ "the offset of the first announcement to return"
+ )
+ | admin_api_params()
+ ],
responses: %{
200 => Operation.response("Response", "application/json", list_of_announcements()),
+ 400 => Operation.response("Forbidden", "application/json", ApiError),
403 => Operation.response("Forbidden", "application/json", ApiError)
}
}