9cd24bad17554260e6bcc07a754c176e6e1a1f9e
As images are only processed on save AFTER validation, we can avoid keeping them in the socket, with the only downside of losing a little resilience in case the save operation errors out (in which case the upload would be lost).
MusicLibrary
To start your Phoenix server:
- Run
mix setupto install and setup dependencies - Start Phoenix endpoint with
mix phx.serveror inside IEx withiex -S mix phx.server
Now you can visit localhost:4000 from your browser.
Ready to run in production? Please check our deployment guides.
Learn more
- Official website: https://www.phoenixframework.org/
- Guides: https://hexdocs.pm/phoenix/overview.html
- Docs: https://hexdocs.pm/phoenix
- Forum: https://elixirforum.com/c/phoenix-forum
- Source: https://github.com/phoenixframework/phoenix
Dev Notes
Search
- SQLite supports full-text search via the built-in FTS5 extension, which is enabled by default and loaded in the Elixir Driver. The extension requires building a virtual table that holds the data to be searched. This seems to be akin to a materialized view.
- To have fuzzy search, another extension needs to be loaded. Exqlite recommends using ExSqlean, which in turn uses Sqlean, but the extension is NOT part of the ExSQlean set. Need to investigate with forking and PR.
Queries
-
To get the count of records per genre:
select genre.value, count(genre.value) as c from records, json_each(records.genres) genre group by genre.value order by c desc; -
To get the count of records per artist:
select json_extract(artist.value, '$.name') AS name, count(1) as c from records, json_each(records.artists) artist group by name order by c desc;Note that this query would fail to disambiguate artists with the same name - can be fixed by using the artist
musicbrainz_id.
Description
Languages
Elixir
77.4%
Python
10%
TypeScript
6.6%
HTML
3.7%
Shell
1.4%
Other
0.8%