import { desc } from "drizzle-orm"; import Link from "next/link"; import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import { StatusCard } from "@/components/admin/dashboard"; import { Button } from "@/components/ui/button"; import { db, WebsiteAds } from "@/lib/db"; import { formatDate } from "@/lib/format-date"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { AdsTable } from "./ads-table"; // TODO: Cache Components adoption. Refactor this route so this opt-out can be removed. // See: https://nextjs.org/docs/app/guides/migrating-to-cache-components export const instant = false; export default async function AdminAds() { const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.PAGES_VIEW, session.user.rank)) { redirect("/admin"); } const t = await getTranslations("pages.admin.ads"); let ads: (typeof WebsiteAds.$inferSelect)[] = []; try { ads = await db .select() .from(WebsiteAds) .orderBy(desc(WebsiteAds.id)) .limit(500); } catch { ads = []; } const latest = ads[0]?.createdAt ? formatDate(ads[0].createdAt, "date") : "—"; return (

{t("allAds")}

{ads.length === 0 ? (
{t("noAds")}
) : ( ({ id: String(ad.id), image: ad.image, createdAt: ad.createdAt ? formatDate(ad.createdAt, "date") : null, }))} /> )}
); }