Monetization app + RevenueCat webhooks (store IAP ledger) (#69)
## Summary - Rename `finance` → **`monetization`** Django app (keep `finance_*` tables via `label = "finance"`) - Add `services/stripe.py` + `services/revenuecat.py`; RevenueCat webhook upserts **subscription + Invoice/Payment** (billing history parity with Stripe) - Mount `/api/monetization/` + keep `/api/finance/` alias - Extend `Source`/`Provider` with `revenuecat`; product→plan mapping via `revenuecat_product_id` / `REVENUECAT_PRODUCT_PLAN_MAP` Closes #68. Companion to [chat_web_app#100](ai_ml_operations/chat_web_app#100). ## Test plan - [x] `manage.py test monetization.tests` (54 OK) - [x] Smoke `chat_backend.tests.test_views_documents` + `test_oauth` - [ ] Deploy: set `REVENUECAT_WEBHOOK_SECRET`; point RC webhook at `/api/finance/webhooks/revenuecat/` - [ ] Map store product IDs on `SubscriptionPlan.revenuecat_product_id` (or env JSON map) - [ ] Sandbox INITIAL_PURCHASE → subscription `source=revenuecat` + invoice in `/finance/invoices/`Reviewed-on: #69
This commit was merged in pull request #69.
This commit is contained in:
1 parent
2aeb95136a
commit
e1e086a474
44 files changed
+965
-102
No files matched your search
@@ -39,7 +39,7 @@ from .utils import (
|
||||
is_heartbeat_payload,
|
||||
normalize_user_message,
|
||||
)
|
||||
from finance.services.quotas import FeatureNotAllowed, QuotaExceeded, check_generation_allowed
|
||||
from monetization.services.quotas import FeatureNotAllowed, QuotaExceeded, check_generation_allowed
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -74,7 +74,7 @@ def enforce_generation_gates(user, feature="text_generation"):
|
||||
|
||||
@database_sync_to_async
|
||||
def enforce_feature_gate(user, feature):
|
||||
from finance.services.quotas import assert_feature_allowed
|
||||
from monetization.services.quotas import assert_feature_allowed
|
||||
|
||||
assert_feature_allowed(user, feature)
|
||||
|
||||
|
||||
Reference in new issue
Block a user