ChatView: Add the last message to the view.

This commit is contained in:
lain 2020-05-10 13:00:01 +02:00
commit f335e1404a
4 changed files with 60 additions and 23 deletions

View file

@ -4,8 +4,11 @@
defmodule Pleroma.Chat do
use Ecto.Schema
import Ecto.Changeset
import Ecto.Changeset
import Ecto.Query
alias Pleroma.Object
alias Pleroma.Repo
alias Pleroma.User
@ -23,6 +26,37 @@ defmodule Pleroma.Chat do
timestamps()
end
def last_message_for_chat(chat) do
messages_for_chat_query(chat)
|> order_by(desc: :id)
|> Repo.one()
end
def messages_for_chat_query(chat) do
chat =
chat
|> Repo.preload(:user)
from(o in Object,
where: fragment("?->>'type' = ?", o.data, "ChatMessage"),
where:
fragment(
"""
(?->>'actor' = ? and ?->'to' = ?)
OR (?->>'actor' = ? and ?->'to' = ?)
""",
o.data,
^chat.user.ap_id,
o.data,
^[chat.recipient],
o.data,
^chat.recipient,
o.data,
^[chat.user.ap_id]
)
)
end
def creation_cng(struct, params) do
struct
|> cast(params, [:user_id, :recipient, :unread])