import { getTranslations } from "next-intl/server"; import { formatDate } from "@/lib/format-date"; import { submitRequest } from "@/actions/radio-requests"; import { ContentCard, EmptyState } from "@/components/public/ui"; import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; export const dynamic = "force-dynamic"; export default async function RadioRequestsPage() { const t = await getTranslations("pages.radioRequests"); const genericT = await getTranslations("pages.radio"); const [requests, session] = await Promise.all([ prisma.radioSongRequests .findMany({ orderBy: { createdAt: "desc" }, take: 50, }) .catch(() => []), auth(), ]); const isLoggedIn = Boolean(session?.user?.id); const userIds = Array.from(new Set(requests.map((r) => Number(r.userId)))); const users = userIds.length ? await prisma.user .findMany({ where: { id: { in: userIds } }, select: { id: true, username: true }, }) .catch(() => []) : []; const userById = new Map(users.map((u) => [u.id, u.username])); return ( <> {isLoggedIn ? (
) : ( {t("loginToRequest")} )} {requests.length === 0 ? ( {t("empty")} ) : ( {requests.map((r) => { const requester = userById.get(Number(r.userId)); const isPlayed = r.isPlayed; const isApproved = r.isApproved; let status = t("statusPending"); if (isPlayed) status = t("statusPlayed"); else if (isApproved) status = t("statusApproved"); return ( ); })}
{t("colSong")} {t("colArtist")} {t("colRequester")} {t("colDate")} {t("colStatus")}
{r.songTitle || —} {r.artist || —} {requester ? ( {requester} ) : ( #{String(r.userId)} )} {r.submittedAt ? formatDate(r.submittedAt, "datetime", "") : "—"} {status}
)}
); }