zuletzt/src/app/database/Schema.zig
mitteneer 996022fe5f Make rating data optional
Use HTML to enfore at least one of the two fields has a value, but I don't want to require both
2025-06-23 16:47:46 -04:00

205 lines
4.7 KiB
Zig

const jetquery = @import("jetzig").jetquery;
pub const Album = jetquery.Model(
@This(),
"albums",
struct {
id: i64,
name: []const u8,
length: ?f32,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.albumsongs = jetquery.hasMany(.Albumsong, .{}),
.artistalbums = jetquery.hasMany(.Artistalbum, .{}),
},
},
);
pub const Albumsong = jetquery.Model(
@This(),
"albumsongs",
struct {
id: i64,
song_id: i64,
album_id: i64,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.song = jetquery.belongsTo(.Song, .{}),
.album = jetquery.belongsTo(.Album, .{}),
.scrobbles = jetquery.hasMany(.Scrobble, .{ .foreign_key = "albumsong" }),
.albumsongsartists = jetquery.hasMany(.Albumsongsartist, .{}),
},
},
);
pub const Albumsongsartist = jetquery.Model(
@This(),
"albumsongsartists",
struct {
id: i64,
albumsong_id: i64,
artist_id: i64,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.albumsong = jetquery.belongsTo(.Albumsong, .{}),
.artist = jetquery.belongsTo(.Artist, .{}),
},
},
);
pub const Artistalbum = jetquery.Model(
@This(),
"artistalbums",
struct {
id: i64,
album_id: i64,
artist_id: i64,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.album = jetquery.belongsTo(.Album, .{}),
.artist = jetquery.belongsTo(.Artist, .{}),
},
},
);
pub const Artist = jetquery.Model(
@This(),
"artists",
struct {
id: i64,
name: []const u8,
disambiguation: ?[]const u8,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.albumsongsartists = jetquery.hasMany(.Albumsongsartist, .{}),
.artistalbums = jetquery.hasMany(.Artistalbum, .{}),
.artistsongs = jetquery.hasMany(.Artistsong, .{}),
},
},
);
pub const Scrobble = jetquery.Model(
@This(),
"scrobbles",
struct {
id: i32,
albumsong: i64,
datetime: jetquery.DateTime,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.albumsong = jetquery.belongsTo(.Albumsong, .{ .foreign_key = "albumsong" }),
},
},
);
pub const Song = jetquery.Model(
@This(),
"songs",
struct {
id: i64,
name: []const u8,
length: ?f32,
hidden: bool,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.albumsongs = jetquery.hasMany(.Albumsong, .{}),
.artistsongs = jetquery.hasMany(.Artistsong, .{}),
},
},
);
pub const Artistsong = jetquery.Model(
@This(),
"artistsongs",
struct {
id: i64,
artist_id: i64,
song_id: i64,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.artist = jetquery.belongsTo(.Artist, .{}),
.song = jetquery.belongsTo(.Song, .{}),
},
},
);
pub const Albumrating = jetquery.Model(
@This(),
"albumratings",
struct {
id: i32,
album: i64,
rating: ?i16,
rating_text: ?[]const u8,
date: jetquery.DateTime,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.album = jetquery.belongsTo(.Album, .{ .foreign_key = "album" }),
},
},
);
pub const Artistrating = jetquery.Model(
@This(),
"artistratings",
struct {
id: i32,
artist: i64,
rating: ?i16,
rating_text: ?[]const u8,
date: jetquery.DateTime,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.artist = jetquery.belongsTo(.Artist, .{ .foreign_key = "artist" }),
},
},
);
pub const Songrating = jetquery.Model(
@This(),
"songratings",
struct {
id: i32,
song: i64,
rating: ?i16,
rating_text: ?[]const u8,
date: jetquery.DateTime,
created_at: jetquery.DateTime,
updated_at: jetquery.DateTime,
},
.{
.relations = .{
.albumsong = jetquery.belongsTo(.Albumsong, .{ .foreign_key = "song" }),
},
},
);