list-of-lp/src/app/api/favico/route.tsx
2025-10-25 00:20:37 +02:00

34 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);
}