Add scrobble count to each artist/album/song view
This commit is contained in:
parent
7ee3abe857
commit
4adbd59e12
7 changed files with 32 additions and 16 deletions
|
|
@ -17,8 +17,8 @@
|
||||||
// internet connectivity.
|
// internet connectivity.
|
||||||
.dependencies = .{
|
.dependencies = .{
|
||||||
.jetzig = .{
|
.jetzig = .{
|
||||||
.url = "https://github.com/jetzig-framework/jetzig/archive/d3157e4247211091127daba88a2552af3be8f5ed.tar.gz",
|
.url = "https://github.com/jetzig-framework/jetzig/archive/2c52792217b9441ed5e91d67e7ec5a8959285307.tar.gz",
|
||||||
.hash = "jetzig-0.0.0-IpAgLe0QDwC-6XH_ElHKUmPGxGxr1XdgiLeHEalerM7B",
|
.hash = "jetzig-0.0.0-IpAgLbMeDwDYRqWu0OJixGbcDUoUbfAN0xGe1xsYRHTj",
|
||||||
},
|
},
|
||||||
.zeit = .{
|
.zeit = .{
|
||||||
.url = "https://github.com/rockorager/zeit/archive/refs/heads/main.tar.gz",
|
.url = "https://github.com/rockorager/zeit/archive/refs/heads/main.tar.gz",
|
||||||
|
|
|
||||||
|
|
@ -206,13 +206,20 @@ pub const Albumsong = jetquery.Model(
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
pub const Scrobbleartist = jetquery.Model(@This(), "Scrobbleartists", struct {
|
pub const Scrobbleartist = jetquery.Model(
|
||||||
|
@This(),
|
||||||
|
"Scrobbleartists",
|
||||||
|
struct {
|
||||||
id: i32,
|
id: i32,
|
||||||
scrobble_id: i32,
|
scrobble_id: i32,
|
||||||
artist_id: i32,
|
artist_id: i32,
|
||||||
created_at: jetquery.DateTime,
|
created_at: jetquery.DateTime,
|
||||||
updated_at: jetquery.DateTime,
|
updated_at: jetquery.DateTime,
|
||||||
}, .{ .relations = .{
|
},
|
||||||
|
.{
|
||||||
|
.relations = .{
|
||||||
.scrobble = jetquery.belongsTo(.Scrobble, .{}),
|
.scrobble = jetquery.belongsTo(.Scrobble, .{}),
|
||||||
.artist = jetquery.belongsTo(.Artist, .{}),
|
.artist = jetquery.belongsTo(.Artist, .{}),
|
||||||
} });
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,11 @@ pub fn get(id: []const u8, request: *jetzig.Request) !jetzig.View {
|
||||||
const query = jetzig.database.Query(.Albumsong).include(.song, .{ .select = .{ .name, .id } }).join(.inner, .album).where(.{ .album = .{ .id = id } });
|
const query = jetzig.database.Query(.Albumsong).include(.song, .{ .select = .{ .name, .id } }).join(.inner, .album).where(.{ .album = .{ .id = id } });
|
||||||
const songs = try request.repo.all(query);
|
const songs = try request.repo.all(query);
|
||||||
for (songs) |song| {
|
for (songs) |song| {
|
||||||
|
const scrobbles = try jetzig.database.Query(.Scrobble).where(.{ .song_id = song.song.id }).count().execute(request.repo);
|
||||||
var song_view = try songs_view.append(.object);
|
var song_view = try songs_view.append(.object);
|
||||||
try song_view.put("name", song.song.name);
|
try song_view.put("name", song.song.name);
|
||||||
try song_view.put("url", song.song.id);
|
try song_view.put("url", song.song.id);
|
||||||
|
try song_view.put("scrobbles", scrobbles);
|
||||||
}
|
}
|
||||||
return request.render(.ok);
|
return request.render(.ok);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
@for (.songs) |song| {
|
@for (.songs) |song| {
|
||||||
<tr>
|
<tr>
|
||||||
<td class=cell><a href="/songs/{{song.url}}">{{song.name}}</a></td>
|
<td class=cell><a href="/songs/{{song.url}}">{{song.name}}</a></td>
|
||||||
|
<td class=cell>{{song.scrobbles}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</table>
|
</table>
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,13 @@ pub fn index(request: *jetzig.Request) !jetzig.View {
|
||||||
const query = jetzig.database.Query(.Artist).select(.{}).orderBy(.{ .name = .asc });
|
const query = jetzig.database.Query(.Artist).select(.{}).orderBy(.{ .name = .asc });
|
||||||
const artists = try request.repo.all(query);
|
const artists = try request.repo.all(query);
|
||||||
for (artists) |artist| {
|
for (artists) |artist| {
|
||||||
|
const scrobbles = try jetzig.database.Query(.Scrobbleartist).where(.{ .artist_id = artist.id }).count().execute(request.repo);
|
||||||
var artist_view = try artists_view.append(.object);
|
var artist_view = try artists_view.append(.object);
|
||||||
//const output = try request.allocator.dupe(u8, artist.name);
|
//const output = try request.allocator.dupe(u8, artist.name);
|
||||||
//std.mem.replaceScalar(u8, output, ' ', '_');
|
//std.mem.replaceScalar(u8, output, ' ', '_');
|
||||||
try artist_view.put("name", artist.name);
|
try artist_view.put("name", artist.name);
|
||||||
try artist_view.put("url", artist.id);
|
try artist_view.put("url", artist.id);
|
||||||
|
try artist_view.put("scrobbles", scrobbles);
|
||||||
}
|
}
|
||||||
|
|
||||||
return request.render(.ok);
|
return request.render(.ok);
|
||||||
|
|
@ -23,7 +25,10 @@ pub fn get(id: []const u8, request: *jetzig.Request) !jetzig.View {
|
||||||
var root = try request.data(.object);
|
var root = try request.data(.object);
|
||||||
try root.put("artist", artist.?.name);
|
try root.put("artist", artist.?.name);
|
||||||
var albums_view = try root.put("albums", .array);
|
var albums_view = try root.put("albums", .array);
|
||||||
const query = jetzig.database.Query(.Albumartist).include(.album, .{ .select = .{ .name, .id } }).join(.inner, .artist).where(.{ .artist = .{ .id = id } });
|
const query = jetzig.database.Query(.Albumartist)
|
||||||
|
.include(.album, .{ .select = .{ .name, .id } })
|
||||||
|
.join(.inner, .artist)
|
||||||
|
.where(.{ .artist = .{ .id = id } });
|
||||||
|
|
||||||
//const query = jetzig.database.Query(.Albumartist)
|
//const query = jetzig.database.Query(.Albumartist)
|
||||||
// .select(.{ .artist_id, jetquery.sql.count(.album_id) })
|
// .select(.{ .artist_id, jetquery.sql.count(.album_id) })
|
||||||
|
|
@ -32,13 +37,13 @@ pub fn get(id: []const u8, request: *jetzig.Request) !jetzig.View {
|
||||||
|
|
||||||
const albums = try request.repo.all(query);
|
const albums = try request.repo.all(query);
|
||||||
for (albums) |album| {
|
for (albums) |album| {
|
||||||
//const scrobbles = try jetzig.database.Query(.Scrobble).where(.{ .album_id = album.album.id }).count().execute(request.repo);
|
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);
|
var album_view = try albums_view.append(.object);
|
||||||
try album_view.put("name", album.album.name);
|
try album_view.put("name", album.album.name);
|
||||||
try album_view.put("url", album.album.id);
|
try album_view.put("url", album.album.id);
|
||||||
//try album_view.put("name", album.count__album_id);
|
//try album_view.put("name", album.count__album_id);
|
||||||
//try album_view.put("url", album.count__album_id);
|
//try album_view.put("url", album.count__album_id);
|
||||||
try album_view.put("scrobbles", 6);
|
try album_view.put("scrobbles", scrobbles);
|
||||||
//std.log.debug("{s}", .{album.album.name});
|
//std.log.debug("{s}", .{album.album.name});
|
||||||
}
|
}
|
||||||
return request.render(.ok);
|
return request.render(.ok);
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
@for (.albums) |album| {
|
@for (.albums) |album| {
|
||||||
<tr>
|
<tr>
|
||||||
<td class=cell><a href="/albums/{{album.url}}">{{album.name}}</a></td>
|
<td class=cell><a href="/albums/{{album.url}}">{{album.name}}</a></td>
|
||||||
<td calss=cell>{{album.scrobbles}}</td>
|
<td class=cell>{{album.scrobbles}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</table>
|
</table>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
@for (.artists) |artist| {
|
@for (.artists) |artist| {
|
||||||
<tr>
|
<tr>
|
||||||
<td class=cell><a href="/artists/{{artist.url}}">{{artist.name}}</a></td>
|
<td class=cell><a href="/artists/{{artist.url}}">{{artist.name}}</a></td>
|
||||||
|
<td class=cell>{{artist.scrobbles}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</table>
|
</table>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue