1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.ChatMessageReference do
7 A reference that builds a relation between an AP chat message that a user can see and whether it has been seen
8 by them, or should be displayed to them. Used to build the chat view that is presented to the user.
20 @primary_key {:id, FlakeId.Ecto.CompatType, autogenerate: true}
22 schema "chat_message_references" do
23 belongs_to(:object, Object)
24 belongs_to(:chat, Chat)
26 field(:seen, :boolean, default: false)
31 def changeset(struct, params) do
33 |> cast(params, [:object_id, :chat_id, :seen])
34 |> validate_required([:object_id, :chat_id, :seen])
40 |> Repo.preload(:object)
48 def delete_for_object(%{id: object_id}) do
49 from(cr in __MODULE__,
50 where: cr.object_id == ^object_id
55 def for_chat_and_object(%{id: chat_id}, %{id: object_id}) do
57 |> Repo.get_by(chat_id: chat_id, object_id: object_id)
58 |> Repo.preload(:object)
61 def for_chat_query(chat) do
62 from(cr in __MODULE__,
63 where: cr.chat_id == ^chat.id,
64 order_by: [desc: :id],
69 def last_message_for_chat(chat) do
76 def create(chat, object, seen) do