spomeni/src/app/admin/dashboard/page.tsx
dimitar 9ca66fc753 feat(admin): add admin panel with dashboard, users, and codes management
- 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
2026-07-29 18:56:49 +02:00

30 lines
1.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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>
);
}