Payments & Enrollments
- Create session
- POST /api/checkout/create-session builds Stripe line items; adds courseIds in metadata; uses APP_BASE_URL for redirects
- Webhook
- POST /api/stripe/webhook verifies signature and upserts Enrollment records (idempotent via unique composite key)
- Verify
- GET /api/checkout/verify-session to confirm paid/completed state client-side