import { NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { authMiddleware } from '@/lib/auth-middleware' import connectDB from '@/lib/mongodb' import { User as UserModel } from '@/models/user' // Schema for balance response const BalanceResponseSchema = z.object({ success: z.boolean(), data: z.object({ balance: z.number(), currency: z.string().default('INR'), lastUpdated: z.string(), }), }) // Get user's current balance export async function GET(request: NextRequest) { try { // Authenticate user const user = await authMiddleware(request) if (!user) { return NextResponse.json( { success: false, error: { message: 'Authentication required', code: 'UNAUTHORIZED' }, }, { status: 401 } ) } await connectDB() // Get user's current balance from database const userData = await UserModel.findOne({ email: user.email }) if (!userData) { return NextResponse.json( { success: false, error: { message: 'User not found', code: 'USER_NOT_FOUND' }, }, { status: 404 } ) } const responseData = { success: true, data: { balance: userData.balance || 0, currency: 'INR', lastUpdated: userData.updatedAt?.toISOString() || new Date().toISOString(), }, } // Validate response format const validatedResponse = BalanceResponseSchema.parse(responseData) return NextResponse.json(validatedResponse, { status: 200 }) } catch (error) { console.error('Balance API error:', error) if (error instanceof z.ZodError) { return NextResponse.json( { success: false, error: { message: 'Invalid response format', code: 'VALIDATION_ERROR' }, }, { status: 500 } ) } return NextResponse.json( { success: false, error: { message: 'Failed to fetch balance', code: 'INTERNAL_ERROR' }, }, { status: 500 } ) } }