Conversations: Make tests run.
[akkoma] / lib / pleroma / web / mastodon_api / mastodon_api_controller.ex
index 5462ce8bebd19a78d9be63dc855abdcc2998b17b..57f73dacd4078a3c1ece36185a8f3c6a4858b9e5 100644 (file)
@@ -8,6 +8,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
   alias Ecto.Changeset
   alias Pleroma.Activity
   alias Pleroma.Config
+  alias Pleroma.Conversation.Participation
   alias Pleroma.Filter
   alias Pleroma.Notification
   alias Pleroma.Object
@@ -1584,6 +1585,41 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     end
   end
 
+  def conversations(%{assigns: %{user: user}} = conn, params) do
+    participations = Participation.for_user_with_last_activity_id(user, params)
+
+    conversations =
+      Enum.map(participations, fn participation ->
+        %{
+          id: participation.id,
+          # TODO: Add this.
+          accounts: [],
+          unread: !participation.read,
+          last_status: participation.last_activity_id
+        }
+      end)
+
+    conn
+    |> add_link_headers(:conversations, participations)
+    |> json(conversations)
+  end
+
+  def conversation_read(%{assigns: %{user: user}} = conn, %{"id" => participation_id}) do
+    with %Participation{} = participation <-
+           Repo.get_by(Participation, id: participation_id, user_id: user.id),
+         {:ok, participation} <- Participation.mark_as_read(participation) do
+      conn
+      |> json(%{
+        id: participation.id,
+        # TODO: Add this.
+        accounts: [],
+        unread: !participation.read,
+        # TODO: Add this.
+        last_status: nil
+      })
+    end
+  end
+
   def try_render(conn, target, params)
       when is_binary(target) do
     res = render(conn, target, params)