SurfSense/_bmad-output/implementation-artifacts/deferred-work.md
Vonic 07a4bc3fc3 feat(story-5.2): add Stripe subscription checkout with session verification
Add POST /api/v1/stripe/create-subscription-checkout endpoint with
get_or_create_stripe_customer (SELECT FOR UPDATE), plan_id→price_id
mapping from env vars, active subscription guard (409), and
session_id in success URL. Add GET /verify-checkout-session endpoint
for server-side payment verification. Add /subscription-success
frontend page with loading/verified/failed states.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 23:58:57 +07:00

1.5 KiB

Deferred Work

Deferred from: code review of story 3-5-model-selection-via-quota (2026-04-14)

  • stripe_subscription_id has no unique constraint [surfsense_backend/app/db.py] — Column added without UNIQUE constraint. Should be enforced once Stripe integration (Epic 5) is implemented to prevent duplicate subscription mappings.
  • load_llm_config_from_yaml reads API keys directly from YAML file, not env vars [surfsense_backend/app/config.py] — Pre-existing: YAML config stores API keys inline. Spec Task 1.2 says "đọc API keys từ env vars" but this is the existing pattern used throughout the project. To be refactored when security hardening is prioritized.

Deferred from: code review of story 5-1 (2026-04-14)

  • ref cast as any on Switch component in pricing.tsx:99 — pre-existing issue, not introduced by this change. Should use proper React.ComponentRef<typeof Switch> type.

Deferred from: code review of story 5-2 (2026-04-14)

  • Webhook handler needs to distinguish mode='subscription' from mode='payment' in checkout.session.completed and update User's subscription_status, plan_id, stripe_subscription_id — scope of Story 5.3.
  • Subscription lifecycle events (invoice.paid, customer.subscription.updated/deleted, invoice.payment_failed) not handled — scope of Story 5.3.
  • _get_or_create_stripe_customer can create orphaned Stripe customers if db_session.commit() fails after customers.create. Consider idempotency key in future.