Bazaar: plans cache cleared by migration 0014, enum name override, CLAUDE.md status

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 17:59:43 +03:30
parent 8077ab4350
commit 76b0ef976e
2 changed files with 16 additions and 0 deletions

View File

@@ -451,6 +451,18 @@ preferred setup, because there is then no key to leak. **Never let the server ru
`django-insecure-…` fallback from `config/settings.py`: that string is committed here, so
anyone who can read this repo can forge a token for any user.**
## کافه‌بازار: اشتراک، تخفیفِ پویا، تمدیدِ خودکار — روی سرور از ۲۰۲۶-۱۰-۱۲ ۱۷:۵۴ (بک‌اند `8077ab4`، فرانت `fffdeac`)
- **محصول‌های پیشخان** (پرسشِ API با توکنِ ساختگی، ۱۰۰۰۰–۱۰۶۹۹): فقط `10342`، `10343` (اشتراکِ ۹۰ روزه)، `10344` (۱۸۰ روزه)،
زیرِ `com.tadrisino.math.app`. سه‌ماهه و شش‌ماهه SKU گرفتند (`subscription.0014`)؛ `10342` نامعلوم است و به هیچ پلنی وصل
نیست. هیچ بسته‌ای در بازار نیست. اتصالِ سرور به بازار از راهِ OAuthِ حسابِ شرکت است (کلیدِ پیشخان نداریم).
- **مسیر** و تمدیدِ خودکار: `docs/operations.md` «فروش در کافه‌بازار». `BAZAAR_DYNAMIC_PRICE_KEY` در `.env` سرور است (بکاپ:
`.deploy-backups/env-before-bazaar-dynamic-20261012-175336`)؛ توکن فقط وقتی کدِ تخفیف قیمت را کم کرده می‌رود.
- **فرانت:** دو کاشیِ «کارتِ بانکی» و «کافه‌بازار» همیشه کنارِ هم؛ بازار جایی که ممکن نیست غیرفعال با دلیل. پلِ تازه
`bazaarBuy`؛ کلیدِ RSA و `versionCode` ۲ در `android/`. `compileDebugKotlin` سبز؛ **APK ساخته نشده**.
- **سنجیده:** ۹۷۹ تست؛ روی سایتِ زنده با دموی ۱۴ و پلِ اندرویدِ ساختگی در مرورگر: کاشی‌ها، و سرور SKUِ `10343`/«subscription»
را به اپ داد (سفارشِ ۱۴ بعد لغو شد). **نسنجیده:** هیچ خرید، JWT یا تمدیدِ واقعی در بازار؛ برابریِ قیمتِ پیشخان با ادمین.
## جزیره‌های تمرینِ تازه و شکل در سوال — ۲۰۲۶-۱۰-۱۲ (عصر)
- **۱۶۰ جزیره‌ی «تمرین: …»** آخرِ فصل‌های پایه‌های ۳ تا ۱۲، با **۱۳٬۶۸۹ سوالِ تازه** (کلِ `questions.json` ۱۸٬۵۲۲). هر جزیره ۳ تا ۶ درس دارد و هر درس

View File

@@ -8,6 +8,7 @@ com.tadrisino.math.app شناخت (پرسشِ API با توکنِ ساختگی:
پلن‌ها با مدت پیدا می‌شوند، نه با id (idها بین دیتابیس‌ها فرق دارند). اگر دقیقاً یک پلنِ فروشیِ هم‌مدت
نباشد، migration می‌شکند تا دستی دیده شود؛ SKUی که ادمین از پیش گذاشته دست نمی‌خورد.
"""
from django.core.cache import cache
from django.db import migrations
SKUS = {90: '10343', 180: '10344'}
@@ -27,6 +28,9 @@ def forward(apps, schema_editor):
continue
plan.bazaar_sku = sku
plan.save(update_fields=['bazaar_sku'])
# مدلِ تاریخیِ migration سیگنالِ post_save (subscription/receivers.py) را نمی‌زند؛ بی‌این فهرستِ پلن‌ها تا یک
# ساعت SKUی خالی نشان می‌داد (روی سرور دیده شد). کلید همان PLANS_CACHE_KEY است، کپی تا migration به view وابسته نشود.
cache.delete('subscription:plans:v3')
def backward(apps, schema_editor):