All files / app/api/subscriptions route.ts

100% Statements 40/40
90% Branches 9/10
100% Functions 1/1
100% Lines 40/40

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 641x                     4x 4x   4x 3x 3x 3x 3x   4x 1x 1x   2x     2x 2x 2x 2x       2x 2x 2x     2x 2x 2x 2x 2x     2x 2x 2x 2x 2x 2x   2x 4x 4x 4x 4x 4x 1x 1x 1x 4x  
/**
 * Subscription Management API
 *
 * GET /api/subscriptions - Get current user's subscription
 * GET /api/subscriptions/plans - Get all available plans
 */
 
import { NextResponse } from 'next/server';
import { createClient } from '@/lib/supabase/server';
import { getAdminClient } from '@/lib/supabase/admin';
 
export async function GET() {
  try {
    // Authenticate user
    const supabase = await createClient();
    const {
      data: { user },
      error: authError,
    } = await supabase.auth.getUser();
 
    if (authError || !user) {
      return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
    }
 
    const adminClient = getAdminClient();
 
    // Get user's current subscription
    const { data: subscription } = await adminClient
      .from('subscriptions')
      .select(
        `
        *,
        plan:subscription_plans(*)
      `
      )
      .eq('user_id', user.id)
      .single();
 
    // Get user's profile tier
    const { data: profile } = await adminClient
      .from('profiles')
      .select('subscription_tier')
      .eq('user_id', user.id)
      .single();
 
    // Get payment history
    const { data: payments } = await adminClient
      .from('payments')
      .select('*')
      .eq('user_id', user.id)
      .order('created_at', { ascending: false })
      .limit(10);
 
    return NextResponse.json({
      subscription: subscription || null,
      currentTier: profile?.subscription_tier || 'free',
      payments: payments || [],
    });
  } catch (error) {
    console.error('Get subscription error:', error);
    return NextResponse.json({ error: 'Failed to get subscription' }, { status: 500 });
  }
}