diff --git a/prisma/migrations/20240223223525_init/migration.sql b/prisma/migrations/20240223223525_init/migration.sql new file mode 100644 index 0000000..6458386 --- /dev/null +++ b/prisma/migrations/20240223223525_init/migration.sql @@ -0,0 +1,548 @@ +-- CreateEnum +CREATE TYPE "ContentType" AS ENUM ('MUSIC', 'PODCAST', 'AUDIOBOOK', 'POEM', 'PAPER'); + +-- CreateTable +CREATE TABLE "Article" ( + "id" SERIAL NOT NULL, + "slug" TEXT NOT NULL, + "title" TEXT NOT NULL, + "description" TEXT NOT NULL, + "body" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "userId" INTEGER NOT NULL, + + CONSTRAINT "Article_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Comment" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "body" TEXT NOT NULL, + "articleId" INTEGER NOT NULL, + "userId" INTEGER NOT NULL, + + CONSTRAINT "Comment_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Tag" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + + CONSTRAINT "Tag_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "users" ( + "id" SERIAL NOT NULL, + "email" TEXT NOT NULL, + "username" TEXT NOT NULL, + "password" TEXT NOT NULL, + "image" TEXT DEFAULT 'https://api.realworld.io/images/smiley-cyrus.jpeg', + "bio" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "users_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "artists" ( + "slug" TEXT NOT NULL, + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "creatorType" "ContentType" NOT NULL, + "primaryImage" TEXT, + "followerCount" INTEGER, + "fanCount" INTEGER, + "isVerified" BOOLEAN NOT NULL, + "dominantLanguage" TEXT, + "dominantType" TEXT, + "bio" TEXT, + "dob" TEXT, + "fb" TEXT, + "twitter" TEXT, + "wiki" TEXT, + "availableLanguages" TEXT, + "isRadioPresent" BOOLEAN, + "isBand" BOOLEAN, + "userId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "artists_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Album" ( + "slug" TEXT NOT NULL, + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "releaseYear" TEXT, + "coverImage" TEXT, + "contentType" "ContentType" NOT NULL, + "duration" INTEGER, + "price" INTEGER, + "mainArtistSlug" TEXT, + "currency" TEXT, + "label" TEXT, + "language" TEXT, + "origin" TEXT, + "mediaPreviewUrl" TEXT, + "likes" INTEGER NOT NULL, + "plays" INTEGER NOT NULL, + "isPremium" BOOLEAN NOT NULL, + "disabled" BOOLEAN NOT NULL, + "disabledText" TEXT, + "releaseDate" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP, + "trillerAvailable" BOOLEAN NOT NULL, + "trillerUrl" TEXT, + "userId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Album_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Playlist" ( + "slug" TEXT NOT NULL, + "name" TEXT NOT NULL, + "id" SERIAL NOT NULL, + "primaryImage" TEXT, + "username" TEXT NOT NULL, + "type" TEXT, + "year" TEXT, + "subtitle" TEXT, + "language" TEXT, + "duration" INTEGER, + "url" TEXT NOT NULL, + "userId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Playlist_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Genre" ( + "id" SERIAL NOT NULL, + "slug" TEXT NOT NULL, + "name" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Genre_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "songs" ( + "slug" TEXT NOT NULL, + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "albumId" INTEGER NOT NULL, + "year" TEXT, + "releaseDate" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP, + "duration" INTEGER, + "label" TEXT, + "explicitContent" INTEGER, + "playCount" INTEGER, + "language" TEXT, + "hasLyrics" BOOLEAN NOT NULL DEFAULT false, + "url" TEXT NOT NULL, + "copyright" TEXT, + "contentType" "ContentType" NOT NULL, + "primaryImage" TEXT, + "origin" TEXT, + "lyricsSnippet" TEXT, + "encryptedMediaUrl" TEXT, + "encryptedMediaPath" TEXT, + "mediaPreviewUrl" TEXT, + "permaUrl" TEXT, + "albumUrl" TEXT, + "rightId" INTEGER, + "kbps320" BOOLEAN, + "isDolbyContent" BOOLEAN, + "disabled" TEXT, + "disabledText" TEXT, + "cacheState" TEXT, + "vcode" TEXT, + "trillerAvailable" BOOLEAN NOT NULL, + "labelUrl" TEXT, + "userId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "songs_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Image" ( + "id" SERIAL NOT NULL, + "quality" TEXT NOT NULL, + "link" TEXT NOT NULL, + "artistId" INTEGER, + "albumId" INTEGER, + "playlistId" INTEGER, + "songId" INTEGER, + + CONSTRAINT "Image_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SongDownloadUrl" ( + "id" SERIAL NOT NULL, + "quality" TEXT NOT NULL, + "link" TEXT NOT NULL, + "songId" INTEGER NOT NULL, + + CONSTRAINT "SongDownloadUrl_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "_ArticleToTag" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_UserFavorites" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_ArtistSongs" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_BandMembers" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_FeaturedArtistsSong" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_PlaylistArtists" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_ArtistGenres" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_UserFollows" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_AlbumGenres" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_PrimaryArtists" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_FeaturedArtists" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_PlaylistSongs" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_SongGenres" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_PlaylistGenres" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_UserLikes" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "Article_slug_key" ON "Article"("slug"); + +-- CreateIndex +CREATE UNIQUE INDEX "Tag_name_key" ON "Tag"("name"); + +-- CreateIndex +CREATE UNIQUE INDEX "users_email_key" ON "users"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "users_username_key" ON "users"("username"); + +-- CreateIndex +CREATE UNIQUE INDEX "artists_slug_key" ON "artists"("slug"); + +-- CreateIndex +CREATE INDEX "artists_name_idx" ON "artists"("name"); + +-- CreateIndex +CREATE UNIQUE INDEX "Album_slug_key" ON "Album"("slug"); + +-- CreateIndex +CREATE UNIQUE INDEX "Playlist_slug_key" ON "Playlist"("slug"); + +-- CreateIndex +CREATE UNIQUE INDEX "Genre_slug_key" ON "Genre"("slug"); + +-- CreateIndex +CREATE UNIQUE INDEX "songs_slug_key" ON "songs"("slug"); + +-- CreateIndex +CREATE INDEX "name" ON "songs"("name"); + +-- CreateIndex +CREATE UNIQUE INDEX "_ArticleToTag_AB_unique" ON "_ArticleToTag"("A", "B"); + +-- CreateIndex +CREATE INDEX "_ArticleToTag_B_index" ON "_ArticleToTag"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_UserFavorites_AB_unique" ON "_UserFavorites"("A", "B"); + +-- CreateIndex +CREATE INDEX "_UserFavorites_B_index" ON "_UserFavorites"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_ArtistSongs_AB_unique" ON "_ArtistSongs"("A", "B"); + +-- CreateIndex +CREATE INDEX "_ArtistSongs_B_index" ON "_ArtistSongs"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_BandMembers_AB_unique" ON "_BandMembers"("A", "B"); + +-- CreateIndex +CREATE INDEX "_BandMembers_B_index" ON "_BandMembers"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_FeaturedArtistsSong_AB_unique" ON "_FeaturedArtistsSong"("A", "B"); + +-- CreateIndex +CREATE INDEX "_FeaturedArtistsSong_B_index" ON "_FeaturedArtistsSong"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_PlaylistArtists_AB_unique" ON "_PlaylistArtists"("A", "B"); + +-- CreateIndex +CREATE INDEX "_PlaylistArtists_B_index" ON "_PlaylistArtists"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_ArtistGenres_AB_unique" ON "_ArtistGenres"("A", "B"); + +-- CreateIndex +CREATE INDEX "_ArtistGenres_B_index" ON "_ArtistGenres"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_UserFollows_AB_unique" ON "_UserFollows"("A", "B"); + +-- CreateIndex +CREATE INDEX "_UserFollows_B_index" ON "_UserFollows"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_AlbumGenres_AB_unique" ON "_AlbumGenres"("A", "B"); + +-- CreateIndex +CREATE INDEX "_AlbumGenres_B_index" ON "_AlbumGenres"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_PrimaryArtists_AB_unique" ON "_PrimaryArtists"("A", "B"); + +-- CreateIndex +CREATE INDEX "_PrimaryArtists_B_index" ON "_PrimaryArtists"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_FeaturedArtists_AB_unique" ON "_FeaturedArtists"("A", "B"); + +-- CreateIndex +CREATE INDEX "_FeaturedArtists_B_index" ON "_FeaturedArtists"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_PlaylistSongs_AB_unique" ON "_PlaylistSongs"("A", "B"); + +-- CreateIndex +CREATE INDEX "_PlaylistSongs_B_index" ON "_PlaylistSongs"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_SongGenres_AB_unique" ON "_SongGenres"("A", "B"); + +-- CreateIndex +CREATE INDEX "_SongGenres_B_index" ON "_SongGenres"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_PlaylistGenres_AB_unique" ON "_PlaylistGenres"("A", "B"); + +-- CreateIndex +CREATE INDEX "_PlaylistGenres_B_index" ON "_PlaylistGenres"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_UserLikes_AB_unique" ON "_UserLikes"("A", "B"); + +-- CreateIndex +CREATE INDEX "_UserLikes_B_index" ON "_UserLikes"("B"); + +-- AddForeignKey +ALTER TABLE "Article" ADD CONSTRAINT "Article_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_articleId_fkey" FOREIGN KEY ("articleId") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "artists" ADD CONSTRAINT "artists_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Album" ADD CONSTRAINT "Album_mainArtistSlug_fkey" FOREIGN KEY ("mainArtistSlug") REFERENCES "artists"("slug") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Album" ADD CONSTRAINT "Album_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Playlist" ADD CONSTRAINT "Playlist_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "songs" ADD CONSTRAINT "songs_albumId_fkey" FOREIGN KEY ("albumId") REFERENCES "Album"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "songs" ADD CONSTRAINT "songs_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Image" ADD CONSTRAINT "Image_artistId_fkey" FOREIGN KEY ("artistId") REFERENCES "artists"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Image" ADD CONSTRAINT "Image_albumId_fkey" FOREIGN KEY ("albumId") REFERENCES "Album"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Image" ADD CONSTRAINT "Image_playlistId_fkey" FOREIGN KEY ("playlistId") REFERENCES "Playlist"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Image" ADD CONSTRAINT "Image_songId_fkey" FOREIGN KEY ("songId") REFERENCES "songs"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SongDownloadUrl" ADD CONSTRAINT "SongDownloadUrl_songId_fkey" FOREIGN KEY ("songId") REFERENCES "songs"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ArticleToTag" ADD CONSTRAINT "_ArticleToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ArticleToTag" ADD CONSTRAINT "_ArticleToTag_B_fkey" FOREIGN KEY ("B") REFERENCES "Tag"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_UserFavorites" ADD CONSTRAINT "_UserFavorites_A_fkey" FOREIGN KEY ("A") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_UserFavorites" ADD CONSTRAINT "_UserFavorites_B_fkey" FOREIGN KEY ("B") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ArtistSongs" ADD CONSTRAINT "_ArtistSongs_A_fkey" FOREIGN KEY ("A") REFERENCES "artists"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ArtistSongs" ADD CONSTRAINT "_ArtistSongs_B_fkey" FOREIGN KEY ("B") REFERENCES "songs"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_BandMembers" ADD CONSTRAINT "_BandMembers_A_fkey" FOREIGN KEY ("A") REFERENCES "artists"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_BandMembers" ADD CONSTRAINT "_BandMembers_B_fkey" FOREIGN KEY ("B") REFERENCES "artists"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_FeaturedArtistsSong" ADD CONSTRAINT "_FeaturedArtistsSong_A_fkey" FOREIGN KEY ("A") REFERENCES "artists"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_FeaturedArtistsSong" ADD CONSTRAINT "_FeaturedArtistsSong_B_fkey" FOREIGN KEY ("B") REFERENCES "songs"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PlaylistArtists" ADD CONSTRAINT "_PlaylistArtists_A_fkey" FOREIGN KEY ("A") REFERENCES "artists"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PlaylistArtists" ADD CONSTRAINT "_PlaylistArtists_B_fkey" FOREIGN KEY ("B") REFERENCES "Playlist"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ArtistGenres" ADD CONSTRAINT "_ArtistGenres_A_fkey" FOREIGN KEY ("A") REFERENCES "artists"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ArtistGenres" ADD CONSTRAINT "_ArtistGenres_B_fkey" FOREIGN KEY ("B") REFERENCES "Genre"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_UserFollows" ADD CONSTRAINT "_UserFollows_A_fkey" FOREIGN KEY ("A") REFERENCES "artists"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_UserFollows" ADD CONSTRAINT "_UserFollows_B_fkey" FOREIGN KEY ("B") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_AlbumGenres" ADD CONSTRAINT "_AlbumGenres_A_fkey" FOREIGN KEY ("A") REFERENCES "Album"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_AlbumGenres" ADD CONSTRAINT "_AlbumGenres_B_fkey" FOREIGN KEY ("B") REFERENCES "Genre"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PrimaryArtists" ADD CONSTRAINT "_PrimaryArtists_A_fkey" FOREIGN KEY ("A") REFERENCES "Album"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PrimaryArtists" ADD CONSTRAINT "_PrimaryArtists_B_fkey" FOREIGN KEY ("B") REFERENCES "artists"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_FeaturedArtists" ADD CONSTRAINT "_FeaturedArtists_A_fkey" FOREIGN KEY ("A") REFERENCES "Album"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_FeaturedArtists" ADD CONSTRAINT "_FeaturedArtists_B_fkey" FOREIGN KEY ("B") REFERENCES "artists"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PlaylistSongs" ADD CONSTRAINT "_PlaylistSongs_A_fkey" FOREIGN KEY ("A") REFERENCES "Playlist"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PlaylistSongs" ADD CONSTRAINT "_PlaylistSongs_B_fkey" FOREIGN KEY ("B") REFERENCES "songs"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_SongGenres" ADD CONSTRAINT "_SongGenres_A_fkey" FOREIGN KEY ("A") REFERENCES "Genre"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_SongGenres" ADD CONSTRAINT "_SongGenres_B_fkey" FOREIGN KEY ("B") REFERENCES "songs"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PlaylistGenres" ADD CONSTRAINT "_PlaylistGenres_A_fkey" FOREIGN KEY ("A") REFERENCES "Genre"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_PlaylistGenres" ADD CONSTRAINT "_PlaylistGenres_B_fkey" FOREIGN KEY ("B") REFERENCES "Playlist"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_UserLikes" ADD CONSTRAINT "_UserLikes_A_fkey" FOREIGN KEY ("A") REFERENCES "songs"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_UserLikes" ADD CONSTRAINT "_UserLikes_B_fkey" FOREIGN KEY ("B") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20240223224512_uu/migration.sql b/prisma/migrations/20240223224512_uu/migration.sql new file mode 100644 index 0000000..4924c33 --- /dev/null +++ b/prisma/migrations/20240223224512_uu/migration.sql @@ -0,0 +1,6 @@ +-- AlterTable +ALTER TABLE "artists" ALTER COLUMN "creatorType" SET DEFAULT 'MUSIC', +ALTER COLUMN "isVerified" DROP NOT NULL, +ALTER COLUMN "isVerified" SET DEFAULT false, +ALTER COLUMN "isRadioPresent" SET DEFAULT false, +ALTER COLUMN "isBand" SET DEFAULT false; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..fbffa92 --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma index cbea494..8898ce2 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -4,15 +4,10 @@ datasource db { provider = "postgresql" url = env("DATABASE_URL") - //extensions = [pgvector(map: "vector", schema: "extensions")] // Add the pgvector extension } -// generator dbml { -// provider = "prisma-dbml-generator" -// } generator client { provider = "prisma-client-js" - //previewFeatures = ["postgresqlExtensions"] // Enable the postgresqlExtensions. Currently in preview } @@ -35,11 +30,32 @@ model Article { body String createdAt DateTime @default(now()) updatedAt DateTime @default(now()) + tagList Tag[] addedBy User @relation("added",fields: [userId], references: [id]) userId Int favorites User[] @relation("UserFavorites") + comments Comment[] } +model Comment { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) + body String + article Article @relation(fields: [articleId], references: [id], onDelete: Cascade) + articleId Int + author User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId Int +} + +model Tag { + id Int @id @default(autoincrement()) + name String @unique + articles Article[] +} + + + model User { id Int @id @default(autoincrement()) @@ -54,6 +70,7 @@ model User { following User[] @relation("UserFollows") createdAt DateTime @default(now()) updatedAt DateTime @default(now()) + comments Comment[] songs Song[] @relation("addedSongs") playlists Playlist[] @relation("addedPlaylists") albums Album[] @relation("addedAlbums") @@ -63,80 +80,17 @@ model User { @@map("users") } -model Genre { - id Int @id @default(autoincrement()) - slug String @unique - name String - songs Song[] @relation("SongGenres") - artists Artist[] @relation("ArtistGenres") - playlists Playlist[] @relation("PlaylistGenres") - albums Album[] @relation("AlbumGenres") - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt -} - -model Song { - slug String @unique - id Int @id @default(autoincrement()) - name String - // embedding Unsupported("vector")? - album Album @relation(fields: [albumId], references: [id]) - albumId Int - year String? - releaseDate DateTime? @default(now()) - duration Int? - label String? - primaryArtists Artist[] @relation("ArtistSongs") - featuredArtists Artist[] @relation("FeaturedArtistsSong") - explicitContent Int? - playCount Int? - language String? - hasLyrics Boolean @default(false) - url String - copyright String? - contentType ContentType - images Image[] @relation("SongImages") - primaryImage String? - downloadUrls SongDownloadUrl[] @relation("SongDownloadUrls") - origin String? - lyricsSnippet String? @db.Text - encryptedMediaUrl String? - encryptedMediaPath String? - mediaPreviewUrl String? - permaUrl String? - albumUrl String? - rightId Int? - kbps320 Boolean? - isDolbyContent Boolean? - disabled String? - disabledText String? - cacheState String? - vcode String? - trillerAvailable Boolean - labelUrl String? - playLists Playlist[] @relation("PlaylistSongs") - addedBy User @relation("addedSongs",fields: [userId], references: [id]) - userId Int - genres Genre[] @relation("SongGenres") - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - likeds User[] @relation("UserLikes") - @@index([name], name: "name") - @@map("songs") - -} - model Artist { slug String @unique id Int @id @default(autoincrement()) name String - creatorType ContentType + creatorType ContentType @default(MUSIC) songs Song[] @relation("ArtistSongs") primaryImage String? - followerCount Int - fanCount Int - isVerified Boolean + followerCount Int? + fanCount Int? + isVerified Boolean? @default(false) dominantLanguage String? dominantType String? bio String? @@ -145,18 +99,18 @@ model Artist { twitter String? wiki String? availableLanguages String? - isRadioPresent Boolean? - isBand Boolean + isRadioPresent Boolean? @default(false) + isBand Boolean? @default(false) bandMembers Artist[] @relation("BandMembers") bandMemberOf Artist[] @relation("BandMembers") - primaryAlbums Album[] @relation("PrimaryArtists") - featuredAlbums Album[] @relation("FeaturedArtists") - featuredSongs Song[] @relation("FeaturedArtistsSong") - images Image[] @relation("ArtistImages") - albums Album[] @relation("ArtistAlbums") + primaryAlbums Album[] @relation("PrimaryArtists") + featuredAlbums Album[] @relation("FeaturedArtists") + featuredSongs Song[] @relation("FeaturedArtistsSong") + images Image[] @relation("ArtistImages") + albums Album[] @relation("ArtistAlbums") playlists Playlist[] @relation("PlaylistArtists") addedBy User @relation("addedArtists",fields: [userId], references: [id]) - userId Int + userId Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt genres Genre[] @relation("ArtistGenres") @@ -223,6 +177,68 @@ model Playlist { updatedAt DateTime @updatedAt } +model Genre { + id Int @id @default(autoincrement()) + slug String @unique + name String + songs Song[] @relation("SongGenres") + artists Artist[] @relation("ArtistGenres") + playlists Playlist[] @relation("PlaylistGenres") + albums Album[] @relation("AlbumGenres") + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Song { + slug String @unique + id Int @id @default(autoincrement()) + name String + album Album @relation(fields: [albumId], references: [id]) + albumId Int + year String? + releaseDate DateTime? @default(now()) + duration Int? + label String? + primaryArtists Artist[] @relation("ArtistSongs") + featuredArtists Artist[] @relation("FeaturedArtistsSong") + explicitContent Int? + playCount Int? + language String? + hasLyrics Boolean @default(false) + url String + copyright String? + contentType ContentType + images Image[] @relation("SongImages") + primaryImage String? + downloadUrls SongDownloadUrl[] @relation("SongDownloadUrls") + origin String? + lyricsSnippet String? @db.Text + encryptedMediaUrl String? + encryptedMediaPath String? + mediaPreviewUrl String? + permaUrl String? + albumUrl String? + rightId Int? + kbps320 Boolean? + isDolbyContent Boolean? + disabled String? + disabledText String? + cacheState String? + vcode String? + trillerAvailable Boolean + labelUrl String? + playLists Playlist[] @relation("PlaylistSongs") + addedBy User @relation("addedSongs",fields: [userId], references: [id]) + userId Int + genres Genre[] @relation("SongGenres") + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + likeds User[] @relation("UserLikes") + @@index([name], name: "name") + @@map("songs") + +} + model Image { id Int @id @default(autoincrement()) quality String @@ -243,4 +259,4 @@ model SongDownloadUrl { link String song Song @relation("SongDownloadUrls",fields: [songId], references: [id]) songId Int -} +} \ No newline at end of file diff --git a/src/controllers/artist.controller.ts b/src/controllers/artist.controller.ts index 3863a4d..9c371ff 100644 --- a/src/controllers/artist.controller.ts +++ b/src/controllers/artist.controller.ts @@ -58,7 +58,7 @@ router.get( * @returns artist created artist */ router.post('/artists', auth.required, async (req: Request, res: Response, next: NextFunction) => { - + try { const artist = await createArtist(req.body, req.user?.username as string); res.json({ artist }); diff --git a/src/services/artist.service.ts b/src/services/artist.service.ts index cb85fc7..413e847 100644 --- a/src/services/artist.service.ts +++ b/src/services/artist.service.ts @@ -72,6 +72,11 @@ export const createArtist = async (artist: any, username : string) => { } = artist; + // eslint-disable-next-line no-console + console.log("creating artist", username ) + // eslint-disable-next-line no-console + console.log(artist) + if (!name ) { @@ -125,13 +130,56 @@ export const createArtist = async (artist: any, username : string) => { })), } } - - + const createdArtist = await prisma.artist.create( { - data - }).catch(() => { - throw new HttpException(422, { errors: { title: ["Required Name fields are missing"] } }); - }); + data:{ + name : data.name, + slug: data.slug, + creatorType: data.creatorType, + primaryImage: data.primaryImage, + followerCount: data.followerCount, + fanCount: data.fanCount, + isVerified: data.isVerified, + dominantLanguage: data.dominantLanguage, + + dominantType: data.dominantType, + bio: data.bio, + dob: data.dob, + fb: data.fb, + twitter: data.twitter, + wiki: data.wiki, + availableLanguages: data.availableLanguages, + isRadioPresent: data.isRadioPresent, + isBand: data.isBand, + addedBy: { + connect: { + username, + }, + }, + genres: { + connect: genres.map((genre: any) => ({ + slug: genre, + })), + }, + images: { + create: images.map((image: any) => ({ + url: image.url, + type: image.type, + })), + }, + bandMembers: { + connect: bandMembers.map((bandMember: any) => ({ + slug: bandMember, + })), + } + } + }).catch((e) => { + + throw new HttpException(422, { errors: e }); + }).then(() => { + + }); + return { createdArtist }; @@ -174,6 +222,9 @@ export const getArtist = async (slug: string) => { }, }); + // eslint-disable-next-line no-console + console.log("Added Artist ", artist?.addedBy) + return { artist }; @@ -220,7 +271,9 @@ export const updateArtist = async (artist: any, slug: string) => { } if(genres[0].slug){ + // eslint-disable-next-line no-console console.log("genres1") + // eslint-disable-next-line no-console console.log(genres) data.genres = { connect: genres.map((genre: any) => ({ @@ -230,7 +283,9 @@ export const updateArtist = async (artist: any, slug: string) => { } if (genres && Array.isArray(genres) && genres.every((genre) => typeof genre === 'string')) { + // eslint-disable-next-line no-console console.log("genres2") + // eslint-disable-next-line no-console console.log(genres) data.genres = { connect: genres.map((genre: string) => ({ @@ -261,6 +316,7 @@ export const updateArtist = async (artist: any, slug: string) => { slug, }, data + // eslint-disable-next-line no-unused-vars }).catch((e) => { throw new HttpException(422, { errors: { title: ["Required Name fields are missing"] } }); }