mirror of
https://github.com/yusufipk/OpenFrame.git
synced 2026-09-11 17:46:06 +00:00
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import { db } from '@/lib/db';
|
|
import { auth } from '@/lib/auth';
|
|
import { getCachedTotalStorage } from '@/lib/admin-stats';
|
|
|
|
export async function GET() {
|
|
try {
|
|
const session = await auth();
|
|
if (!session?.user?.isAdmin) {
|
|
return new NextResponse('Unauthorized', { status: 403 });
|
|
}
|
|
|
|
// 1. Database Stats
|
|
const [
|
|
totalUsers,
|
|
totalProjects,
|
|
totalVideos,
|
|
totalComments,
|
|
totalVoiceComments,
|
|
] = await Promise.all([
|
|
db.user.count(),
|
|
db.project.count(),
|
|
db.video.count(),
|
|
db.comment.count(),
|
|
db.comment.count({
|
|
where: {
|
|
voiceUrl: {
|
|
not: null,
|
|
}
|
|
}
|
|
})
|
|
]);
|
|
|
|
// 2. Storage Stats (Cached)
|
|
const totalStorageBytes = await getCachedTotalStorage();
|
|
|
|
return NextResponse.json({
|
|
totalUsers,
|
|
totalProjects,
|
|
totalVideos,
|
|
totalComments,
|
|
totalVoiceComments,
|
|
totalStorageBytes,
|
|
});
|
|
} catch (error) {
|
|
console.error('[ADMIN_STATS_GET]', error);
|
|
return new NextResponse('Internal Error', { status: 500 });
|
|
}
|
|
}
|