[flex2-payment] Partial auth table status never updates after capture/cancel

Resolved 💬 2 comments Opened Feb 26, 2026 by stephen-flex Closed Mar 1, 2026

Problem

The partial_authorization table status field is write-once (never updated after initial insert). After Stripe/Checkout capture succeeds, the DB still shows the initial status (requires_capture or AUTHORIZED) instead of the final status (succeeded or CAPTURED). Same issue for cancel/void flows.

Production evidence:

  • Customer azu7RdgGeFNXJOVzdsD1YRx4SkM2, pa.id 210884
  • Stripe capture succeeded at 17:10:48 UTC (pi_3T585JIDw3UYhiN00nkjnTmp, status=succeeded)
  • DB still shows status=requires_capture

Root Cause

PartialAuthorizationDao.java only has an insert() method — no updateStatus(). After finalizeOutcomeStripe() and finalizeOutcomeCheckout() capture/cancel, the new status from Stripe/Checkout is not persisted back to the database.

Fix Required

  1. Add updateStatus(String processorPaymentIntentId, String newStatus) to PartialAuthorizationDao
  2. Call it after capture/cancel in finalizeOutcomeStripe() (lines 375-429)
  3. Call it after capture/cancel in finalizeOutcomeCheckout() (lines 245-291)
  4. Add tests to PartialAuthorizationDaoTest and PartialAuthorizationServiceTest

Files Affected

  • PartialAuthorizationDao.java
  • PartialAuthorizationService.java
  • PartialAuthorizationDaoTest.java
  • PartialAuthorizationServiceTest.java
  • ChargeServiceTest.java

Scope

  • Single ticket
  • 1 domain (partial-auth)
  • ~5 files
  • No database migration needed (status column already exists from V8_61)

Acceptance Criteria

  • [ ] PartialAuthorizationDao has updateStatus() method
  • [ ] After successful Stripe capture, partial_auth status updates to 'succeeded'
  • [ ] After Stripe cancel/void, partial_auth status updates to 'canceled'
  • [ ] After Checkout capture, partial_auth status updates to 'CAPTURED'
  • [ ] After Checkout cancel/void, partial_auth status updates to 'CANCELED'
  • [ ] Tests cover status transitions for both Stripe and Checkout flows
  • [ ] Existing rows are not backfilled (forward-fix only)

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗