From 78cd7df1c179752637bce4e978e8bb4e5b34867b Mon Sep 17 00:00:00 2001 From: zuma <lucien@shenanigans.cc> Date: Sun, 16 Feb 2025 20:22:51 +0100 Subject: [PATCH] Feat: Add an stats api endpoint to monitor users, decks and Bsets --- app/app/api/stats/route.ts | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 app/app/api/stats/route.ts diff --git a/app/app/api/stats/route.ts b/app/app/api/stats/route.ts new file mode 100644 index 0000000..4076754 --- /dev/null +++ b/app/app/api/stats/route.ts @@ -0,0 +1,41 @@ +import { NextResponse, NextRequest } from 'next/server' +import { validateToken, decryptToken } from '@/lib/jwt' +import { db } from "@/lib/db" + +export async function GET(req: NextRequest) { + try { + const token = req?.headers.get("authorization")?.split(" ")[1] + + if (token == undefined || !validateToken(token)) { + return NextResponse.json({"message": "You did not provide token or it is in the wrong format"},{ + status: 401, + }); + } + + const tokenData = decryptToken(token) + + if (!tokenData.admin) { + return NextResponse.json({"message": "You need to be an admin to use this endpoint."},{ + status: 401, + }); + } + + const decks = await db.deck.findMany() + const bsets = await db.bset.findMany() + const users = await db.utilisateurice.findMany() + + + return NextResponse.json({"data": { "decks": decks.length, "bsets": bsets.length, "users": users.length },"message": "Here are the stats"},{ + status: 200, + }); + + } catch (error) { + console.log(error) + return NextResponse.json( + { error: "Failed, check console" }, + { + status: 500, + } + ); + } +}