Powered by AppSignal & Oban Pro

locations_fix_names

locations_fix_names.livemd

locations_fix_names

use QuickAlias, MyAppWeb
use QuickAlias, MyAppBe
use QuickAlias, MyApp
import Ash.Query

Section

defmodule NameAdder do
  def update_if_needed(rec) do
    if not names_contain_title?(rec) do
      rec

      names =
        [%{text: rec.title} | rec.names || []]

      rec
      |> Ash.Changeset.for_update(:update, %{names: names})
      |> Ash.update!()
    else
      {rec.title, :already_ok}
    end
  end

  def names_contain_title?(rec) do
    # Enum.find(fn x.names-> x end)
    names = get_names(rec)
    {rec.title, names}
    Enum.member?(names, rec.title)
  end

  def get_names(rec) do
    (rec.names || [])
    |> Enum.map(fn a -> a.text end)
  end
end
MyApp.Location
# |> Ash.Query.filter(id == "loc_02w3FISo5K1ZHSDj3ImnOi")
# |> Ash.Query.limit(20)
|> Api.read!()
# |> Enum.map(fn a -> a  |> Map.take(~w(names title)a) end)
|> Enum.map(&NameAdder.update_if_needed/1)