Compare commits

...

5 commits

5 changed files with 73 additions and 16 deletions

View file

@ -0,0 +1,44 @@
-- DropForeignKey
ALTER TABLE `comments` DROP FOREIGN KEY `comments_ibfk_1`;
-- DropForeignKey
ALTER TABLE `discs` DROP FOREIGN KEY `discs_ibfk_1`;
-- DropForeignKey
ALTER TABLE `favorites` DROP FOREIGN KEY `favorites_ibfk_1`;
-- DropForeignKey
ALTER TABLE `links` DROP FOREIGN KEY `links_ibfk_1`;
-- DropForeignKey
ALTER TABLE `ratings` DROP FOREIGN KEY `ratings_ibfk_1`;
-- DropIndex
DROP INDEX `ostId` ON `comments`;
-- DropIndex
DROP INDEX `discs_ibfk_1` ON `discs`;
-- DropIndex
DROP INDEX `favorites_ibfk_1` ON `favorites`;
-- DropIndex
DROP INDEX `links_ibfk_1` ON `links`;
-- DropIndex
DROP INDEX `ratings_ibfk_1` ON `ratings`;
-- AddForeignKey
ALTER TABLE `comments` ADD CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`albumId`) REFERENCES `albums`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `discs` ADD CONSTRAINT `discs_ibfk_1` FOREIGN KEY (`albumId`) REFERENCES `albums`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `favorites` ADD CONSTRAINT `favorites_ibfk_1` FOREIGN KEY (`albumId`) REFERENCES `albums`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `links` ADD CONSTRAINT `links_ibfk_1` FOREIGN KEY (`downloadId`) REFERENCES `downloads`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `ratings` ADD CONSTRAINT `ratings_ibfk_1` FOREIGN KEY (`albumId`) REFERENCES `albums`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

View file

@ -199,8 +199,8 @@ model comments {
updatedAt DateTime @db.DateTime(0)
albumId Int?
username String? @db.VarChar(255)
album albums? @relation(fields: [albumId], references: [id], map: "comments_ibfk_1")
user users? @relation(fields: [username], references: [id], map: "comments_ibfk_2")
album albums? @relation(fields: [albumId], references: [id], map: "comments_ibfk_1", onDelete: Cascade)
user users? @relation(fields: [username], references: [id], map: "comments_ibfk_2", onDelete: SetNull)
}
model config {
@ -215,7 +215,7 @@ model discs {
number Int?
body String? @db.Text
albumId Int
album albums? @relation(fields: [albumId], references: [id], map: "discs_ibfk_1")
album albums? @relation(fields: [albumId], references: [id], map: "discs_ibfk_1", onDelete: Cascade)
}
model downloads {
@ -232,7 +232,7 @@ model favorites {
updatedAt DateTime @db.DateTime(0)
albumId Int
username String? @db.VarChar(255)
album albums? @relation(fields: [albumId], references: [id], map: "favorites_ibfk_1")
album albums? @relation(fields: [albumId], references: [id], map: "favorites_ibfk_1", onDelete: Cascade)
users users? @relation(fields: [username], references: [id], map: "favorites_ibfk_2")
}
@ -277,7 +277,7 @@ model links {
provider String? @db.VarChar(255)
downloadId Int
url2 String? @db.VarChar(255)
download downloads? @relation(fields: [downloadId], references: [id], map: "links_ibfk_1")
download downloads? @relation(fields: [downloadId], references: [id], map: "links_ibfk_1", onDelete: Cascade)
}
model logs {
@ -321,7 +321,7 @@ model ratings {
updatedAt DateTime @db.DateTime(0)
albumId Int
username String @db.VarChar(255)
album albums? @relation(fields: [albumId], references: [id], map: "ratings_ibfk_1")
album albums? @relation(fields: [albumId], references: [id], map: "ratings_ibfk_1", onDelete: Cascade)
user users? @relation(fields: [username], references: [id], map: "ratings_ibfk_2")
}

View file

@ -81,7 +81,7 @@ if (!album) {
<Input dark defaultValue={album.description} name='description' label='Description' className='col-span-3' />
<Input dark name='cover' label='Cover image' type='file' />
<InputSelect dark name='status' label='Status' value={album.status}>
<InputSelect dark name='status' label='Status' defaultValue={album.status}>
<option value={AlbumStatus.HIDDEN}>Hidden</option>
<option value={AlbumStatus.SHOW}>Show</option>
</InputSelect>

View file

@ -86,6 +86,14 @@ const coverImage = await getImage({
meta: [{ name: 'theme-color', content: album?.headerColor }]
}}
/>
{album?.status === AlbumStatus.HIDDEN ? (
<script>
import toast from 'react-hot-toast'
toast('This page is currently hidden', { duration: Infinity })
</script>
) : null}
<BaseLayout>
<div
class={`w-full min-h-100vh bg-fixed bg-center bg-cover`}

View file

@ -59,20 +59,25 @@ export const POST: APIRoute = async ({ request, locals }) => {
games: { deleteMany: {}, create: games?.map((slug) => ({ game: { connect: { slug } } })) },
platforms: { deleteMany: {}, create: platforms?.map((id) => ({ platform: { connect: { id } } })) },
discs: { deleteMany: {}, createMany: { data: body.discs ?? [] } },
relatedAlbums: { deleteMany: {}, create: related?.map((id) => ({ relatedAlbum: { connect: { id } } })) }
relatedAlbums: { deleteMany: {}, create: related?.map((id) => ({ relatedAlbum: { connect: { id } } })) },
downloads: { deleteMany: {} }
}
})
await Promise.all([
cover ? handleCover(cover, 'album', albumId, tx) : undefined,
cover && cover.size > 0 ? handleCover(cover, 'album', albumId, tx) : undefined,
downloads
? tx.downloads.createMany({
data: downloads.map((d) => ({
title: d.title,
albumId: albumId,
links: { create: d.links }
}))
})
? Promise.all(
downloads.map((d) =>
tx.downloads.create({
data: {
title: d.title,
albumId: albumId,
links: { create: d.links }
}
})
)
)
: undefined
])
})