feat: Tier guard middleware (#129) #138
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Relates to #129
Milestone 0: Tier Guard Middleware
Files
backend/src/core/middleware/require-tier.ts(NEW)backend/src/core/config/feature-tiers.ts(read-only reference)Requirements
requireTier(featureKey: string)Fastify preHandler middlewarerequest.user.tier(set by auth middleware)FEATURE_TIERS[featureKey].minTier{ error: 'TIER_REQUIRED', requiredTier, currentTier, featureName, upgradePrompt }if access deniedbackend/src/core/middleware/Acceptance Criteria
requireTier('fuelLog.receiptScan')blocks free-tier users with 403 TIER_REQUIREDrequireTier('fuelLog.receiptScan')allows pro-tier users throughrequireTier('document.scanMaintenanceSchedule')blocks free-tier users with 403 TIER_REQUIREDrequiredTier,currentTier,featureName,upgradePromptrequireAuthin route preHandler arraysTests
backend/src/core/middleware/require-tier.test.ts(NEW)Milestone: Tier Guard Middleware
Phase: Execution | Agent: Developer | Status: PASS
Implementation
Created standalone
requireTier(featureKey: string)middleware inbackend/src/core/middleware/require-tier.ts:requireTier('fuelLog.receiptScan')- no options object neededrequireAuthin preHandler arraysrequiredTier,currentTier,featureName,upgradePromptrequest.userContext.subscriptionTier: Set by auth middlewareTests (9/9 passing)
backend/src/core/middleware/require-tier.test.ts:Quality
1a6400a feat: add standalone requireTier middleware (refs #138)Verdict: PASS | Next: Ready for QR post-implementation review