# Tadrisino API بک‌اند اپلیکیشن آموزشی Tadrisino — Django + Django REST Framework. احراز هویت با OTP، محتوای درسی و پیشرفت کاربر، دستیار هوش مصنوعی، اشتراک و پرداخت، تخفیف، اعلان‌ها، همکاری در فروش، پشتیبانی و حساب خانواده. ## اجرا ```bash python3 -m venv venv source venv/bin/activate # ویندوز: venv\Scripts\activate pip install -r requirements.txt python manage.py migrate python manage.py createsuperuser # اختیاری، برای /admin python manage.py runserver ``` ## مستندات API | | | |---|---| | Swagger UI | `http://127.0.0.1:8000/api/docs/` | | Redoc | `http://127.0.0.1:8000/api/redoc/` | | پنل ادمین | `http://127.0.0.1:8000/admin/` | **شروع سریع در Swagger:** 1. `POST /api/auth/session` با `{"type":"guest","deviceId":"d_test1"}` → یک `token` بگیرید. 2. روی دکمه‌ی **Authorize** بزنید و فقط خودِ `token` رو (بدون کلمه‌ی Bearer) وارد کنید. 3. برای تست لاگین با شماره: `POST /api/auth/otp/request` بزنید، یا در محیط توسعه کد **0000** رو با هر شماره‌ای در `/api/auth/login` امتحان کنید. ## ساختار پروژه | اپ | مسئولیت | مدل‌های اصلی | |---|---|---| | `accounts` | هویت کاربر و session | `User`, `Profile`, `Session`, `OTPCode` | | `content` | محتوای درسی و پیشرفت روی درس | `Grade`, `Unit`, `Node`, `Lesson`, `Question`, `Choice`, `NodeProgress` | | `progress` | آمار، لیدربرد، streak | `UserStats`, `LeaderboardEntry`, `StreakRecord`, `UserHearts` | | `ai_tutor` | دستیار هوش مصنوعی | `Conversation`, `Message`, `MessageFeedback` | | `subscription` | پلن و اشتراک | `Plan`, `Subscription` | | `payment` | سفارش و تراکنش | `Order`, `Transaction` | | `discount` | کد تخفیف و آفر | `DiscountCode`, `Redemption`, `Offer`, `UserOffer` | | `notifications` | اعلان‌ها | `Notification` | | `affiliate` | همکاری در فروش | `AffiliateAccount`, `Conversion` | | `support` | تیکت و گزارش باگ | `BugReport`, `Ticket`, `TicketMessage` | | `family` | حساب خانواده / کنترل والدین | `FamilyLink`, `ParentalSettings`, `WeeklyReportLog` | | `statuslog` | لاگ عمومی تغییر status، مستقل از بقیه‌ی اپ‌ها | `StatusChangeLog` | | `config` | تنظیمات و url های اصلی پروژه | — | ## نکات فنی مهم - **احراز هویت**: Bearer token امضاشده و stateless (`django.core.signing`، بدون کتابخانه‌ی JWT خارجی)، هماهنگ با مدل `Session`. - **`accounts.User`** عمداً `AUTH_USER_MODEL` جنگو نیست؛ یک مدل بیزنسی مستقل است. - بین اپ‌ها به‌جای FK واقعی از ارجاع سبک (`user_id`, `object_id` + `label`) استفاده شده تا هر اپ در آینده قابل جدا شدن باشد. - `POST /api/ai/ask` فعلاً پاسخ stub برمی‌گرداند؛ محل اتصال مدل واقعی در `ai_tutor/views.py` (تابع `generate_tutor_answer`) مشخص شده. - `DEV_MASTER_OTP` (کد `0000`) فقط برای تست در توسعه است — **پیش از دیپلوی پروداکشن باید حذف یا به `DEBUG` مقیّد شود.** ## قبل از دیپلوی پروداکشن - [ ] `DEBUG = False` و `SECRET_KEY` از env - [ ] حذف/مقیّدسازی `DEV_MASTER_OTP` به محیط توسعه - [ ] rate limit روی `auth/otp/request` و `auth/login` - [ ] دیتابیس Postgres به‌جای SQLite