[#3213] Speedup of HashtagsTableMigrator (query optimization). State handling fix.
[akkoma] / lib / pleroma / data_migration.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.DataMigration do
6 use Ecto.Schema
7
8 alias Pleroma.DataMigration
9 alias Pleroma.DataMigration.State
10 alias Pleroma.Repo
11
12 import Ecto.Changeset
13
14 schema "data_migrations" do
15 field(:name, :string)
16 field(:state, State, default: :pending)
17 field(:feature_lock, :boolean, default: false)
18 field(:params, :map, default: %{})
19 field(:data, :map, default: %{})
20
21 timestamps()
22 end
23
24 def changeset(data_migration, params \\ %{}) do
25 data_migration
26 |> cast(params, [:name, :state, :feature_lock, :params, :data])
27 |> validate_required([:name])
28 |> unique_constraint(:name)
29 end
30
31 def update(data_migration, params \\ %{}) do
32 data_migration
33 |> changeset(params)
34 |> Repo.update()
35 end
36
37 def update_state(data_migration, new_state) do
38 update(data_migration, %{state: new_state})
39 end
40
41 def get_by_name(name) do
42 Repo.get_by(DataMigration, name: name)
43 end
44
45 def populate_hashtags_table, do: get_by_name("populate_hashtags_table")
46 end