Current section
Files
Jump to
Current section
Files
lib/verex/changeset.ex
defmodule Verex.Changeset do
@moduledoc false
import Ecto.Changeset
def insert_changeset(changeset) do
changeset
|> put_change(:revised_at, DateTime.utc_now)
|> put_change(:current_flag, true)
end
def update_changesets(changeset) do
active_changeset = update_active_changeset(changeset)
inactive_changeset = update_inactive_changeset(changeset)
{active_changeset, inactive_changeset}
end
def update_active_changeset(changeset) do
changeset
|> put_parent_id()
|> put_change(:revised_at, DateTime.utc_now)
|> put_change(:current_flag, true)
end
def update_inactive_changeset(changeset) do
changeset.changes
|> Map.keys()
|> clear_changes(changeset)
|> put_change(:current_flag, nil)
end
defp clear_changes([], changeset), do: changeset
defp clear_changes([key | changes], changeset) do
changeset = delete_change(changeset, key)
clear_changes(changes, changeset)
end
def delete_changeset(changeset) do
changeset
|> put_change(:current_flag, nil)
end
defp put_parent_id(changeset) do
case get_field(changeset, :id) do
nil -> changeset
pid ->
changeset
|> remove_id
|> put_change(:parent_id, pid)
end
end
defp remove_id(changeset) do
changeset
|> Map.delete(:id)
|> Map.put(:data, Map.delete(changeset.data, :id))
end
end