45 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
# Pleroma: A lightweight social networking server
 | 
						|
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 | 
						|
# SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
 | 
						|
defmodule Pleroma.DataMigration do
 | 
						|
  use Ecto.Schema
 | 
						|
 | 
						|
  alias Pleroma.DataMigration
 | 
						|
  alias Pleroma.DataMigration.State
 | 
						|
  alias Pleroma.Repo
 | 
						|
 | 
						|
  import Ecto.Changeset
 | 
						|
  import Ecto.Query
 | 
						|
 | 
						|
  schema "data_migrations" do
 | 
						|
    field(:name, :string)
 | 
						|
    field(:state, State, default: :pending)
 | 
						|
    field(:feature_lock, :boolean, default: false)
 | 
						|
    field(:params, :map, default: %{})
 | 
						|
    field(:data, :map, default: %{})
 | 
						|
 | 
						|
    timestamps()
 | 
						|
  end
 | 
						|
 | 
						|
  def changeset(data_migration, params \\ %{}) do
 | 
						|
    data_migration
 | 
						|
    |> cast(params, [:name, :state, :feature_lock, :params, :data])
 | 
						|
    |> validate_required([:name])
 | 
						|
    |> unique_constraint(:name)
 | 
						|
  end
 | 
						|
 | 
						|
  def update_one_by_id(id, params \\ %{}) do
 | 
						|
    with {1, _} <-
 | 
						|
           from(dm in DataMigration, where: dm.id == ^id)
 | 
						|
           |> Repo.update_all(set: params) do
 | 
						|
      :ok
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def get_by_name(name) do
 | 
						|
    Repo.get_by(DataMigration, name: name)
 | 
						|
  end
 | 
						|
 | 
						|
  def populate_hashtags_table, do: get_by_name("populate_hashtags_table")
 | 
						|
end
 |