[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
- Add
updateStatus(String processorPaymentIntentId, String newStatus)to PartialAuthorizationDao - Call it after capture/cancel in
finalizeOutcomeStripe()(lines 375-429) - Call it after capture/cancel in
finalizeOutcomeCheckout()(lines 245-291) - Add tests to PartialAuthorizationDaoTest and PartialAuthorizationServiceTest
Files Affected
PartialAuthorizationDao.javaPartialAuthorizationService.javaPartialAuthorizationDaoTest.javaPartialAuthorizationServiceTest.javaChargeServiceTest.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)
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗