import { NextRequest, NextResponse } from "next/server"; import { prisma } from "@/lib/prisma"; import { requireAuth } from "@/lib/auth"; // Same encodeBase62 used in the code route function encodeBase62(id: string): string { const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; let hash = 0; for (let i = 0; i < Math.min(id.length, 10); i++) { hash = (hash * 31 + id.charCodeAt(i)) >>> 0; } let code = ""; while (code.length < 6) { code = chars[hash % 62] + code; hash = Math.floor(hash / 62); if (hash === 0 && code.length < 6) { hash = Math.floor(Math.random() * 62 ** (6 - code.length)); } } return code; } export async function GET(req: NextRequest) { const jwtPayload = await requireAuth(req); if (!jwtPayload) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } try { const userId = jwtPayload.userId; const [totalReferrals, upgradedCount, earnings] = await Promise.all([ prisma.referral.count({ where: { referrerId: userId }, }), prisma.referral.count({ where: { referrerId: userId, status: "upgraded" }, }), prisma.referral.aggregate({ where: { referrerId: userId }, _sum: { rewardFlh: true }, }), ]); const referralCode = encodeBase62(userId); return NextResponse.json({ totalReferrals, upgradedCount, totalEarned: earnings._sum.rewardFlh || 0, referralCode, shareLink: `${process.env.NEXT_PUBLIC_APP_URL || "https://falah.app"}/join?ref=${referralCode}`, }); } catch (error) { console.error("Referral stats error:", error); return NextResponse.json( { error: "Failed to get referral stats" }, { status: 500 } ); } }