Add total user balances stat card to admin dashboard
This commit is contained in:
@@ -16,6 +16,7 @@ export default async function AdminDashboard() {
|
||||
homeworkPending,
|
||||
homeworkTotal,
|
||||
progressTotal,
|
||||
balanceAggregate,
|
||||
] = await Promise.all([
|
||||
prisma.user.count({ where: { role: "student" } }),
|
||||
prisma.user.count({ where: { role: "student", createdAt: { gte: monthAgo } } }),
|
||||
@@ -30,8 +31,11 @@ export default async function AdminDashboard() {
|
||||
prisma.homeworkSubmission.count({ where: { feedbacks: { none: {} } } }),
|
||||
prisma.homeworkSubmission.count(),
|
||||
prisma.lessonProgress.count(),
|
||||
prisma.balanceTransaction.aggregate({ _sum: { amount: true } }),
|
||||
]);
|
||||
|
||||
const totalBalance = Number(balanceAggregate._sum.amount ?? 0);
|
||||
|
||||
// Recent enrollments
|
||||
const recentEnrollments = await prisma.courseEnrollment.findMany({
|
||||
orderBy: { enrolledAt: "desc" },
|
||||
@@ -58,7 +62,7 @@ export default async function AdminDashboard() {
|
||||
</p>
|
||||
|
||||
{/* Stats grid */}
|
||||
<div className="grid grid-cols-2 md:grid-cols-4 gap-4 mb-8">
|
||||
<div className="grid grid-cols-2 lg:grid-cols-5 gap-4 mb-8">
|
||||
<StatCard
|
||||
label="Студентов"
|
||||
value={totalStudents}
|
||||
@@ -85,6 +89,12 @@ export default async function AdminDashboard() {
|
||||
subAccent={homeworkPending > 0}
|
||||
href="/curator/homework"
|
||||
/>
|
||||
<StatCard
|
||||
label="На балансах"
|
||||
value={totalBalance.toLocaleString("ru-RU", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + " ₽"}
|
||||
sub="сумма по всем пользователям"
|
||||
href="/admin/users"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="grid md:grid-cols-2 gap-6">
|
||||
@@ -179,7 +189,7 @@ function StatCard({
|
||||
href,
|
||||
}: {
|
||||
label: string;
|
||||
value: number;
|
||||
value: number | string;
|
||||
sub?: string;
|
||||
subAccent?: boolean;
|
||||
href?: string;
|
||||
|
||||
Reference in New Issue
Block a user