ChatView: Add the last message to the view.
This commit is contained in:
parent
e297d8c649
commit
f335e1404a
4 changed files with 60 additions and 23 deletions
|
|
@ -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])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue