wangdl
9566de63a2
Deploy API Server / build-and-unit (push) Failing after 29s
Deploy API Server / current-integration (push) Has been skipped
Deploy API Server / backward-compat (push) Has been skipped
Deploy API Server / deploy (push) Has been skipped
feat(membership): implement subscription entitlement and quota backend
- Add User.appAccountToken, StoreProduct, PlanQuota models
- Extend UserMembership with Apple IAP fields + source/status
- Add AppStoreTransaction (immutable) + AppStoreNotification (Durable Inbox)
- Implement EffectiveMembershipService (multi-grant → effectivePlan)
- Implement EffectiveQuotaService (PlanQuota-driven, Legacy/Shadow/Enforced)
- Implement AppStoreJwsVerifier (x5c chain → Apple Root CA G3)
- Implement AppStoreTransactionService (JWS verify + atomic projection)
- Implement AppStoreNotificationService (9 event types + lifecycle)
- Wire QuotaGuard across 5 AI Job types (active_recall/feynman/quiz/learning/flashcard)
- Add Membership API: GET /plans, /me, /usage, POST /apple/transactions
- Add webhook: POST /webhooks/app-store/v2 (@Public)
- Add 11 unit tests for EffectiveMembershipService
- Migration: 3 SQL files (expand_schema, transaction_notification, quotausage_unique)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 20:03:03 +08:00
..
2026-05-17 00:39:46 +08:00
2026-05-18 10:50:59 +08:00
2026-05-19 22:14:55 +08:00
2026-05-21 14:39:38 +08:00
2026-05-22 11:03:24 +08:00
2026-05-22 15:40:24 +08:00
2026-05-22 22:50:33 +08:00
2026-05-22 23:00:47 +08:00
2026-05-22 23:03:32 +08:00
2026-05-22 23:12:39 +08:00
2026-05-22 23:19:31 +08:00
2026-05-23 20:30:02 +08:00
2026-05-23 20:36:39 +08:00
2026-05-24 10:44:06 +08:00
2026-05-24 10:53:19 +08:00
2026-05-24 11:18:56 +08:00
2026-05-24 11:23:58 +08:00
2026-05-24 11:31:46 +08:00
2026-05-24 13:12:16 +08:00
2026-05-24 13:34:24 +08:00
2026-05-24 13:39:14 +08:00
2026-06-20 12:24:21 +08:00
2026-06-20 12:24:21 +08:00
2026-06-20 12:24:28 +08:00
2026-06-20 12:24:33 +08:00
2026-06-20 12:24:36 +08:00
2026-06-20 12:24:40 +08:00
2026-06-20 12:39:56 +08:00
2026-06-20 13:17:50 +08:00
2026-06-20 13:26:53 +08:00
2026-06-26 20:03:03 +08:00
2026-06-26 20:03:03 +08:00
2026-06-26 20:03:03 +08:00
2026-06-06 17:27:40 +08:00
2026-05-17 00:39:46 +08:00