From d194a54760702ff6eb03bcf72721785e5a205748 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Wed, 1 Jan 2025 19:19:40 +0000 Subject: [PATCH] Adds API to return a random record from the collection --- lib/music_library/collection.ex | 11 +++++++++++ .../controllers/collection_controller.ex | 6 ++++++ lib/music_library_web/router.ex | 1 + 3 files changed, 18 insertions(+) diff --git a/lib/music_library/collection.ex b/lib/music_library/collection.ex index 79a766d1..009993db 100644 --- a/lib/music_library/collection.ex +++ b/lib/music_library/collection.ex @@ -50,6 +50,17 @@ defmodule MusicLibrary.Collection do Repo.one!(q) end + def get_random_record! do + q = + from r in Record, + where: not is_nil(r.purchased_at), + order_by: fragment("RANDOM()"), + limit: 1, + select: ^Records.essential_fields() + + Repo.one!(q) + end + def collected_releases(release_ids) do q = from r in fragment("records, json_each(records.release_ids)"), diff --git a/lib/music_library_web/controllers/collection_controller.ex b/lib/music_library_web/controllers/collection_controller.ex index 93500fe0..74e4324e 100644 --- a/lib/music_library_web/controllers/collection_controller.ex +++ b/lib/music_library_web/controllers/collection_controller.ex @@ -8,4 +8,10 @@ defmodule MusicLibraryWeb.CollectionController do render(conn, :show, record: latest_record) end + + def random(conn, _params) do + random_record = Collection.get_random_record!() + + render(conn, :show, record: random_record) + end end diff --git a/lib/music_library_web/router.ex b/lib/music_library_web/router.ex index 873a9c7b..3b3adda3 100644 --- a/lib/music_library_web/router.ex +++ b/lib/music_library_web/router.ex @@ -58,6 +58,7 @@ defmodule MusicLibraryWeb.Router do pipe_through :api get "/collection/latest", CollectionController, :latest + get "/collection/random", CollectionController, :random get "/covers/:record_id", CoverController, :show end