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