summaryrefslogtreecommitdiff
path: root/priv/repo/migrations/20200802170532_fix_legacy_tags.exs
blob: f7274b44e4deea9c2d26ed7f8b9eefe0de1ee6ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# Fix legacy tags set by AdminFE that don't align with TagPolicy MRF

defmodule Pleroma.Repo.Migrations.FixLegacyTags do
  use Ecto.Migration
  alias Pleroma.Repo
  alias Pleroma.User
  import Ecto.Query

  @old_new_map %{
    "force_nsfw" => "mrf_tag:media-force-nsfw",
    "strip_media" => "mrf_tag:media-strip",
    "force_unlisted" => "mrf_tag:force-unlisted",
    "sandbox" => "mrf_tag:sandbox",
    "disable_remote_subscription" => "mrf_tag:disable-remote-subscription",
    "disable_any_subscription" => "mrf_tag:disable-any-subscription"
  }

  def change do
    legacy_tags = Map.keys(@old_new_map)

    from(u in User, where: fragment("? && ?", u.tags, ^legacy_tags))
    |> Repo.all()
    |> Enum.each(fn user ->
      fix_tags_changeset(user)
      |> Repo.update()
    end)
  end

  defp fix_tags_changeset(%User{tags: tags} = user) do
    new_tags =
      Enum.map(tags, fn tag ->
        Map.get(@old_new_map, tag, tag)
      end)

    Ecto.Changeset.change(user, tags: new_tags)
  end
end