From 238c90478ecb7d9ddeb068eef65bc2c1c99f84f7 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Mon, 17 Oct 2022 20:02:29 -0700 Subject: [PATCH] Reset schema and migrations --- .../20221013004240_size_to_int/migration.sql | 9 - .../migration.sql | 35 --- .../migration.sql | 225 ++++++++++-------- src/server/prisma/schema.prisma | 120 ++++++++-- 4 files changed, 226 insertions(+), 163 deletions(-) delete mode 100644 src/server/prisma/migrations/20221013004240_size_to_int/migration.sql delete mode 100644 src/server/prisma/migrations/20221015025649_many_album_artists/migration.sql rename src/server/prisma/migrations/{20221012174013_initial => 20221018030119_initial}/migration.sql (83%) diff --git a/src/server/prisma/migrations/20221013004240_size_to_int/migration.sql b/src/server/prisma/migrations/20221013004240_size_to_int/migration.sql deleted file mode 100644 index d12901b12..000000000 --- a/src/server/prisma/migrations/20221013004240_size_to_int/migration.sql +++ /dev/null @@ -1,9 +0,0 @@ -/* - Warnings: - - - The `size` column on the `Song` table would be dropped and recreated. This will lead to data loss if there is data in the column. - -*/ --- AlterTable -ALTER TABLE "Song" DROP COLUMN "size", -ADD COLUMN "size" INTEGER; diff --git a/src/server/prisma/migrations/20221015025649_many_album_artists/migration.sql b/src/server/prisma/migrations/20221015025649_many_album_artists/migration.sql deleted file mode 100644 index acdf6e82d..000000000 --- a/src/server/prisma/migrations/20221015025649_many_album_artists/migration.sql +++ /dev/null @@ -1,35 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `albumArtistId` on the `Album` table. All the data in the column will be lost. - -*/ --- DropForeignKey -ALTER TABLE "Album" DROP CONSTRAINT "Album_albumArtistId_fkey"; - --- AlterTable -ALTER TABLE "Album" DROP COLUMN "albumArtistId"; - --- AlterTable -ALTER TABLE "Song" ADD COLUMN "albumArtistId" UUID; - --- CreateTable -CREATE TABLE "_AlbumToAlbumArtist" ( - "A" UUID NOT NULL, - "B" UUID NOT NULL -); - --- CreateIndex -CREATE UNIQUE INDEX "_AlbumToAlbumArtist_AB_unique" ON "_AlbumToAlbumArtist"("A", "B"); - --- CreateIndex -CREATE INDEX "_AlbumToAlbumArtist_B_index" ON "_AlbumToAlbumArtist"("B"); - --- AddForeignKey -ALTER TABLE "Song" ADD CONSTRAINT "Song_albumArtistId_fkey" FOREIGN KEY ("albumArtistId") REFERENCES "AlbumArtist"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_AlbumToAlbumArtist" ADD CONSTRAINT "_AlbumToAlbumArtist_A_fkey" FOREIGN KEY ("A") REFERENCES "Album"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_AlbumToAlbumArtist" ADD CONSTRAINT "_AlbumToAlbumArtist_B_fkey" FOREIGN KEY ("B") REFERENCES "AlbumArtist"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/server/prisma/migrations/20221012174013_initial/migration.sql b/src/server/prisma/migrations/20221018030119_initial/migration.sql similarity index 83% rename from src/server/prisma/migrations/20221012174013_initial/migration.sql rename to src/server/prisma/migrations/20221018030119_initial/migration.sql index 30670d68e..8dad94df4 100644 --- a/src/server/prisma/migrations/20221012174013_initial/migration.sql +++ b/src/server/prisma/migrations/20221018030119_initial/migration.sql @@ -64,6 +64,18 @@ CREATE TABLE "Server" ( CONSTRAINT "Server_pkey" PRIMARY KEY ("id") ); +-- CreateTable +CREATE TABLE "ServerCredential" ( + "id" UUID NOT NULL DEFAULT gen_random_uuid(), + "credential" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "serverId" UUID NOT NULL, + "userId" UUID NOT NULL, + + CONSTRAINT "ServerCredential_pkey" PRIMARY KEY ("id") +); + -- CreateTable CREATE TABLE "Folder" ( "id" UUID NOT NULL DEFAULT gen_random_uuid(), @@ -78,7 +90,7 @@ CREATE TABLE "Folder" ( ); -- CreateTable -CREATE TABLE "ServerPermissions" ( +CREATE TABLE "ServerPermission" ( "id" UUID NOT NULL DEFAULT gen_random_uuid(), "type" "ServerPermissionType" NOT NULL, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, @@ -86,7 +98,7 @@ CREATE TABLE "ServerPermissions" ( "userId" UUID NOT NULL, "serverId" UUID NOT NULL, - CONSTRAINT "ServerPermissions_pkey" PRIMARY KEY ("id") + CONSTRAINT "ServerPermission_pkey" PRIMARY KEY ("id") ); -- CreateTable @@ -115,14 +127,14 @@ CREATE TABLE "ServerFolder" ( ); -- CreateTable -CREATE TABLE "ServerFolderPermissions" ( +CREATE TABLE "ServerFolderPermission" ( "id" UUID NOT NULL DEFAULT gen_random_uuid(), "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, "userId" UUID NOT NULL, "serverFolderId" UUID NOT NULL, - CONSTRAINT "ServerFolderPermissions_pkey" PRIMARY KEY ("id") + CONSTRAINT "ServerFolderPermission_pkey" PRIMARY KEY ("id") ); -- CreateTable @@ -136,13 +148,43 @@ CREATE TABLE "Genre" ( ); -- CreateTable -CREATE TABLE "Favorite" ( - "id" UUID NOT NULL DEFAULT gen_random_uuid(), +CREATE TABLE "AlbumArtistFavorite" ( "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, + "albumArtistId" UUID NOT NULL, "userId" UUID NOT NULL, - CONSTRAINT "Favorite_pkey" PRIMARY KEY ("id") + CONSTRAINT "AlbumArtistFavorite_pkey" PRIMARY KEY ("userId","albumArtistId") +); + +-- CreateTable +CREATE TABLE "ArtistFavorite" ( + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "artistId" UUID NOT NULL, + "userId" UUID NOT NULL, + + CONSTRAINT "ArtistFavorite_pkey" PRIMARY KEY ("userId","artistId") +); + +-- CreateTable +CREATE TABLE "AlbumFavorite" ( + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "albumId" UUID NOT NULL, + "userId" UUID NOT NULL, + + CONSTRAINT "AlbumFavorite_pkey" PRIMARY KEY ("userId","albumId") +); + +-- CreateTable +CREATE TABLE "SongFavorite" ( + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "songId" UUID NOT NULL, + "userId" UUID NOT NULL, + + CONSTRAINT "SongFavorite_pkey" PRIMARY KEY ("userId","songId") ); -- CreateTable @@ -188,7 +230,7 @@ CREATE TABLE "SongRating" ( "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, "userId" UUID NOT NULL, - "songId" UUID, + "songId" UUID NOT NULL, CONSTRAINT "SongRating_pkey" PRIMARY KEY ("id") ); @@ -245,7 +287,6 @@ CREATE TABLE "Album" ( "deleted" BOOLEAN NOT NULL DEFAULT false, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, - "albumArtistId" UUID, "serverId" UUID NOT NULL, CONSTRAINT "Album_pkey" PRIMARY KEY ("id") @@ -275,7 +316,7 @@ CREATE TABLE "Song" ( "releaseDate" TIMESTAMP(3), "releaseYear" INTEGER, "duration" DOUBLE PRECISION NOT NULL, - "size" TEXT, + "size" INTEGER, "lyrics" TEXT, "bitRate" INTEGER NOT NULL, "container" TEXT NOT NULL, @@ -287,6 +328,7 @@ CREATE TABLE "Song" ( "deleted" BOOLEAN NOT NULL DEFAULT false, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, + "albumArtistId" UUID, "albumId" UUID, "serverId" UUID NOT NULL, @@ -339,12 +381,6 @@ CREATE TABLE "_GenreToSong" ( "B" UUID NOT NULL ); --- CreateTable -CREATE TABLE "_FavoriteToSong" ( - "A" UUID NOT NULL, - "B" UUID NOT NULL -); - -- CreateTable CREATE TABLE "_ImageToSong" ( "A" UUID NOT NULL, @@ -381,12 +417,6 @@ CREATE TABLE "_AlbumArtistToImage" ( "B" UUID NOT NULL ); --- CreateTable -CREATE TABLE "_AlbumArtistToFavorite" ( - "A" UUID NOT NULL, - "B" UUID NOT NULL -); - -- CreateTable CREATE TABLE "_AlbumToGenre" ( "A" UUID NOT NULL, @@ -399,6 +429,12 @@ CREATE TABLE "_AlbumToArtist" ( "B" UUID NOT NULL ); +-- CreateTable +CREATE TABLE "_AlbumToAlbumArtist" ( + "A" UUID NOT NULL, + "B" UUID NOT NULL +); + -- CreateTable CREATE TABLE "_AlbumToExternal" ( "A" UUID NOT NULL, @@ -417,12 +453,6 @@ CREATE TABLE "_AlbumToImage" ( "B" UUID NOT NULL ); --- CreateTable -CREATE TABLE "_AlbumToFavorite" ( - "A" UUID NOT NULL, - "B" UUID NOT NULL -); - -- CreateTable CREATE TABLE "_ArtistToGenre" ( "A" UUID NOT NULL, @@ -453,12 +483,6 @@ CREATE TABLE "_ArtistToImage" ( "B" UUID NOT NULL ); --- CreateTable -CREATE TABLE "_ArtistToFavorite" ( - "A" UUID NOT NULL, - "B" UUID NOT NULL -); - -- CreateIndex CREATE UNIQUE INDEX "RefreshToken_token_key" ON "RefreshToken"("token"); @@ -478,7 +502,7 @@ CREATE UNIQUE INDEX "Folder_path_key" ON "Folder"("path"); CREATE UNIQUE INDEX "Folder_serverId_path_key" ON "Folder"("serverId", "path"); -- CreateIndex -CREATE UNIQUE INDEX "ServerPermissions_userId_serverId_key" ON "ServerPermissions"("userId", "serverId"); +CREATE UNIQUE INDEX "ServerPermission_userId_serverId_key" ON "ServerPermission"("userId", "serverId"); -- CreateIndex CREATE UNIQUE INDEX "ServerUrl_serverId_url_key" ON "ServerUrl"("serverId", "url"); @@ -490,11 +514,35 @@ CREATE UNIQUE INDEX "ServerFolder_remoteId_key" ON "ServerFolder"("remoteId"); CREATE UNIQUE INDEX "ServerFolder_serverId_remoteId_key" ON "ServerFolder"("serverId", "remoteId"); -- CreateIndex -CREATE UNIQUE INDEX "ServerFolderPermissions_userId_serverFolderId_key" ON "ServerFolderPermissions"("userId", "serverFolderId"); +CREATE UNIQUE INDEX "ServerFolderPermission_userId_serverFolderId_key" ON "ServerFolderPermission"("userId", "serverFolderId"); -- CreateIndex CREATE UNIQUE INDEX "Genre_name_key" ON "Genre"("name"); +-- CreateIndex +CREATE UNIQUE INDEX "AlbumArtistFavorite_userId_albumArtistId_key" ON "AlbumArtistFavorite"("userId", "albumArtistId"); + +-- CreateIndex +CREATE UNIQUE INDEX "ArtistFavorite_userId_artistId_key" ON "ArtistFavorite"("userId", "artistId"); + +-- CreateIndex +CREATE UNIQUE INDEX "AlbumFavorite_userId_albumId_key" ON "AlbumFavorite"("userId", "albumId"); + +-- CreateIndex +CREATE UNIQUE INDEX "SongFavorite_userId_songId_key" ON "SongFavorite"("userId", "songId"); + +-- CreateIndex +CREATE UNIQUE INDEX "AlbumArtistRating_userId_albumArtistId_key" ON "AlbumArtistRating"("userId", "albumArtistId"); + +-- CreateIndex +CREATE UNIQUE INDEX "ArtistRating_userId_artistId_key" ON "ArtistRating"("userId", "artistId"); + +-- CreateIndex +CREATE UNIQUE INDEX "AlbumRating_userId_albumId_key" ON "AlbumRating"("userId", "albumId"); + +-- CreateIndex +CREATE UNIQUE INDEX "SongRating_userId_songId_key" ON "SongRating"("userId", "songId"); + -- CreateIndex CREATE UNIQUE INDEX "Image_remoteUrl_type_key" ON "Image"("remoteUrl", "type"); @@ -543,12 +591,6 @@ CREATE UNIQUE INDEX "_GenreToSong_AB_unique" ON "_GenreToSong"("A", "B"); -- CreateIndex CREATE INDEX "_GenreToSong_B_index" ON "_GenreToSong"("B"); --- CreateIndex -CREATE UNIQUE INDEX "_FavoriteToSong_AB_unique" ON "_FavoriteToSong"("A", "B"); - --- CreateIndex -CREATE INDEX "_FavoriteToSong_B_index" ON "_FavoriteToSong"("B"); - -- CreateIndex CREATE UNIQUE INDEX "_ImageToSong_AB_unique" ON "_ImageToSong"("A", "B"); @@ -585,12 +627,6 @@ CREATE UNIQUE INDEX "_AlbumArtistToImage_AB_unique" ON "_AlbumArtistToImage"("A" -- CreateIndex CREATE INDEX "_AlbumArtistToImage_B_index" ON "_AlbumArtistToImage"("B"); --- CreateIndex -CREATE UNIQUE INDEX "_AlbumArtistToFavorite_AB_unique" ON "_AlbumArtistToFavorite"("A", "B"); - --- CreateIndex -CREATE INDEX "_AlbumArtistToFavorite_B_index" ON "_AlbumArtistToFavorite"("B"); - -- CreateIndex CREATE UNIQUE INDEX "_AlbumToGenre_AB_unique" ON "_AlbumToGenre"("A", "B"); @@ -603,6 +639,12 @@ CREATE UNIQUE INDEX "_AlbumToArtist_AB_unique" ON "_AlbumToArtist"("A", "B"); -- CreateIndex CREATE INDEX "_AlbumToArtist_B_index" ON "_AlbumToArtist"("B"); +-- CreateIndex +CREATE UNIQUE INDEX "_AlbumToAlbumArtist_AB_unique" ON "_AlbumToAlbumArtist"("A", "B"); + +-- CreateIndex +CREATE INDEX "_AlbumToAlbumArtist_B_index" ON "_AlbumToAlbumArtist"("B"); + -- CreateIndex CREATE UNIQUE INDEX "_AlbumToExternal_AB_unique" ON "_AlbumToExternal"("A", "B"); @@ -621,12 +663,6 @@ CREATE UNIQUE INDEX "_AlbumToImage_AB_unique" ON "_AlbumToImage"("A", "B"); -- CreateIndex CREATE INDEX "_AlbumToImage_B_index" ON "_AlbumToImage"("B"); --- CreateIndex -CREATE UNIQUE INDEX "_AlbumToFavorite_AB_unique" ON "_AlbumToFavorite"("A", "B"); - --- CreateIndex -CREATE INDEX "_AlbumToFavorite_B_index" ON "_AlbumToFavorite"("B"); - -- CreateIndex CREATE UNIQUE INDEX "_ArtistToGenre_AB_unique" ON "_ArtistToGenre"("A", "B"); @@ -657,18 +693,18 @@ CREATE UNIQUE INDEX "_ArtistToImage_AB_unique" ON "_ArtistToImage"("A", "B"); -- CreateIndex CREATE INDEX "_ArtistToImage_B_index" ON "_ArtistToImage"("B"); --- CreateIndex -CREATE UNIQUE INDEX "_ArtistToFavorite_AB_unique" ON "_ArtistToFavorite"("A", "B"); - --- CreateIndex -CREATE INDEX "_ArtistToFavorite_B_index" ON "_ArtistToFavorite"("B"); - -- AddForeignKey ALTER TABLE "RefreshToken" ADD CONSTRAINT "RefreshToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "History" ADD CONSTRAINT "History_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; +-- AddForeignKey +ALTER TABLE "ServerCredential" ADD CONSTRAINT "ServerCredential_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "Server"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ServerCredential" ADD CONSTRAINT "ServerCredential_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + -- AddForeignKey ALTER TABLE "Folder" ADD CONSTRAINT "Folder_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "Folder"("id") ON DELETE SET NULL ON UPDATE CASCADE; @@ -676,10 +712,10 @@ ALTER TABLE "Folder" ADD CONSTRAINT "Folder_parentId_fkey" FOREIGN KEY ("parentI ALTER TABLE "Folder" ADD CONSTRAINT "Folder_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "Server"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey -ALTER TABLE "ServerPermissions" ADD CONSTRAINT "ServerPermissions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE "ServerPermission" ADD CONSTRAINT "ServerPermission_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey -ALTER TABLE "ServerPermissions" ADD CONSTRAINT "ServerPermissions_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "Server"("id") ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE "ServerPermission" ADD CONSTRAINT "ServerPermission_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "Server"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "ServerUrl" ADD CONSTRAINT "ServerUrl_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "Server"("id") ON DELETE CASCADE ON UPDATE CASCADE; @@ -688,13 +724,34 @@ ALTER TABLE "ServerUrl" ADD CONSTRAINT "ServerUrl_serverId_fkey" FOREIGN KEY ("s ALTER TABLE "ServerFolder" ADD CONSTRAINT "ServerFolder_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "Server"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey -ALTER TABLE "ServerFolderPermissions" ADD CONSTRAINT "ServerFolderPermissions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; +ALTER TABLE "ServerFolderPermission" ADD CONSTRAINT "ServerFolderPermission_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey -ALTER TABLE "ServerFolderPermissions" ADD CONSTRAINT "ServerFolderPermissions_serverFolderId_fkey" FOREIGN KEY ("serverFolderId") REFERENCES "ServerFolder"("id") ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE "ServerFolderPermission" ADD CONSTRAINT "ServerFolderPermission_serverFolderId_fkey" FOREIGN KEY ("serverFolderId") REFERENCES "ServerFolder"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey -ALTER TABLE "Favorite" ADD CONSTRAINT "Favorite_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE "AlbumArtistFavorite" ADD CONSTRAINT "AlbumArtistFavorite_albumArtistId_fkey" FOREIGN KEY ("albumArtistId") REFERENCES "AlbumArtist"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AlbumArtistFavorite" ADD CONSTRAINT "AlbumArtistFavorite_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ArtistFavorite" ADD CONSTRAINT "ArtistFavorite_artistId_fkey" FOREIGN KEY ("artistId") REFERENCES "Artist"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ArtistFavorite" ADD CONSTRAINT "ArtistFavorite_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AlbumFavorite" ADD CONSTRAINT "AlbumFavorite_albumId_fkey" FOREIGN KEY ("albumId") REFERENCES "Album"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AlbumFavorite" ADD CONSTRAINT "AlbumFavorite_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SongFavorite" ADD CONSTRAINT "SongFavorite_songId_fkey" FOREIGN KEY ("songId") REFERENCES "Song"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SongFavorite" ADD CONSTRAINT "SongFavorite_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "AlbumArtistRating" ADD CONSTRAINT "AlbumArtistRating_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; @@ -718,20 +775,20 @@ ALTER TABLE "AlbumRating" ADD CONSTRAINT "AlbumRating_albumId_fkey" FOREIGN KEY ALTER TABLE "SongRating" ADD CONSTRAINT "SongRating_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey -ALTER TABLE "SongRating" ADD CONSTRAINT "SongRating_songId_fkey" FOREIGN KEY ("songId") REFERENCES "Song"("id") ON DELETE SET NULL ON UPDATE CASCADE; +ALTER TABLE "SongRating" ADD CONSTRAINT "SongRating_songId_fkey" FOREIGN KEY ("songId") REFERENCES "Song"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "AlbumArtist" ADD CONSTRAINT "AlbumArtist_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "Server"("id") ON DELETE CASCADE ON UPDATE CASCADE; --- AddForeignKey -ALTER TABLE "Album" ADD CONSTRAINT "Album_albumArtistId_fkey" FOREIGN KEY ("albumArtistId") REFERENCES "AlbumArtist"("id") ON DELETE SET NULL ON UPDATE CASCADE; - -- AddForeignKey ALTER TABLE "Album" ADD CONSTRAINT "Album_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "Server"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "Artist" ADD CONSTRAINT "Artist_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "Server"("id") ON DELETE CASCADE ON UPDATE CASCADE; +-- AddForeignKey +ALTER TABLE "Song" ADD CONSTRAINT "Song_albumArtistId_fkey" FOREIGN KEY ("albumArtistId") REFERENCES "AlbumArtist"("id") ON DELETE SET NULL ON UPDATE CASCADE; + -- AddForeignKey ALTER TABLE "Song" ADD CONSTRAINT "Song_albumId_fkey" FOREIGN KEY ("albumId") REFERENCES "Album"("id") ON DELETE SET NULL ON UPDATE CASCADE; @@ -771,12 +828,6 @@ ALTER TABLE "_GenreToSong" ADD CONSTRAINT "_GenreToSong_A_fkey" FOREIGN KEY ("A" -- AddForeignKey ALTER TABLE "_GenreToSong" ADD CONSTRAINT "_GenreToSong_B_fkey" FOREIGN KEY ("B") REFERENCES "Song"("id") ON DELETE CASCADE ON UPDATE CASCADE; --- AddForeignKey -ALTER TABLE "_FavoriteToSong" ADD CONSTRAINT "_FavoriteToSong_A_fkey" FOREIGN KEY ("A") REFERENCES "Favorite"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_FavoriteToSong" ADD CONSTRAINT "_FavoriteToSong_B_fkey" FOREIGN KEY ("B") REFERENCES "Song"("id") ON DELETE CASCADE ON UPDATE CASCADE; - -- AddForeignKey ALTER TABLE "_ImageToSong" ADD CONSTRAINT "_ImageToSong_A_fkey" FOREIGN KEY ("A") REFERENCES "Image"("id") ON DELETE CASCADE ON UPDATE CASCADE; @@ -813,12 +864,6 @@ ALTER TABLE "_AlbumArtistToImage" ADD CONSTRAINT "_AlbumArtistToImage_A_fkey" FO -- AddForeignKey ALTER TABLE "_AlbumArtistToImage" ADD CONSTRAINT "_AlbumArtistToImage_B_fkey" FOREIGN KEY ("B") REFERENCES "Image"("id") ON DELETE CASCADE ON UPDATE CASCADE; --- AddForeignKey -ALTER TABLE "_AlbumArtistToFavorite" ADD CONSTRAINT "_AlbumArtistToFavorite_A_fkey" FOREIGN KEY ("A") REFERENCES "AlbumArtist"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_AlbumArtistToFavorite" ADD CONSTRAINT "_AlbumArtistToFavorite_B_fkey" FOREIGN KEY ("B") REFERENCES "Favorite"("id") ON DELETE CASCADE ON UPDATE CASCADE; - -- AddForeignKey ALTER TABLE "_AlbumToGenre" ADD CONSTRAINT "_AlbumToGenre_A_fkey" FOREIGN KEY ("A") REFERENCES "Album"("id") ON DELETE CASCADE ON UPDATE CASCADE; @@ -831,6 +876,12 @@ ALTER TABLE "_AlbumToArtist" ADD CONSTRAINT "_AlbumToArtist_A_fkey" FOREIGN KEY -- AddForeignKey ALTER TABLE "_AlbumToArtist" ADD CONSTRAINT "_AlbumToArtist_B_fkey" FOREIGN KEY ("B") REFERENCES "Artist"("id") ON DELETE CASCADE ON UPDATE CASCADE; +-- AddForeignKey +ALTER TABLE "_AlbumToAlbumArtist" ADD CONSTRAINT "_AlbumToAlbumArtist_A_fkey" FOREIGN KEY ("A") REFERENCES "Album"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_AlbumToAlbumArtist" ADD CONSTRAINT "_AlbumToAlbumArtist_B_fkey" FOREIGN KEY ("B") REFERENCES "AlbumArtist"("id") ON DELETE CASCADE ON UPDATE CASCADE; + -- AddForeignKey ALTER TABLE "_AlbumToExternal" ADD CONSTRAINT "_AlbumToExternal_A_fkey" FOREIGN KEY ("A") REFERENCES "Album"("id") ON DELETE CASCADE ON UPDATE CASCADE; @@ -849,12 +900,6 @@ ALTER TABLE "_AlbumToImage" ADD CONSTRAINT "_AlbumToImage_A_fkey" FOREIGN KEY (" -- AddForeignKey ALTER TABLE "_AlbumToImage" ADD CONSTRAINT "_AlbumToImage_B_fkey" FOREIGN KEY ("B") REFERENCES "Image"("id") ON DELETE CASCADE ON UPDATE CASCADE; --- AddForeignKey -ALTER TABLE "_AlbumToFavorite" ADD CONSTRAINT "_AlbumToFavorite_A_fkey" FOREIGN KEY ("A") REFERENCES "Album"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_AlbumToFavorite" ADD CONSTRAINT "_AlbumToFavorite_B_fkey" FOREIGN KEY ("B") REFERENCES "Favorite"("id") ON DELETE CASCADE ON UPDATE CASCADE; - -- AddForeignKey ALTER TABLE "_ArtistToGenre" ADD CONSTRAINT "_ArtistToGenre_A_fkey" FOREIGN KEY ("A") REFERENCES "Artist"("id") ON DELETE CASCADE ON UPDATE CASCADE; @@ -884,9 +929,3 @@ ALTER TABLE "_ArtistToImage" ADD CONSTRAINT "_ArtistToImage_A_fkey" FOREIGN KEY -- AddForeignKey ALTER TABLE "_ArtistToImage" ADD CONSTRAINT "_ArtistToImage_B_fkey" FOREIGN KEY ("B") REFERENCES "Image"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_ArtistToFavorite" ADD CONSTRAINT "_ArtistToFavorite_A_fkey" FOREIGN KEY ("A") REFERENCES "Artist"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_ArtistToFavorite" ADD CONSTRAINT "_ArtistToFavorite_B_fkey" FOREIGN KEY ("B") REFERENCES "Favorite"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/server/prisma/schema.prisma b/src/server/prisma/schema.prisma index 33e44bc6c..aced1c696 100644 --- a/src/server/prisma/schema.prisma +++ b/src/server/prisma/schema.prisma @@ -66,7 +66,6 @@ model User { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - favorites Favorite[] histories History[] albumArtistRatings AlbumArtistRating[] artistRatings ArtistRating[] @@ -74,8 +73,13 @@ model User { songRatings SongRating[] refreshTokens RefreshToken[] - serverFolderPermissions ServerFolderPermissions[] - serverPermissions ServerPermissions[] + serverFolderPermissions ServerFolderPermission[] + serverPermissions ServerPermission[] + serverCredentials ServerCredential[] + albumArtistFavorites AlbumArtistFavorite[] + ArtistFavorite ArtistFavorite[] + AlbumFavorite AlbumFavorite[] + SongFavorite SongFavorite[] } model History { @@ -105,10 +109,24 @@ model Server { serverFolders ServerFolder[] serverUrls ServerUrl[] folders Folder[] - serverPermissions ServerPermissions[] + serverPermissions ServerPermission[] + serverCredentials ServerCredential[] tasks Task[] } +model ServerCredential { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + credential String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + server Server @relation(fields: [serverId], references: [id], onDelete: Cascade) + serverId String @db.Uuid + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String @db.Uuid +} + model Folder { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid name String @@ -129,7 +147,7 @@ model Folder { @@unique(fields: [serverId, path], name: "uniqueFolderId") } -model ServerPermissions { +model ServerPermission { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid type ServerPermissionType createdAt DateTime @default(now()) @@ -170,7 +188,7 @@ model ServerFolder { albums Album[] songs Song[] folders Folder[] - serverFolderPermissions ServerFolderPermissions[] + serverFolderPermissions ServerFolderPermission[] server Server @relation(fields: [serverId], references: [id], onDelete: Cascade) serverId String @db.Uuid @@ -178,7 +196,7 @@ model ServerFolder { @@unique(fields: [serverId, remoteId], name: "uniqueServerFolderId") } -model ServerFolderPermissions { +model ServerFolderPermission { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -204,18 +222,60 @@ model Genre { songs Song[] } -model Favorite { - id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid +model AlbumArtistFavorite { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - albumArtists AlbumArtist[] - artists Artist[] - albums Album[] - songs Song[] + albumArtist AlbumArtist @relation(fields: [albumArtistId], references: [id], onDelete: Cascade) + albumArtistId String @db.Uuid user User @relation(fields: [userId], references: [id], onDelete: Cascade) userId String @db.Uuid + + @@id([userId, albumArtistId]) + @@unique(fields: [userId, albumArtistId], name: "uniqueAlbumArtistFavoriteId") +} + +model ArtistFavorite { + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + artist Artist @relation(fields: [artistId], references: [id], onDelete: Cascade) + artistId String @db.Uuid + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String @db.Uuid + + @@id([userId, artistId]) + @@unique(fields: [userId, artistId], name: "uniqueArtistFavoriteId") +} + +model AlbumFavorite { + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + album Album @relation(fields: [albumId], references: [id], onDelete: Cascade) + albumId String @db.Uuid + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String @db.Uuid + + @@id([userId, albumId]) + @@unique(fields: [userId, albumId], name: "uniqueAlbumFavoriteId") +} + +model SongFavorite { + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + song Song @relation(fields: [songId], references: [id], onDelete: Cascade) + songId String @db.Uuid + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String @db.Uuid + + @@id([userId, songId]) + @@unique(fields: [userId, songId], name: "uniqueSongFavoriteId") } model AlbumArtistRating { @@ -229,6 +289,8 @@ model AlbumArtistRating { albumArtist AlbumArtist @relation(fields: [albumArtistId], references: [id]) albumArtistId String @db.Uuid + + @@unique(fields: [userId, albumArtistId], name: "uniqueAlbumArtistRatingId") } model ArtistRating { @@ -242,6 +304,8 @@ model ArtistRating { artist Artist @relation(fields: [artistId], references: [id]) artistId String @db.Uuid + + @@unique(fields: [userId, artistId], name: "uniqueArtistRatingId") } model AlbumRating { @@ -255,6 +319,8 @@ model AlbumRating { album Album @relation(fields: [albumId], references: [id]) albumId String @db.Uuid + + @@unique(fields: [userId, albumId], name: "uniqueAlbumRatingId") } model SongRating { @@ -266,8 +332,10 @@ model SongRating { user User @relation(fields: [userId], references: [id]) userId String @db.Uuid - song Song? @relation(fields: [songId], references: [id]) - songId String? @db.Uuid + song Song @relation(fields: [songId], references: [id]) + songId String @db.Uuid + + @@unique(fields: [userId, songId], name: "uniqueSongRatingId") } model Image { @@ -313,14 +381,14 @@ model AlbumArtist { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - albums Album[] - genres Genre[] - externals External[] - serverFolders ServerFolder[] - ratings AlbumArtistRating[] - images Image[] - favorites Favorite[] - songs Song[] + albums Album[] + genres Genre[] + externals External[] + serverFolders ServerFolder[] + ratings AlbumArtistRating[] + images Image[] + songs Song[] + albumArtistFavorites AlbumArtistFavorite[] server Server @relation(fields: [serverId], references: [id], onDelete: Cascade) serverId String @db.Uuid @@ -348,7 +416,7 @@ model Album { serverFolders ServerFolder[] ratings AlbumRating[] images Image[] - favorites Favorite[] + favorites AlbumFavorite[] server Server @relation(fields: [serverId], references: [id], onDelete: Cascade) serverId String @db.Uuid @@ -374,7 +442,7 @@ model Artist { serverFolders ServerFolder[] ratings ArtistRating[] images Image[] - favorites Favorite[] + favorites ArtistFavorite[] server Server @relation(fields: [serverId], references: [id], onDelete: Cascade) serverId String @db.Uuid @@ -410,7 +478,7 @@ model Song { histories History[] ratings SongRating[] images Image[] - favorites Favorite[] + favorites SongFavorite[] albumArtist AlbumArtist? @relation(fields: [albumArtistId], references: [id]) albumArtistId String? @db.Uuid