update mastofe paths (#95)
[akkoma] / lib / pleroma / chat / message_reference.ex
index 4b201db2e5f42012e08600caf6495477d62ce563..89537d155723d1435056d7e9393f38860046af17 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Chat.MessageReference do
@@ -21,7 +21,7 @@ defmodule Pleroma.Chat.MessageReference do
 
   schema "chat_message_references" do
     belongs_to(:object, Object)
-    belongs_to(:chat, Chat)
+    belongs_to(:chat, Chat, type: FlakeId.Ecto.CompatType)
 
     field(:unread, :boolean, default: true)
 
@@ -98,12 +98,20 @@ defmodule Pleroma.Chat.MessageReference do
     |> Repo.update()
   end
 
-  def set_all_seen_for_chat(chat) do
-    chat
-    |> for_chat_query()
-    |> exclude(:order_by)
-    |> exclude(:preload)
-    |> where([cmr], cmr.unread == true)
+  def set_all_seen_for_chat(chat, last_read_id \\ nil) do
+    query =
+      chat
+      |> for_chat_query()
+      |> exclude(:order_by)
+      |> exclude(:preload)
+      |> where([cmr], cmr.unread == true)
+
+    if last_read_id do
+      query
+      |> where([cmr], cmr.id <= ^last_read_id)
+    else
+      query
+    end
     |> Repo.update_all(set: [unread: false])
   end
 end