mirror of
https://github.com/M4X809/list-of-lp.git
synced 2025-12-25 19:12:48 +00:00
35 lines
1.3 KiB
TypeScript
35 lines
1.3 KiB
TypeScript
|
|
import { type NextRequest, NextResponse } from "next/server";
|
||
|
|
import { albums } from "../../../lib/list";
|
||
|
|
import { cookies } from "next/headers";
|
||
|
|
|
||
|
|
// Absolute URL redirect is required by Next.js middleware & API routes
|
||
|
|
export async function GET(request: NextRequest) {
|
||
|
|
const url = new URL(request.url);
|
||
|
|
const randParam = url.searchParams.get("rand");
|
||
|
|
const cookieStore = await cookies();
|
||
|
|
const lastImage = cookieStore.get("lastImage")?.value;
|
||
|
|
|
||
|
|
// Get all available albums, excluding the previous image
|
||
|
|
const availableAlbums = lastImage ? albums.filter((album) => album.image !== lastImage) : albums;
|
||
|
|
|
||
|
|
// Choose a random album, optionally seeded by the "rand" query param
|
||
|
|
let randomIndex: number;
|
||
|
|
if (randParam && !Number.isNaN(Number(randParam))) {
|
||
|
|
randomIndex = Number(randParam) % availableAlbums.length;
|
||
|
|
} else {
|
||
|
|
randomIndex = Math.floor(Math.random() * availableAlbums.length);
|
||
|
|
}
|
||
|
|
const album = availableAlbums[randomIndex];
|
||
|
|
|
||
|
|
// Ensure image path starts with a slash
|
||
|
|
const imagePath = album.image.startsWith("/") ? album.image : `/${album.image}`;
|
||
|
|
|
||
|
|
// Build absolute URL for the redirect
|
||
|
|
const { nextUrl } = request;
|
||
|
|
const absoluteUrl = `${nextUrl.protocol}//${nextUrl.host}${imagePath}`;
|
||
|
|
|
||
|
|
cookieStore.set("lastImage", album.image);
|
||
|
|
|
||
|
|
return NextResponse.redirect(absoluteUrl, 307);
|
||
|
|
}
|