X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fchat.ex;h=4c92a58c737fffd678416fa1beae2c498ce49597;hb=3342846ac2bbd48e985cfeff26ba4593f4815879;hp=1a092b9924f2be366f840f72798672b3008c08a6;hpb=1748e2694815da20689005110937ea42cd554d70;p=akkoma diff --git a/lib/pleroma/chat.ex b/lib/pleroma/chat.ex index 1a092b992..4c92a58c7 100644 --- a/lib/pleroma/chat.ex +++ b/lib/pleroma/chat.ex @@ -4,8 +4,11 @@ defmodule Pleroma.Chat do use Ecto.Schema + import Ecto.Changeset + import Ecto.Query + alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User @@ -23,6 +26,38 @@ defmodule Pleroma.Chat do timestamps() end + def last_message_for_chat(chat) do + messages_for_chat_query(chat) + |> order_by(desc: :id) + |> limit(1) + |> 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])