diff --git a/migrations/2024-02-06-150334_create_songs_table/down.sql b/migrations/2024-02-06-150334_create_songs_table/down.sql new file mode 100644 index 0000000..b5ef474 --- /dev/null +++ b/migrations/2024-02-06-150334_create_songs_table/down.sql @@ -0,0 +1,2 @@ +DROP TABLE song_artists; +DROP TABLE songs; diff --git a/migrations/2024-02-06-150334_create_songs_table/up.sql b/migrations/2024-02-06-150334_create_songs_table/up.sql new file mode 100644 index 0000000..91249a1 --- /dev/null +++ b/migrations/2024-02-06-150334_create_songs_table/up.sql @@ -0,0 +1,16 @@ +CREATE TABLE songs ( + id SERIAL PRIMARY KEY UNIQUE NOT NULL, + title VARCHAR NOT NULL, + album_id INTEGER REFERENCES albums(id), + track INTEGER, + duration INTEGER NOT NULL, + release_date DATE, + storage_path VARCHAR NOT NULL, + image_path VARCHAR +); + +CREATE TABLE song_artists ( + song_id INTEGER REFERENCES songs(id) ON DELETE CASCADE NOT NULL, + artist_id INTEGER REFERENCES artists(id) ON DELETE CASCADE NOT NULL, + PRIMARY KEY (song_id, artist_id) +); diff --git a/src/schema.rs b/src/schema.rs index 1029c02..b98d736 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -22,6 +22,26 @@ diesel::table! { } } +diesel::table! { + song_artists (song_id, artist_id) { + song_id -> Int4, + artist_id -> Int4, + } +} + +diesel::table! { + songs (id) { + id -> Int4, + title -> Varchar, + album_id -> Nullable, + track -> Nullable, + duration -> Int4, + release_date -> Nullable, + storage_path -> Varchar, + image_path -> Nullable, + } +} + diesel::table! { users (id) { id -> Int4, @@ -34,10 +54,15 @@ diesel::table! { diesel::joinable!(album_artists -> albums (album_id)); diesel::joinable!(album_artists -> artists (artist_id)); +diesel::joinable!(song_artists -> artists (artist_id)); +diesel::joinable!(song_artists -> songs (song_id)); +diesel::joinable!(songs -> albums (album_id)); diesel::allow_tables_to_appear_in_same_query!( album_artists, albums, artists, + song_artists, + songs, users, );