move sql (update_markers) from migrate to mix task
authorMaksim Pechnikov <parallel588@gmail.com>
Wed, 30 Oct 2019 20:22:38 +0000 (23:22 +0300)
committerMaksim Pechnikov <parallel588@gmail.com>
Wed, 30 Oct 2019 20:22:38 +0000 (23:22 +0300)
lib/mix/tasks/pleroma/marker.ex [new file with mode: 0644]
priv/repo/migrations/20191021113356_add_unread_to_marker.exs [deleted file]
priv/repo/migrations/20191030202008_add_unread_to_marker.exs [new file with mode: 0644]

diff --git a/lib/mix/tasks/pleroma/marker.ex b/lib/mix/tasks/pleroma/marker.ex
new file mode 100644 (file)
index 0000000..1d5be11
--- /dev/null
@@ -0,0 +1,36 @@
+defmodule Mix.Tasks.Pleroma.Marker do
+  use Mix.Task
+  import Mix.Pleroma
+
+  import Ecto.Query
+  alias Pleroma.Repo
+  alias Pleroma.Notification
+
+  def run(["update_markers"]) do
+    start_pleroma()
+
+    from(q in Notification,
+      select: %{
+        timeline: "notifications",
+        user_id: q.user_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.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)
+
+    shell_info("Done")
+  end
+end
diff --git a/priv/repo/migrations/20191021113356_add_unread_to_marker.exs b/priv/repo/migrations/20191021113356_add_unread_to_marker.exs
deleted file mode 100644 (file)
index c15e2ff..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-defmodule Pleroma.Repo.Migrations.AddUnreadToMarker do
-  use Ecto.Migration
-  import Ecto.Query
-  alias Pleroma.Repo
-  alias Pleroma.Notification
-
-  def up do
-    alter table(:markers) do
-      add_if_not_exists(:unread_count, :integer, default: 0)
-    end
-
-    flush()
-
-    update_markers()
-  end
-
-  def down do
-    alter table(:markers) do
-      remove_if_exists(:unread_count, :integer)
-    end
-  end
-
-  def update_markers do
-    from(q in Notification,
-      select: %{
-        timeline: "notifications",
-        user_id: q.user_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.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)
-  end
-end
diff --git a/priv/repo/migrations/20191030202008_add_unread_to_marker.exs b/priv/repo/migrations/20191030202008_add_unread_to_marker.exs
new file mode 100644 (file)
index 0000000..f81339c
--- /dev/null
@@ -0,0 +1,18 @@
+defmodule Pleroma.Repo.Migrations.AddUnreadToMarker do
+  use Ecto.Migration
+  import Ecto.Query
+  alias Pleroma.Repo
+  alias Pleroma.Notification
+
+  def up do
+    alter table(:markers) do
+      add_if_not_exists(:unread_count, :integer, default: 0)
+    end
+  end
+
+  def down do
+    alter table(:markers) do
+      remove_if_exists(:unread_count, :integer)
+    end
+  end
+end