Add database migrations
[akkoma] / priv / repo / migrations / 20201005124600_quarantained_policy_string_to_tuple.exs
1 defmodule Pleroma.Repo.Migrations.QuarantainedStringToTuple do
2 use Ecto.Migration
3
4 alias Pleroma.ConfigDB
5
6 def up,
7 do:
8 ConfigDB.get_by_params(%{group: :pleroma, key: :instance})
9 |> update_quarantined_instances_to_tuples
10
11 def down,
12 do:
13 ConfigDB.get_by_params(%{group: :pleroma, key: :instance})
14 |> update_quarantined_instances_to_strings
15
16 defp update_quarantined_instances_to_tuples(%{value: settings}) do
17 settings |> List.keyfind(:quarantined_instances, 0) |> update_to_tuples
18 end
19
20 defp update_quarantined_instances_to_tuples(nil), do: {:ok, nil}
21
22 defp update_to_tuples({:quarantined_instances, instance_list}) do
23 new_value =
24 instance_list
25 |> Enum.map(fn
26 {v, r} -> {v, r}
27 v -> {v, ""}
28 end)
29
30 ConfigDB.update_or_create(%{
31 group: :pleroma,
32 key: :instance,
33 value: [quarantined_instances: new_value]
34 })
35 end
36
37 defp update_to_tuples(nil), do: {:ok, nil}
38
39 defp update_quarantined_instances_to_strings(%{value: settings}) do
40 settings |> List.keyfind(:quarantined_instances, 0) |> update_to_strings
41 end
42
43 defp update_quarantined_instances_to_strings(nil), do: {:ok, nil}
44
45 defp update_to_strings({:quarantined_instances, instance_list}) do
46 new_value =
47 instance_list
48 |> Enum.map(fn
49 {v, _} -> v
50 v -> v
51 end)
52
53 ConfigDB.update_or_create(%{
54 group: :pleroma,
55 key: :instance,
56 value: [quarantined_instances: new_value]
57 })
58 end
59
60 defp update_to_strings(nil), do: {:ok, nil}
61 end