diff --git a/README.md b/README.md index b62b576..f18e7e0 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,14 @@ Licensed under MIT. - [ ] List all songs on artist page, with respective album - [x] List all albums on artist page - [x] Include number of plays for each + - [x] List albums features on - [x] See all albums under "/albums" - [x] See all songs from album - [x] Include number of plays + - [x] Include name of artist(s) + - [ ] Include artists features on each song - [x] See all songs under "/songs" - - [ ] Include respective artist(s) + - [x] Include respective artist(s) - [ ] Include respective album[^10] - [x] Include number of plays - [ ] Create disambiguation pages diff --git a/src/app/views/albums.zig b/src/app/views/albums.zig index 57d2bb1..cc6d765 100644 --- a/src/app/views/albums.zig +++ b/src/app/views/albums.zig @@ -33,6 +33,7 @@ pub fn index(request: *jetzig.Request) !jetzig.View { continue :blk; } var album_view = try albums_view.append(.object); + var artist_infos = try album_view.put("artist_info", .array); var artist_info = try artist_infos.append(.object); try artist_info.put("name", album.artist_name); diff --git a/src/app/views/artists.zig b/src/app/views/artists.zig index b8d6bc3..9f707f0 100644 --- a/src/app/views/artists.zig +++ b/src/app/views/artists.zig @@ -35,6 +35,7 @@ pub fn index(request: *jetzig.Request) !jetzig.View { pub fn get(id: []const u8, request: *jetzig.Request) !jetzig.View { var root = try request.data(.object); var albums_view = try root.put("albums", .array); + var appears = try root.put("appears", .array); const artist_name = try jetzig.database.Query(.Artist).find(id).select(.{ .id, .name }).execute(request.repo); _ = try root.put("artist", artist_name.?.name); const query = @@ -48,6 +49,18 @@ pub fn get(id: []const u8, request: *jetzig.Request) !jetzig.View { \\ORDER BY scrobbles DESC ; + const appears_query = + \\SELECT albums.name, albums.id, COUNT(scrobbles) AS scrobbles + \\FROM artistalbums + \\INNER JOIN albums ON albums.id = artistalbums.album_id + \\INNER JOIN albumsongs ON albumsongs.album_id = albums.id + \\INNER JOIN scrobbles ON scrobbles.albumsong = albumsongs.id + \\INNER JOIN albumsongsartists ON albumsongsartists.albumsong_id = albumsongs.id + \\WHERE albumsongsartists.artist_id = $1 AND artistalbums.artist_id != $1 + \\GROUP BY albums.id + \\ORDER BY scrobbles DESC; + ; + var albums_jq_result = try request.repo.executeSql(query, .{id}); defer albums_jq_result.deinit(); @@ -60,30 +73,18 @@ pub fn get(id: []const u8, request: *jetzig.Request) !jetzig.View { try album_view.put("url", album.id); try album_view.put("scrobbles", album.scrobbles); } - //const artist = try jetzig.database.Query(.Artist) - // .find(id) - // .select(.{ .id, .name }) - // .execute(request.repo); - //var root = try request.data(.object); - //try root.put("artist", artist.?.name); - //var albums_view = try root.put("albums", .array); - //const query = jetzig.database.Query(.Albumartist) - // .select(.{.id}) - // .include(.album, .{ .select = .{ .name, .id } }) - // .join(.inner, .artist) - // .where(.{ .artist = .{ .id = id } }); - //const albums = try request.repo.all(query); - //for (albums) |album| { - // const scrobbles = try jetzig.database.Query(.Scrobble) - // .where(.{ .album_id = album.album.id }) - // .count() - // .execute(request.repo); - // var album_view = try albums_view.append(.object); - // try album_view.put("name", album.album.name); - // try album_view.put("url", album.album.id); - // try album_view.put("scrobbles", scrobbles); - //} + var appears_jq_result = try request.repo.executeSql(appears_query, .{id}); + defer appears_jq_result.deinit(); + + while (try appears_jq_result.postgresql.result.next()) |album_row| { + const album = try album_row.to(Album, .{ .dupe = true, .allocator = request.allocator }); + var album_view = try appears.append(.object); + try album_view.put("name", album.name); + try album_view.put("url", album.id); + try album_view.put("scrobbles", album.scrobbles); + } + return request.render(.ok); } diff --git a/src/app/views/artists/get.zmpl b/src/app/views/artists/get.zmpl index 911d2c3..2cc50cd 100644 --- a/src/app/views/artists/get.zmpl +++ b/src/app/views/artists/get.zmpl @@ -6,6 +6,7 @@
@partial partials/header| Name | Scrobbles | +
|---|---|
| {{album.name}} | +{{album.scrobbles}} | +