diff --git a/astro.config.mjs b/astro.config.mjs index c336deb..528cb23 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -49,7 +49,6 @@ export default defineConfig({ adapter: node({ mode: 'standalone' }), redirects: { '/en/[...params]': '/[...params]', - '/platform/[id]': { status: 307, destination: '/maintenance' }, '/profile': { status: 307, destination: '/maintenance' }, '/profile/[username]': { status: 307, destination: '/maintenance' }, '/series/[slug]': { status: 307, destination: '/maintenance' }, diff --git a/src/components/letterList/PlatformGameList.astro b/src/components/letterList/PlatformGameList.astro new file mode 100644 index 0000000..593a433 --- /dev/null +++ b/src/components/letterList/PlatformGameList.astro @@ -0,0 +1,23 @@ +--- +import { AlbumStatus } from '@prisma/client' +import prismaClient from 'utils/prisma-client' + +interface Props { + letter: string + platformId: number +} + +const { letter, platformId } = Astro.props +const albums = await prismaClient.game.findMany({ + where: { name: { startsWith: letter }, platforms: { some: { platformId } } }, + select: { slug: true, name: true } +}) +--- + +{ + albums.map((a) => ( + + {a.name} + + )) +} diff --git a/src/pages/platform/[id].astro b/src/pages/platform/[id].astro new file mode 100644 index 0000000..e7ccdf7 --- /dev/null +++ b/src/pages/platform/[id].astro @@ -0,0 +1,45 @@ +--- +import prismaClient from 'utils/prisma-client' + +import LetterList from 'layouts/LetterList.astro' +import PlatformGameList from 'components/letterList/PlatformGameList.astro' +import { AlbumStatus } from '@prisma/client' + +const { id } = Astro.params + +if (!id) return Astro.redirect('/404') +const platformId = parseInt(id) +if (!platformId) return Astro.redirect('/404') + +const platform = await prismaClient.platform.findUnique({ where: { id: platformId }, select: { name: true } }) +if (!platform) return Astro.redirect('/404') + +const letters: { letter: string; count: BigInt }[] = await prismaClient.$queryRaw` + SELECT DISTINCT UPPER(LEFT(game.name, 1)) AS letter, COUNT(*) AS count + FROM game, platform, Game_Platform + WHERE game.slug = Game_Platform.gameSlug + AND platform.id = Game_Platform.platformId + AND platform.id = ${platformId} + GROUP BY letter + ORDER BY letter; +` +--- + + + { + letters.map((l) => ( +
+
{l.letter}
+
+ + + {Array.from({ length: Number(l.count) }).map(() => ( +
+ ))} + + +
+
+ )) + } +