Un pot de crédits global (BASIC 100 / PRO 1 000 / BUSINESS 4 000) remplace les seaux par fonction côté débit. Packs one-shot S/M/L, admin sans seaux legacy, usage multi-features, hints de coût, anti-flash thème et hydratation admin. Inclut aussi le pipeline slides renforcé et la page publique polishée.
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { NextResponse } from 'next/server'
|
|
import { auth } from '@/auth'
|
|
import { getCreditUsageSummary, getQuotasCompatFromCredits } from '@/lib/credits'
|
|
|
|
export const dynamic = 'force-dynamic'
|
|
|
|
export async function GET() {
|
|
const session = await auth()
|
|
|
|
if (!session?.user?.id) {
|
|
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
|
|
}
|
|
|
|
try {
|
|
const summary = await getCreditUsageSummary(session.user.id)
|
|
// Compat anciens clients : quotas dérivés des crédits
|
|
const quotas = await getQuotasCompatFromCredits(session.user.id)
|
|
|
|
return NextResponse.json({
|
|
tier: summary.tier,
|
|
period: summary.period,
|
|
balance: {
|
|
totalRemaining: summary.balance.unlimited
|
|
? null
|
|
: summary.balance.totalRemaining,
|
|
subscriptionRemaining: summary.balance.unlimited
|
|
? null
|
|
: summary.balance.subscriptionRemaining,
|
|
purchasedRemaining: summary.balance.purchasedRemaining,
|
|
subscriptionGranted: summary.balance.unlimited
|
|
? null
|
|
: summary.balance.subscriptionGranted,
|
|
subscriptionSpent: summary.balance.subscriptionSpent,
|
|
spentThisPeriod: summary.balance.spentThisPeriod,
|
|
unlimited: summary.balance.unlimited,
|
|
},
|
|
breakdown: summary.breakdown,
|
|
// legacy
|
|
quotas,
|
|
})
|
|
} catch (error) {
|
|
console.error('[usage/current] Failed to fetch usage data:', error)
|
|
return NextResponse.json(
|
|
{ error: 'Failed to fetch usage data' },
|
|
{ status: 503 },
|
|
)
|
|
}
|
|
}
|