Optimize record set compaction

Closes #154
This commit is contained in:
Claudio Ortolina
2026-04-06 18:38:56 +01:00
parent 2609adbf84
commit edc4e51d1d
+8 -13
View File
@@ -130,9 +130,7 @@ defmodule MusicLibrary.RecordSets do
Repo.delete(item) Repo.delete(item)
recompact_positions(record_set.id) recompact_positions(record_set)
{:ok, get_record_set!(record_set.id)}
end end
# sobelow_skip ["SQL.Query"] # sobelow_skip ["SQL.Query"]
@@ -236,20 +234,17 @@ defmodule MusicLibrary.RecordSets do
) )
end end
defp recompact_positions(record_set_id) do defp recompact_positions(record_set) do
items = record_set_id = record_set.id
record_ids =
from(i in RecordSetItem, from(i in RecordSetItem,
where: i.record_set_id == ^record_set_id, where: i.record_set_id == ^record_set_id,
order_by: [asc: i.position] order_by: [asc: i.position],
select: i.record_id
) )
|> Repo.all() |> Repo.all()
Enum.with_index(items, fn item, index -> reorder_records_in_set(record_set, record_ids)
if item.position != index do
item
|> Ecto.Changeset.change(position: index)
|> Repo.update!()
end
end)
end end
end end