forked from AkkomaGang/akkoma
Conversation: Add endpoint to get a conversation by id.
This commit is contained in:
parent
23c46f7e72
commit
60231ec7bd
4 changed files with 34 additions and 0 deletions
|
@ -340,6 +340,12 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
|
||||||
* Params: Like other timelines
|
* Params: Like other timelines
|
||||||
* Response: JSON, statuses (200 - healthy, 503 unhealthy).
|
* Response: JSON, statuses (200 - healthy, 503 unhealthy).
|
||||||
|
|
||||||
|
## `GET /api/v1/pleroma/conversations/:id`
|
||||||
|
### The conversation with the given ID.
|
||||||
|
* Method `GET`
|
||||||
|
* Authentication: required
|
||||||
|
* Params: None
|
||||||
|
* Response: JSON, statuses (200 - healthy, 503 unhealthy).
|
||||||
|
|
||||||
## `PATCH /api/v1/pleroma/conversations/:id`
|
## `PATCH /api/v1/pleroma/conversations/:id`
|
||||||
### Update a conversation. Used to change the set of recipients.
|
### Update a conversation. Used to change the set of recipients.
|
||||||
|
|
|
@ -13,6 +13,15 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do
|
||||||
alias Pleroma.Web.MastodonAPI.ConversationView
|
alias Pleroma.Web.MastodonAPI.ConversationView
|
||||||
alias Pleroma.Web.MastodonAPI.StatusView
|
alias Pleroma.Web.MastodonAPI.StatusView
|
||||||
|
|
||||||
|
def conversation(%{assigns: %{user: user}} = conn, %{"id" => participation_id}) do
|
||||||
|
with %Participation{} = participation <- Participation.get(participation_id),
|
||||||
|
true <- user.id == participation.user_id do
|
||||||
|
conn
|
||||||
|
|> put_view(ConversationView)
|
||||||
|
|> render("participation.json", %{participation: participation, user: user})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def conversation_statuses(
|
def conversation_statuses(
|
||||||
%{assigns: %{user: user}} = conn,
|
%{assigns: %{user: user}} = conn,
|
||||||
%{"id" => participation_id} = params
|
%{"id" => participation_id} = params
|
||||||
|
|
|
@ -265,6 +265,7 @@ defmodule Pleroma.Web.Router do
|
||||||
scope [] do
|
scope [] do
|
||||||
pipe_through(:oauth_write)
|
pipe_through(:oauth_write)
|
||||||
get("/conversations/:id/statuses", PleromaAPIController, :conversation_statuses)
|
get("/conversations/:id/statuses", PleromaAPIController, :conversation_statuses)
|
||||||
|
get("/conversations/:id", PleromaAPIController, :conversation)
|
||||||
patch("/conversations/:id", PleromaAPIController, :update_conversation)
|
patch("/conversations/:id", PleromaAPIController, :update_conversation)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,6 +11,24 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
test "/api/v1/pleroma/conversations/:id", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, _activity} =
|
||||||
|
CommonAPI.post(user, %{"status" => "Hi @#{other_user.nickname}!", "visibility" => "direct"})
|
||||||
|
|
||||||
|
[participation] = Participation.for_user(other_user)
|
||||||
|
|
||||||
|
result =
|
||||||
|
conn
|
||||||
|
|> assign(:user, other_user)
|
||||||
|
|> get("/api/v1/pleroma/conversations/#{participation.id}")
|
||||||
|
|> json_response(200)
|
||||||
|
|
||||||
|
assert result["id"] == participation.id |> to_string()
|
||||||
|
end
|
||||||
|
|
||||||
test "/api/v1/pleroma/conversations/:id/statuses", %{conn: conn} do
|
test "/api/v1/pleroma/conversations/:id/statuses", %{conn: conn} do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
|
|
Loading…
Reference in a new issue