Files
buzz/app/(ui)/donate/admin/page.tsx
T
dmgnr 44d156814b
Build and Push Image / build-backend (push) Successful in 1m10s
Build and Push Image / build-frontend (push) Successful in 2m34s
Build and Push Image / push (push) Successful in 1m11s
feat(don): admin widget now displays this month's donate instead of all-time sum
2026-08-27 20:08:07 +07:00

49 lines
1.4 KiB
TypeScript

import { endOfMonth, startOfMonth } from "date-fns";
import { between, desc, getTableColumns, sql, sum } from "drizzle-orm";
import type { Metadata } from "next";
import { redirect } from "next/navigation";
import { adminCheck } from "@/lib/auth";
import { db } from "@/lib/db";
import { donations } from "@/lib/db/schema";
import { DonateAdminPage } from "./client";
export default async function () {
if (!(await adminCheck()))
redirect(`/login?next=${encodeURIComponent("/donate/admin")}`);
const now = new Date();
const [data, [stats]] = await Promise.all([
db
.select({
...getTableColumns(donations),
image: sql<Buffer>`${donations.image} IS NOT NULL`,
})
.from(donations)
.limit(100)
.orderBy(desc(donations.id)),
db
.select({
total: sum(donations.amount).mapWith(Number),
today: sql<number>`
COALESCE(
SUM(${donations.amount}) FILTER (
WHERE ${donations.created} >= date_trunc('day', NOW())
),
0
)
`,
})
.from(donations)
.where(between(donations.created, startOfMonth(now), endOfMonth(now)))
.limit(1),
]);
return <DonateAdminPage data={data} stats={stats} />;
}
export const metadata: Metadata = {
title: "โดเนททั้งหมด",
description: "ดูโดเนททั้งหมด",
};
export const dynamic = "force-dynamic";