Files
music_library/lib/music_library/records/query.ex
T
Claudio Ortolina 3b558044b4 refactor: extract Records sub-contexts (Search, Import, Enrichment)
Split the 450+ line Records context into focused modules:

- Records.Search — FTS5 search, SearchParser integration, genre listing
- Records.Import — MusicBrainz release/group import, release status
- Records.Enrichment — genre population, cover refresh, color extraction,
  MusicBrainz data refresh
- Records.Query — shared helpers (essential_fields, order_alphabetically macro)

Records module is now a facade with defdelegate for compile-time safety.
CRUD and PubSub stay directly in Records. Tests moved alongside each
sub-module. Zero callers changed, 886 tests pass.
2026-04-30 17:20:37 +01:00

27 lines
681 B
Elixir

defmodule MusicLibrary.Records.Query do
@moduledoc """
Helpers to compose Ecto queries based on record-like schemas.
"""
alias MusicLibrary.Records.SearchIndex
@spec essential_fields() :: [atom()]
def essential_fields do
SearchIndex.__schema__(:fields)
end
@doc """
Ecto query fragment for alphabetical ordering by artist name and title.
Used by callers that compose queries (e.g. `Collection`) and by search
ordering internally via `Records.Search`.
"""
defmacro order_alphabetically do
quote do
fragment(
"unaccent(artists ->> '$[0].sort_name') COLLATE NOCASE ASC, unaccent(title) COLLATE NOCASE ASC"
)
end
end
end