/** * POST /api/referrals - Create referral code * GET /api/referrals - Get user's referrals */ import { NextRequest, NextResponse } from 'next/server'; import { requireAuth } from '@/app/lib/auth'; import { getUserReferrals, findUser } from '@/app/lib/db/store'; import { Referral, ApiResponse } from '@/app/lib/types'; interface ReferralCodeResponse { referralCode: string; referralLink: string; } export async function GET(request: NextRequest) { try { // Authenticate user const user = requireAuth(request); // Get user's referrals with referred user details const referrals = getUserReferrals(user.id); const referralsWithDetails = referrals.map(ref => { const referredUser = findUser(ref.referredId); return { ...ref, referredUserName: referredUser?.name || 'Unknown' }; }); return NextResponse.json( { success: true, data: { referrals: referralsWithDetails, totalReferrals: referrals.length, totalBonusEarned: referrals.reduce((sum, ref) => sum + ref.bonusPoints, 0) } }, { status: 200 } ); } catch (error) { if (error instanceof Error && error.message === 'Unauthorized') { return NextResponse.json( { success: false, error: 'Unauthorized' }, { status: 401 } ); } console.error('Get referrals error:', error); return NextResponse.json( { success: false, error: 'Internal server error' }, { status: 500 } ); } } export async function POST(request: NextRequest) { try { // Authenticate user const user = requireAuth(request); // Generate referral code (base64 encoded user ID) const referralCode = Buffer.from(user.id).toString('base64'); // Build referral link const baseUrl = process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000'; const referralLink = `${baseUrl}/register?ref=${referralCode}`; const response: ReferralCodeResponse = { referralCode, referralLink }; return NextResponse.json>( { success: true, data: response, message: 'Referral code generated successfully' }, { status: 200 } ); } catch (error) { if (error instanceof Error && error.message === 'Unauthorized') { return NextResponse.json( { success: false, error: 'Unauthorized' }, { status: 401 } ); } console.error('Create referral code error:', error); return NextResponse.json( { success: false, error: 'Internal server error' }, { status: 500 } ); } }