import { all, first } from "./db";
const DAY_MS = 24 * 60 * 60 * 1000;
type Count = { count: number };
async function count(
sql: string,
...params: (string | number)[]
): Promise<number> {
return (await first<Count>(sql, ...params))?.count ?? 0;
}
export type AdminOrgRow = {
id: string;
name: string;
members: number;
repos: number;
sites: number;
reports: number;
};
export type AdminUserRow = {
id: string;
name: string;
email: string;
verified: boolean;
isAdmin: boolean;
repos: number;
reports: number;
createdAt: number;
};
/** Site-wide counters for the admin dashboard; every query is a single indexed aggregate over D1. */
export async function adminOverview() {
const now = Date.now();
const week = now - 7 * DAY_MS;
const month = now - 30 * DAY_MS;
const [
users,
verifiedUsers,