diff --git a/astro.config.mjs b/astro.config.mjs index d9f60dd..9efff5a 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -48,7 +48,6 @@ export default defineConfig({ output: 'server', adapter: node({ mode: 'standalone' }), redirects: { - '/album/list': { status: 307, destination: '/maintenance' }, '/anim': { status: 307, destination: '/maintenance' }, '/anim/[id]': { status: 307, destination: '/maintenance' }, '/anim/list': { status: 307, destination: '/maintenance' }, diff --git a/src/components/Sidebar.astro b/src/components/Sidebar.astro index 4fea549..144e8b7 100644 --- a/src/components/Sidebar.astro +++ b/src/components/Sidebar.astro @@ -19,7 +19,6 @@ const listClass = ---
- {m.lastAddedSidebar()} {m.getLucky()} {m.randomPull()}
diff --git a/src/components/albumList/letterSection.astro b/src/components/albumList/letterSection.astro new file mode 100644 index 0000000..23c6b49 --- /dev/null +++ b/src/components/albumList/letterSection.astro @@ -0,0 +1,24 @@ +--- +import { AlbumStatus } from '@prisma/client' +import prismaClient from 'utils/prisma-client' + +interface Props { + letter: string +} + +const { letter } = Astro.props +const albums = await prismaClient.albums.findMany({ + where: { status: AlbumStatus.SHOW, title: { startsWith: letter } }, + select: { id: true, title: true } +}) +--- + +
+ { + albums.map((a) => ( + + {a.title} + + )) + } +
diff --git a/src/pages/album/list/index.astro b/src/pages/album/list/index.astro new file mode 100644 index 0000000..1b78507 --- /dev/null +++ b/src/pages/album/list/index.astro @@ -0,0 +1,52 @@ +--- +import prismaClient from 'utils/prisma-client' +import * as m from 'paraglide/messages' +import { AlbumStatus } from '@prisma/client' + +import Sidebar from 'components/Sidebar.astro' +import BaseLayout from 'layouts/base.astro' +import AlbumBox from 'components/AlbumBox.astro' +import LetterSection from 'components/albumList/letterSection.astro' + +const letters: { letter: string; count: BigInt }[] = await prismaClient.$queryRaw` + SELECT DISTINCT UPPER(LEFT(title, 1)) AS letter, COUNT(*) AS count + FROM albums + WHERE status = 'SHOW' + GROUP BY letter + ORDER BY letter; + ` +--- + + +
+
+
+ { + letters.map((l) => ( + + )) + } +
+
+ { + letters.map((l) => ( +
+
{l.letter}
+
+ +
+
+ )) + } +
+
+ +
+