Start extracting a Collection context

This commit is contained in:
Claudio Ortolina
2024-11-10 13:38:50 +00:00
parent b247cb2536
commit bd0336c4a2
6 changed files with 96 additions and 114 deletions
+55
View File
@@ -0,0 +1,55 @@
defmodule MusicLibrary.Collection do
import Ecto.Query, warn: false
alias MusicLibrary.Repo
alias MusicLibrary.Records
alias MusicLibrary.Records.Record
def search_records(query, opts \\ []) do
limit = Keyword.get(opts, :limit, 20)
offset = Keyword.get(opts, :offset, 0)
Records.search_records(base_search(), query, limit: limit, offset: offset)
end
def search_records_count(query) do
Records.search_records_count(base_search(), query)
end
def count_records_by_format do
q =
from r in base_search(),
group_by: r.format,
order_by: [desc: count(r.id)],
select: {r.format, count(r.id)}
Repo.all(q)
end
def count_records_by_type do
q =
from r in base_search(),
group_by: r.type,
order_by: [desc: count(r.id)],
select: {r.type, count(r.id)}
Repo.all(q)
end
def get_latest_record! do
fields = Records.minimal_record_fields()
q =
from r in base_search(),
order_by: [desc: r.purchased_at],
limit: 1,
select: ^fields
Repo.one!(q)
end
defp base_search do
from r in Record,
where: not is_nil(r.purchased_at)
end
end