import { NextRequest, NextResponse } from 'next/server'
import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs'
import { cookies } from 'next/headers'
import { IncrementUsageRequest } from '@/lib/types/usage-tracking'
export async function POST(request: NextRequest) {
try {
const supabase = createRouteHandlerClient({ cookies })
// Get current user
const { data: { user }, error: userError } = await supabase.auth.getUser()
if (userError || !user) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
// Parse request body
const body: IncrementUsageRequest & { user_id?: string } = await request.json()
// Validate required fields
if (!body.feature_type) {
return NextResponse.json({ error: 'feature_type is required' }, { status: 400 })
}
// Use authenticated user's ID, not the one from request body
const userId = user.id
const amount = body.amount || 1
const metadata = body.metadata || {}
// Validate amount is positive
if (amount < 0) {
return NextResponse.json({ error: 'Amount must be positive' }, { status: 400 })
}
// Call the database function to increment usage
const { data, error } = await supabase
.rpc('increment_usage', {
user_uuid: userId,
feature_type_param: body.feature_type,
amount_param: amount,
metadata_param: metadata,
skip_limit_check: false
})
if (error) {
console.error('Error incrementing usage:', error)
return NextResponse.json({ error: 'Failed to increment usage' }, { status: 500 })
}
return NextResponse.json({
success: true,
usage: data
}, { status: 200 })
} catch (error) {
console.error('Unexpected error in usage increment:', error)
return NextResponse.json({ error: 'Internal server error' }, { status: 500 })
}
}