aboutsummaryrefslogtreecommitdiff
path: root/apps/web/src/app/api/getCount
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/src/app/api/getCount')
-rw-r--r--apps/web/src/app/api/getCount/route.ts66
1 files changed, 66 insertions, 0 deletions
diff --git a/apps/web/src/app/api/getCount/route.ts b/apps/web/src/app/api/getCount/route.ts
new file mode 100644
index 00000000..05a3aa30
--- /dev/null
+++ b/apps/web/src/app/api/getCount/route.ts
@@ -0,0 +1,66 @@
+import { db } from "@/server/db";
+import { and, eq, sql } from "drizzle-orm";
+import { sessions, storedContent, users } from "@/server/db/schema";
+import { type NextRequest, NextResponse } from "next/server";
+
+export const runtime = "edge";
+
+export async function GET(req: NextRequest) {
+ const token =
+ req.cookies.get("next-auth.session-token")?.value ??
+ req.cookies.get("__Secure-authjs.session-token")?.value ??
+ req.cookies.get("authjs.session-token")?.value ??
+ req.headers.get("Authorization")?.replace("Bearer ", "");
+
+ if (!token) {
+ return new Response(
+ JSON.stringify({ message: "Invalid Key, session not found." }),
+ { status: 404 },
+ );
+ }
+
+ const sessionData = await db
+ .select()
+ .from(sessions)
+ .where(eq(sessions.sessionToken, token!));
+
+ if (!sessionData || sessionData.length === 0) {
+ return new Response(
+ JSON.stringify({ message: "Invalid Key, session not found." }),
+ { status: 404 },
+ );
+ }
+
+ const user = await db
+ .select()
+ .from(users)
+ .where(eq(users.id, sessionData[0].userId))
+ .limit(1);
+
+ if (!user || user.length === 0) {
+ return NextResponse.json(
+ { message: "Invalid Key, session not found." },
+ { status: 404 },
+ );
+ }
+
+ const session = { session: sessionData[0], user: user[0] };
+
+ const count = await db
+ .select({
+ count: sql<number>`count(*)`.mapWith(Number),
+ })
+ .from(storedContent)
+ .where(
+ and(
+ eq(storedContent.user, session.user.id),
+ eq(storedContent.type, "twitter-bookmark"),
+ ),
+ );
+
+ return NextResponse.json({
+ tweetsCount: count[0].count,
+ limit: 1000,
+ user: session.user.email,
+ });
+}