Yesterday I mentioned I was working on implementing repositories, services and routes for Stripe integration.
Today it's done:
- CreditService implemented with FIFO logic (consumes credits that expire soonest first)
- Idempotency built in (users don't pay twice for the same resource)
- Balance validation for list endpoints (must have credits > 0 to access)
- Detail endpoints consume credits (1 credit per signal/cluster/hypothesis detail)
- Transaction history endpoint for transparency
- Balance endpoint for real-time UI updates
Key architecture decisions:
- Atomic transactions (all or nothing)
- FIFO by expires_at (validated in PoC, now in production code)
- Idempotency via resource_type + resource_id tracking
- Configurable credit costs (easy to adjust pricing strategy)
Next: Integrating credit consumption into the frontend endpoints and preparing for beta testing. 12 days to launch.