fix: quota slide_generate pour tier BASIC
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m43s
CI / Deploy production (on server) (push) Failing after 17s

- Ajoute slide_generate et excalidraw_generate dans TIER_LIMITS
  (BASIC: 3, PRO: 20, BUSINESS: 100, ENTERPRISE: unlimited)
- run-for-note: utilise le bon feature key selon le type d'agent
- slides.tool: incrémente slide_generate (pas reformulate)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Antigravity
2026-05-29 12:10:31 +00:00
parent 9e23c078e9
commit f4208780fd
3 changed files with 13 additions and 4 deletions

View File

@@ -44,9 +44,10 @@ export async function POST(req: NextRequest) {
return NextResponse.json({ error: 'Paramètres invalides' }, { status: 400 }) return NextResponse.json({ error: 'Paramètres invalides' }, { status: 400 })
} }
// Quota check — slides/excalidraw generation counts as 'reformulate' credit // Quota check — feature key depends on generation type
const featureKey = type === 'slide-generator' ? 'slide_generate' : 'excalidraw_generate'
try { try {
await checkEntitlementOrThrow(userId, 'reformulate') await checkEntitlementOrThrow(userId, featureKey)
} catch (e) { } catch (e) {
if (e instanceof QuotaExceededError) { if (e instanceof QuotaExceededError) {
return NextResponse.json({ error: e.message }, { status: 402 }) return NextResponse.json({ error: e.message }, { status: 402 })

View File

@@ -81,8 +81,8 @@ RULES:
console.log('[Slides Tool] Canvas created:', canvas.id, '| Slides:', slides.length, '| Size:', Math.round(html.length / 1024), 'KB') console.log('[Slides Tool] Canvas created:', canvas.id, '| Slides:', slides.length, '| Size:', Math.round(html.length / 1024), 'KB')
// Decrement reformulate quota (agent-based generation consumes credits) // Decrement slide_generate quota after successful canvas creation
incrementUsageAsync(ctx.userId, 'reformulate') incrementUsageAsync(ctx.userId, 'slide_generate')
if (ctx.actionId) { if (ctx.actionId) {
await prisma.agentAction.update({ await prisma.agentAction.update({

View File

@@ -79,6 +79,8 @@ const TIER_LIMITS: Record<SubscriptionTier, Record<string, number | 'unlimited'>
brainstorm_expand: 10, brainstorm_expand: 10,
brainstorm_enrich: 20, brainstorm_enrich: 20,
suggest_charts: 5, suggest_charts: 5,
slide_generate: 3,
excalidraw_generate: 3,
}, },
PRO: { PRO: {
semantic_search: 100, semantic_search: 100,
@@ -90,6 +92,8 @@ const TIER_LIMITS: Record<SubscriptionTier, Record<string, number | 'unlimited'>
brainstorm_expand: 100, brainstorm_expand: 100,
brainstorm_enrich: 200, brainstorm_enrich: 200,
suggest_charts: 50, suggest_charts: 50,
slide_generate: 20,
excalidraw_generate: 20,
}, },
BUSINESS: { BUSINESS: {
semantic_search: 1000, semantic_search: 1000,
@@ -101,6 +105,8 @@ const TIER_LIMITS: Record<SubscriptionTier, Record<string, number | 'unlimited'>
brainstorm_expand: 500, brainstorm_expand: 500,
brainstorm_enrich: 1000, brainstorm_enrich: 1000,
suggest_charts: 200, suggest_charts: 200,
slide_generate: 100,
excalidraw_generate: 100,
}, },
ENTERPRISE: { ENTERPRISE: {
semantic_search: 'unlimited', semantic_search: 'unlimited',
@@ -112,6 +118,8 @@ const TIER_LIMITS: Record<SubscriptionTier, Record<string, number | 'unlimited'>
brainstorm_expand: 'unlimited', brainstorm_expand: 'unlimited',
brainstorm_enrich: 'unlimited', brainstorm_enrich: 'unlimited',
suggest_charts: 'unlimited', suggest_charts: 'unlimited',
slide_generate: 'unlimited',
excalidraw_generate: 'unlimited',
}, },
}; };