""" پلنِ اشتراکِ یک‌ساله — اولین پلنِ واقعیِ سرور. تا این migration روی پروداکشن هیچ Planی نبود و تبِ «اشتراک» در اپ خالی بود. از راهِ migration ساخته می‌شود نه دستی از ادمین، تا هر سرورِ تازه‌ای با همان `deploy.sh` صاحبش شود. قیمت تصمیمِ محصولی است و از پنلِ ادمین قابلِ تغییر است؛ این migration فقط وقتی می‌سازدش که هیچ پلنی وجود نداشته باشد، پس ویرایشِ بعدیِ ادمین را هرگز بازنویسی نمی‌کند. مبنای ۲۹۹٬۰۰۰ تومان: اپ‌های خودآموزِ مشابه (مثلاً زبانشناس) اشتراکِ سالانه را حدودِ ماهی ۴۰ هزار تومان می‌فروشند؛ پکیج‌های ویدیوییِ کنکور چند میلیون‌اند و هم‌رده‌ی این اپ نیستند. ⚠️ تنها مزیتی که اشتراک امروز در کد واقعاً می‌دهد «قلبِ نامحدود» است (subscription.services.has_unlimited_hearts). بندهای دیگرِ features برای همه در دسترس‌اند؛ اگر قرار است اشتراک چیزِ بیشتری بدهد، آن تصمیمِ محصولی است. """ from django.db import migrations YEARLY_PLAN = { 'title': 'اشتراک یک‌ساله', 'price': 299_000, 'currency': 'IRT', 'discount_percent': 0, 'popular': True, 'duration_days': 365, 'badge': 'بهترین انتخاب', 'features': [ 'قلبِ نامحدود؛ هیچ‌وقت وسطِ تمرین متوقف نمی‌شی', 'همه‌ی فصل‌ها و آزمون‌های پایه‌ات', 'دستیارِ هوشمند بر اساسِ کتابِ درسی', 'یک سال کامل دسترسی', ], } def create_yearly_plan(apps, schema_editor): Plan = apps.get_model('subscription', 'Plan') if Plan.objects.exists(): return Plan.objects.create(**YEARLY_PLAN) def remove_yearly_plan(apps, schema_editor): Plan = apps.get_model('subscription', 'Plan') # فقط پلنی که خودِ این migration ساخته و هنوز خریدی ندارد. Plan.objects.filter(title=YEARLY_PLAN['title'], subscriptions__isnull=True).delete() class Migration(migrations.Migration): dependencies = [ ('subscription', '0004_plan_badge_plan_features'), ] operations = [ migrations.RunPython(create_yearly_plan, remove_yearly_plan), ]