fix migrate
authorMaksim Pechnikov <parallel588@gmail.com>
Wed, 23 Oct 2019 08:54:52 +0000 (11:54 +0300)
committerMaksim Pechnikov <parallel588@gmail.com>
Wed, 23 Oct 2019 19:02:59 +0000 (22:02 +0300)
lib/pleroma/marker.ex
priv/repo/migrations/20191021113356_add_unread_to_marker.exs

index 4b81986907e6ec6bc7a42ebbf18437454780db37..098fe3bbd9bbd6dc57fe25c681e18add5cc9fe6e 100644 (file)
@@ -56,8 +56,9 @@ defmodule Pleroma.Marker do
           where: q.user_id == ^user.id,
           select: %{
             timeline: "notifications",
-            user_id: ^user.id,
-            unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END ) as unread_count")
+            user_id: type(^user.id, :string),
+            unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"),
+            last_read_id: type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string)
           }
         )
 
index 32789b7f9bd91287994082da21df8c38f553e8cd..964c7fb986726d2638c1a0483e44c969bc93d342 100644 (file)
@@ -25,25 +25,21 @@ defmodule Pleroma.Repo.Migrations.AddUnreadToMarker do
       select: %{
         timeline: "notifications",
         user_id: q.user_id,
-        unread_count: fragment("COUNT(*) FILTER (WHERE seen = false) as unread_count"),
-        last_read_id: fragment("(MAX(id) FILTER (WHERE seen = true)::text) as last_read_id ")
+        unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"),
+        last_read_id: type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string)
       },
       group_by: [q.user_id]
     )
     |> Repo.all()
-    |> Enum.reduce(Ecto.Multi.new(), fn attrs, multi ->
-      marker =
-        Pleroma.Marker
-        |> struct(attrs)
-        |> Ecto.Changeset.change()
-
-      multi
-      |> Ecto.Multi.insert(attrs[:user_id], marker,
+    |> Enum.each(fn attrs ->
+      Pleroma.Marker
+      |> struct(attrs)
+      |> Ecto.Changeset.change()
+      |> Pleroma.Repo.insert(
         returning: true,
         on_conflict: {:replace, [:last_read_id, :unread_count]},
         conflict_target: [:user_id, :timeline]
       )
     end)
-    |> Pleroma.Repo.transaction()
   end
 end