Thank you for your reply. I ended up going with the reduce as it seemed simpler
attrs
|> Enum.reduce(%{new: [], updated: []}, fn x, acc ->
case Repo.get_by(Machine, name: x["name"]) do
nil ->
# Insert a new machine
{:ok, machine} = Repo.insert(Machine.changeset(%Machine{}, x))
new_list = acc.new ++ [machine]
%{new: new_list, updated: acc.updated}
machine ->
# Update the machine data
{:ok, machine} = Repo.update(Machine.changeset(machine, x))
updated_list = acc.updated ++ [machine]
%{new: acc.new, updated: updated_list}
end
end)


















