Extend Last.fm Feed album/artist functions

This commit is contained in:
Claudio Ortolina
2025-03-10 17:41:17 +00:00
parent 3063155349
commit ec10447ca0
2 changed files with 24 additions and 8 deletions
+6 -6
View File
@@ -41,26 +41,26 @@ defmodule LastFm.Feed do
def all_artists do def all_artists do
m = [ m = [
{ {
{:"$1", %{artist: :"$2"}}, {:"$1", %{scrobbled_at_label: :"$2", artist: :"$3"}},
[], [],
[:"$2"] [%{scrobbled_at_uts: :"$1", scrobbled_at_label: :"$2", artist: :"$3"}]
} }
] ]
:ets.select_reverse(__MODULE__, m) |> Enum.uniq() :ets.select_reverse(__MODULE__, m) |> Enum.uniq_by(fn pair -> pair.artist end)
end end
@spec all_albums() :: [LastFm.Album.t()] @spec all_albums() :: [LastFm.Album.t()]
def all_albums do def all_albums do
m = [ m = [
{ {
{:"$1", %{album: :"$2"}}, {:"$1", %{scrobbled_at_label: :"$2", album: :"$3", cover_url: :"$4"}},
[], [],
[:"$2"] [%{scrobbled_at_uts: :"$1", scrobbled_at_label: :"$2", album: :"$3", cover_url: :"$4"}]
} }
] ]
:ets.select_reverse(__MODULE__, m) |> Enum.uniq() :ets.select_reverse(__MODULE__, m) |> Enum.uniq_by(fn pair -> pair.album end)
end end
@spec subscribe() :: :ok @spec subscribe() :: :ok
+18 -2
View File
@@ -49,12 +49,28 @@ defmodule LastFm.FeedTest do
test "it returns artists in descending order of scrobble" do test "it returns artists in descending order of scrobble" do
:ok = Feed.update([@track_two, @track_one]) :ok = Feed.update([@track_two, @track_one])
assert [@track_one.artist] == Feed.all_artists()
assert [
%{
artist: @track_two.artist,
scrobbled_at_uts: @track_two.scrobbled_at_uts,
scrobbled_at_label: @track_two.scrobbled_at_label
}
] ==
Feed.all_artists()
end end
test "it returns albums in descending order of scrobble" do test "it returns albums in descending order of scrobble" do
:ok = Feed.update([@track_two, @track_one]) :ok = Feed.update([@track_two, @track_one])
assert [@track_one.album] == Feed.all_albums()
assert [
%{
album: @track_two.album,
cover_url: @track_two.cover_url,
scrobbled_at_uts: @track_two.scrobbled_at_uts,
scrobbled_at_label: @track_two.scrobbled_at_label
}
] == Feed.all_albums()
end end
end end
end end