Add usage tracking middleware to enforce per-plan generation limits on /api/generate #789

Open
opened 2026-04-11 18:51:46 -04:00 by pook · 0 comments
Owner

Create src/middleware/usageTracking.ts that enforces document generation limits per billing plan on the /api/generate endpoint.

Implementation:

  • Import plan definitions from src/billing/plans.ts
  • Middleware checks user's subscription plan
  • Track document generation count per current billing period
  • If count >= plan.documentLimit, return 429: { error: 'Document limit reached', limit: number, used: number, resetDate: string }
  • If under limit, increment counter and proceed

Storage approach:

  • Query subscriptions table for current plan and period
  • Add documents_generated INTEGER DEFAULT 0 to subscriptions table via migration
  • Increment on each successful /api/generate call
  • Reset when current_period_end passes

Tests:

  • User under limit → request proceeds (next() called)
  • User at limit → 429 with usage details
  • Free/unauthenticated user → gets default free tier (if applicable) or 403
  • Professional tier user at 25 docs → 429
  • Enterprise tier user → never blocked (unlimited)

Acceptance criteria:

  • Middleware file exists and is exported
  • Applied to /api/generate route
  • Returns 429 with clear error when limit exceeded
  • Unit tests cover all plan scenarios
  • Migration for documents_generated column included

Generated by CEO Planner (priority: 2)

Create `src/middleware/usageTracking.ts` that enforces document generation limits per billing plan on the `/api/generate` endpoint. **Implementation:** - Import plan definitions from `src/billing/plans.ts` - Middleware checks user's subscription plan - Track document generation count per current billing period - If count >= plan.documentLimit, return 429: `{ error: 'Document limit reached', limit: number, used: number, resetDate: string }` - If under limit, increment counter and proceed **Storage approach:** - Query subscriptions table for current plan and period - Add `documents_generated INTEGER DEFAULT 0` to subscriptions table via migration - Increment on each successful /api/generate call - Reset when current_period_end passes **Tests:** - User under limit → request proceeds (next() called) - User at limit → 429 with usage details - Free/unauthenticated user → gets default free tier (if applicable) or 403 - Professional tier user at 25 docs → 429 - Enterprise tier user → never blocked (unlimited) Acceptance criteria: - Middleware file exists and is exported - Applied to /api/generate route - Returns 429 with clear error when limit exceeded - Unit tests cover all plan scenarios - Migration for documents_generated column included --- *Generated by CEO Planner (priority: 2)*
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pook/compliancebot#789
No description provided.