diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/pleroma_api/controllers/chat_controller.ex | 40 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 1 | 
2 files changed, 41 insertions, 0 deletions
diff --git a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex index 0ee8bea33..de23b9a22 100644 --- a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex @@ -5,10 +5,50 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do    use Pleroma.Web, :controller    alias Pleroma.Chat +  alias Pleroma.Object    alias Pleroma.Repo    import Ecto.Query +  def messages(%{assigns: %{user: %{id: user_id} = user}} = conn, %{"id" => id}) do +    with %Chat{} = chat <- Repo.get_by(Chat, id: id, user_id: user_id) do +      messages = +        from(o in Object, +          where: fragment("?->>'type' = ?", o.data, "ChatMessage"), +          where: +            fragment( +              """ +              (?->>'actor' = ? and ?->'to' = ?)  +              OR (?->>'actor' = ? and ?->'to' = ?)  +              """, +              o.data, +              ^user.ap_id, +              o.data, +              ^[chat.recipient], +              o.data, +              ^chat.recipient, +              o.data, +              ^[user.ap_id] +            ), +          order_by: [desc: o.id] +        ) +        |> Repo.all() + +      represented_messages = +        messages +        |> Enum.map(fn message -> +          %{ +            actor: message.data["actor"], +            id: message.id, +            content: message.data["content"] +          } +        end) + +      conn +      |> json(represented_messages) +    end +  end +    def index(%{assigns: %{user: %{id: user_id}}} = conn, _params) do      chats =        from(c in Chat, diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 18ce9ee4b..368e77d3e 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -289,6 +289,7 @@ defmodule Pleroma.Web.Router do        post("/chats/by-ap-id/:ap_id", ChatController, :create)        get("/chats", ChatController, :index) +      get("/chats/:id/messages", ChatController, :messages)      end      scope [] do  | 
