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)
recompact_positions(record_set.id)
{:ok, get_record_set!(record_set.id)}
recompact_positions(record_set)
end
# sobelow_skip ["SQL.Query"]
@@ -236,20 +234,17 @@ defmodule MusicLibrary.RecordSets do
)
end
defp recompact_positions(record_set_id) do
items =
defp recompact_positions(record_set) do
record_set_id = record_set.id
record_ids =
from(i in RecordSetItem,
where: i.record_set_id == ^record_set_id,
order_by: [asc: i.position]
order_by: [asc: i.position],
select: i.record_id
)
|> Repo.all()
Enum.with_index(items, fn item, index ->
if item.position != index do
item
|> Ecto.Changeset.change(position: index)
|> Repo.update!()
end
end)
reorder_records_in_set(record_set, record_ids)
end
end