2.0 KiB
2.0 KiB
backend/src/features/subscriptions/
Stripe payment integration for subscription tiers and donations.
Files
| File | What | When to read |
|---|---|---|
README.md |
Feature overview with architecture diagram | Understanding subscription flow |
Subdirectories
| Directory | What | When to read |
|---|---|---|
api/ |
HTTP controllers and routes | API endpoint changes |
domain/ |
Services and type definitions | Business logic changes |
data/ |
Repository for database operations | Database queries |
external/stripe/ |
Stripe API client wrapper | Stripe integration |
migrations/ |
Database schema | Schema changes |
jobs/ |
Scheduled background jobs | Grace period processing |
Key Patterns
- Repository mapRow() converts snake_case to camelCase
- Webhook idempotency via stripe_event_id unique constraint
- Tier sync to user_profiles.subscription_tier on changes
- Grace period: 30 days after payment failure
- Vehicle selections for tier downgrades (not deleted, just gated)
API Endpoints
Subscriptions (Authenticated)
- GET /api/subscriptions - Current subscription
- POST /api/subscriptions/checkout - Create subscription
- POST /api/subscriptions/cancel - Schedule cancellation
- POST /api/subscriptions/reactivate - Cancel pending cancellation
- POST /api/subscriptions/downgrade - Downgrade with vehicle selection
- PUT /api/subscriptions/payment-method - Update payment
- GET /api/subscriptions/invoices - Billing history
Donations (Authenticated)
- POST /api/donations - Create payment intent
- GET /api/donations - Donation history
Webhooks (Public)
- POST /api/webhooks/stripe - Stripe webhook (signature verified)
Configuration
Secrets (files via config-loader)
/run/secrets/stripe-secret-key- Stripe API secret key/run/secrets/stripe-webhook-secret- Stripe webhook signing secret
Environment Variables (docker-compose)
- STRIPE_PRO_MONTHLY_PRICE_ID
- STRIPE_PRO_YEARLY_PRICE_ID
- STRIPE_ENTERPRISE_MONTHLY_PRICE_ID
- STRIPE_ENTERPRISE_YEARLY_PRICE_ID