Add RenameInstanceChat migration
authorRoman Chvanikov <chvanikoff@pm.me>
Fri, 7 Aug 2020 09:18:36 +0000 (12:18 +0300)
committerMark Felder <feld@feld.me>
Tue, 1 Jun 2021 16:49:47 +0000 (11:49 -0500)
priv/repo/migrations/20200806175913_rename_instance_chat.exs [new file with mode: 0644]

diff --git a/priv/repo/migrations/20200806175913_rename_instance_chat.exs b/priv/repo/migrations/20200806175913_rename_instance_chat.exs
new file mode 100644 (file)
index 0000000..31585ef
--- /dev/null
@@ -0,0 +1,77 @@
+defmodule Pleroma.Repo.Migrations.RenameInstanceChat do
+  use Ecto.Migration
+
+  alias Pleroma.ConfigDB
+
+  @instance_params %{group: :pleroma, key: :instance}
+  @shout_params %{group: :pleroma, key: :shout}
+  @chat_params %{group: :pleroma, key: :chat}
+
+  def up do
+    instance_updated? = maybe_update_instance_key(:up) != :noop
+    chat_updated? = maybe_update_chat_key(:up) != :noop
+
+    case Enum.any?([instance_updated?, chat_updated?]) do
+      true -> :ok
+      false -> :noop
+    end
+  end
+
+  def down do
+    instance_updated? = maybe_update_instance_key(:down) != :noop
+    chat_updated? = maybe_update_chat_key(:down) != :noop
+
+    case Enum.any?([instance_updated?, chat_updated?]) do
+      true -> :ok
+      false -> :noop
+    end
+  end
+
+  # pleroma.instance.chat_limit -> pleroma.shout.limit
+  defp maybe_update_instance_key(:up) do
+    with %ConfigDB{value: values} <- ConfigDB.get_by_params(@instance_params),
+         limit when is_integer(limit) <- values[:chat_limit] do
+      @shout_params |> Map.put(:value, limit: limit) |> ConfigDB.update_or_create()
+      @instance_params |> Map.put(:subkeys, [":chat_limit"]) |> ConfigDB.delete()
+    else
+      _ ->
+        :noop
+    end
+  end
+
+  # pleroma.shout.limit -> pleroma.instance.chat_limit
+  defp maybe_update_instance_key(:down) do
+    with %ConfigDB{value: values} <- ConfigDB.get_by_params(@shout_params),
+         limit when is_integer(limit) <- values[:limit] do
+      @instance_params |> Map.put(:value, chat_limit: limit) |> ConfigDB.update_or_create()
+      @shout_params |> Map.put(:subkeys, [":limit"]) |> ConfigDB.delete()
+    else
+      _ ->
+        :noop
+    end
+  end
+
+  # pleroma.chat.enabled -> pleroma.shout.enabled
+  defp maybe_update_chat_key(:up) do
+    with %ConfigDB{value: values} <- ConfigDB.get_by_params(@chat_params),
+         enabled? when is_boolean(enabled?) <- values[:enabled] do
+      @shout_params |> Map.put(:value, enabled: enabled?) |> ConfigDB.update_or_create()
+      @chat_params |> Map.put(:subkeys, [":enabled"]) |> ConfigDB.delete()
+    else
+      _ ->
+        :noop
+    end
+  end
+
+  # pleroma.shout.enabled -> pleroma.chat.enabled
+  defp maybe_update_chat_key(:down) do
+    with %ConfigDB{value: values} <- ConfigDB.get_by_params(@shout_params),
+         enabled? when is_boolean(enabled?) <- values[:enabled] do
+      @chat_params |> Map.put(:value, enabled: enabled?) |> ConfigDB.update_or_create()
+      @shout_params |> Map.put(:subkeys, [":enabled"]) |> ConfigDB.delete()
+    else
+      _ ->
+        :noop
+    end
+  end
+end