- Add admin layout with sidebar navigation and session guard - Create AdminSidebar client component with role-based nav links - Add dashboard page showing stats (admin count, code counts) - Add users management page (SuperAdmin only): list, create, delete, and reset passwords for admin users - Add codes management page: list all codes, generate new codes, delete unused codes - Add API routes for admin user CRUD (GET, POST, DELETE, PUT) - Add API routes for code management (GET, POST, DELETE) - All UI in Macedonian
30 lines
1.2 KiB
TypeScript
30 lines
1.2 KiB
TypeScript
import { prisma } from "@/lib/prisma";
|
||
|
||
export default async function AdminDashboardPage() {
|
||
const [adminCount, codeCount, usedCodeCount] = await Promise.all([
|
||
prisma.adminUser.count(),
|
||
prisma.code.count(),
|
||
prisma.code.count({ where: { usedByUserId: { not: null } } }),
|
||
]);
|
||
|
||
return (
|
||
<div>
|
||
<h1 className="mb-8 text-2xl font-semibold text-stone-900">Контролна табла</h1>
|
||
<div className="grid gap-6 sm:grid-cols-3">
|
||
<div className="rounded-lg bg-white p-6 shadow-sm">
|
||
<p className="text-sm text-stone-500">Администратори</p>
|
||
<p className="mt-1 text-3xl font-semibold text-stone-900">{adminCount}</p>
|
||
</div>
|
||
<div className="rounded-lg bg-white p-6 shadow-sm">
|
||
<p className="text-sm text-stone-500">Генерирани кодови</p>
|
||
<p className="mt-1 text-3xl font-semibold text-stone-900">{codeCount}</p>
|
||
</div>
|
||
<div className="rounded-lg bg-white p-6 shadow-sm">
|
||
<p className="text-sm text-stone-500">Искористени кодови</p>
|
||
<p className="mt-1 text-3xl font-semibold text-stone-900">{usedCodeCount}</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
);
|
||
}
|