total rebase
[anni] / lib / pleroma / data_migration.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 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   import Ecto.Query
14
15   @type t :: %__MODULE__{}
16
17   schema "data_migrations" do
18     field(:name, :string)
19     field(:state, State, default: :pending)
20     field(:feature_lock, :boolean, default: false)
21     field(:params, :map, default: %{})
22     field(:data, :map, default: %{})
23
24     timestamps()
25   end
26
27   def changeset(data_migration, params \\ %{}) do
28     data_migration
29     |> cast(params, [:name, :state, :feature_lock, :params, :data])
30     |> validate_required([:name])
31     |> unique_constraint(:name)
32   end
33
34   def update_one_by_id(id, params \\ %{}) do
35     with {1, _} <-
36            from(dm in DataMigration, where: dm.id == ^id)
37            |> Repo.update_all(set: params) do
38       :ok
39     end
40   end
41
42   def get_by_name(name) do
43     Repo.get_by(DataMigration, name: name)
44   end
45
46   def populate_hashtags_table, do: get_by_name("populate_hashtags_table")
47   def delete_context_objects, do: get_by_name("delete_context_objects")
48 end