Chats: Introduce /api/v2/pleroma/chats which implements pagination
Also removes incorrect claim that /api/v1/pleroma/chats supports pagination and deprecates it. Closes #2140
This commit is contained in:
parent
d5270a1c41
commit
d7ad288c84
5 changed files with 196 additions and 127 deletions
|
|
@ -131,8 +131,30 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
|
|||
def index_operation do
|
||||
%Operation{
|
||||
tags: ["Chats"],
|
||||
summary: "Retrieve list of chats",
|
||||
summary: "Retrieve list of chats (unpaginated)",
|
||||
deprecated: true,
|
||||
description:
|
||||
"Deprecated due to no support for pagination. Using [/api/v2/pleroma/chats](#operation/ChatController.index2) instead is recommended.",
|
||||
operationId: "ChatController.index",
|
||||
parameters: [
|
||||
Operation.parameter(:with_muted, :query, BooleanLike, "Include chats from muted users")
|
||||
],
|
||||
responses: %{
|
||||
200 => Operation.response("The chats of the user", "application/json", chats_response())
|
||||
},
|
||||
security: [
|
||||
%{
|
||||
"oAuth" => ["read:chats"]
|
||||
}
|
||||
]
|
||||
}
|
||||
end
|
||||
|
||||
def index2_operation do
|
||||
%Operation{
|
||||
tags: ["Chats"],
|
||||
summary: "Retrieve list of chats",
|
||||
operationId: "ChatController.index2",
|
||||
parameters: [
|
||||
Operation.parameter(:with_muted, :query, BooleanLike, "Include chats from muted users")
|
||||
| pagination_params()
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do
|
|||
|
||||
plug(
|
||||
OAuthScopesPlug,
|
||||
%{scopes: ["read:chats"]} when action in [:messages, :index, :show]
|
||||
%{scopes: ["read:chats"]} when action in [:messages, :index, :index2, :show]
|
||||
)
|
||||
|
||||
plug(OpenApiSpex.Plug.CastAndValidate, render_error: Pleroma.Web.ApiSpec.RenderError)
|
||||
|
|
@ -138,18 +138,30 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do
|
|||
end
|
||||
end
|
||||
|
||||
def index(%{assigns: %{user: %{id: user_id} = user}} = conn, params) do
|
||||
def index(%{assigns: %{user: user}} = conn, params) do
|
||||
chats =
|
||||
index_query(user, params)
|
||||
|> Repo.all()
|
||||
|
||||
render(conn, "index.json", chats: chats)
|
||||
end
|
||||
|
||||
def index2(%{assigns: %{user: user}} = conn, params) do
|
||||
chats =
|
||||
index_query(user, params)
|
||||
|> Pagination.fetch_paginated(params)
|
||||
|
||||
render(conn, "index.json", chats: chats)
|
||||
end
|
||||
|
||||
defp index_query(%{id: user_id} = user, params) do
|
||||
exclude_users =
|
||||
User.cached_blocked_users_ap_ids(user) ++
|
||||
if params[:with_muted], do: [], else: User.cached_muted_users_ap_ids(user)
|
||||
|
||||
chats =
|
||||
user_id
|
||||
|> Chat.for_user_query()
|
||||
|> where([c], c.recipient not in ^exclude_users)
|
||||
|> Repo.all()
|
||||
|
||||
render(conn, "index.json", chats: chats)
|
||||
user_id
|
||||
|> Chat.for_user_query()
|
||||
|> where([c], c.recipient not in ^exclude_users)
|
||||
end
|
||||
|
||||
def create(%{assigns: %{user: user}} = conn, %{id: id}) do
|
||||
|
|
|
|||
|
|
@ -411,6 +411,13 @@ defmodule Pleroma.Web.Router do
|
|||
get("/federation_status", InstancesController, :show)
|
||||
end
|
||||
|
||||
scope "/api/v2/pleroma", Pleroma.Web.PleromaAPI do
|
||||
scope [] do
|
||||
pipe_through(:authenticated_api)
|
||||
get("/chats", ChatController, :index2)
|
||||
end
|
||||
end
|
||||
|
||||
scope "/api/v1", Pleroma.Web.MastodonAPI do
|
||||
pipe_through(:authenticated_api)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue