Update README.md

This commit is contained in:
2026-08-11 16:54:25 +03:30
parent e1d830f6a9
commit b0587a42d8

View File

@@ -1,45 +1,45 @@
# Tadrisino API — فاز ۱ (۴ از ۱۱ اپ) Tadrisino API
پیاده‌سازی اولیه‌ی ۴ اپ اول (از ۱۱ اپ طراحی‌شده): `accounts`, `content`, `progress`, `ai_tutor`. Backend پروژه Tadrisino با Django و Django REST Framework پیاده‌سازی شده و شامل بخش‌های اصلی احراز هویت، محتوای آموزشی، پیشرفت کاربر، اشتراک، پرداخت، تخفیف، پشتیبانی، اعلان‌ها، خانواده و سیستم‌های مرتبط است.
بقیه‌ی اپ‌ها (subscription, payment, discount, affiliate, support, notifications, family) در فاز بعدی اضافه می‌شن.
## اجرا اجرا
```bash
python3 -m venv venv python3 -m venv venv
source venv/bin/activate # ویندوز: venv\Scripts\activate source venv/bin/activate
pip install -r requirements.txt pip install -r requirements.txt
python manage.py migrate python manage.py migrate
python manage.py createsuperuser # اختیاری، برای /admin python manage.py createsuperuser
python manage.py runserver python manage.py runserver
```
## تست با Swagger مستندات API
مرورگر: **http://127.0.0.1:8000/api/docs/**
(Redoc هم هست: `/api/redoc/`، و پنل ادمین: `/admin/`)
## جریان تست پیشنهادی Swagger:
1. `POST /api/auth/session` با `{"type":"guest","deviceId":"d_test1"}` → یک `token` می‌گیرید.
2. توی Swagger روی دکمه‌ی **Authorize** بزنید و فقط خودِ `token` رو بدون کلمه‌ی Bearer وارد کنید.
3. حالا endpointهای نیازمند auth (مثل `/api/user/grade`, `/api/user/summary`, `/api/ai/ask`) کار می‌کنن.
4. برای تست لاگین با شماره: `POST /api/auth/otp/request` بزنید (کد OTP رو در پاسخ برمی‌گردونه چون SMS واقعی وصل نیست)، یا مستقیم کد **0000** رو با هر شماره‌ای در `/api/auth/login` امتحان کنید (فقط در حالت توسعه).
5. برای تست محتوا: از پنل `/admin/` چند `Grade → Unit → Node → Lesson → Question → Choice` بسازید (حتماً یک Choice رو `is_correct=True` کنید)، بعد `/api/home?userId=1&grade=1`، `/api/lessons/{id}/questions`، `/api/questions/{id}/answer?userId=1` رو تست کنید.
## نکات مهم / اصلاحات نسبت به سند اولیه http://127.0.0.1:8000/api/docs/
- **مدل `Choice`** در سند شما فیلد `is_correct` نداشت (خودتون هم توی سند بهش اشاره کرده بودید که شاید سهواً جا افتاده). بدون این فیلد امکان پیاده‌سازی `POST /api/questions/{id}/answer` نبود، پس اضافه‌ش کردم (کامنت توضیح در `content/models.py`).
- احراز هویت: از یک **Bearer token امضاشده و stateless** (بدون کتابخونه‌ی JWT خارجی، با `django.core.signing`) استفاده شده که دقیقاً با فیلدهای مدل `Session` شما (که فقط `refresh_token` داره، نه access token) سازگاره.
- اپ `accounts.User` عمداً `AUTH_USER_MODEL` جنگو نیست؛ یک مدل بیزنسی مستقله، طبق طراحی خودتون.
- endpoint `POST /api/ai/ask` فعلاً پاسخ **stub** برمی‌گردونه (بدون اتصال به مدل واقعی هوش مصنوعی) — محل اتصال با کامنت مشخص شده (`ai_tutor/views.py` تابع `generate_tutor_answer`).
- endpoint کمکی که در سند نبود ولی برای تست‌پذیری اضافه شد: `POST /api/auth/otp/request` (گرفتن کد OTP بدون SMS واقعی).
## ساختار Redoc:
```
config/ تنظیمات پروژه (settings, urls اصلی)
accounts/ Identity & Profile
content/ Curriculum
progress/ Progress & Gamification
ai_tutor/ AI Tutor
```
## اپ‌های باقی‌مونده (فاز بعدی) http://127.0.0.1:8000/api/redoc/
subscription, payment, discount, affiliate, support, notifications, family
پنل مدیریت:
http://127.0.0.1:8000/admin/
ساختار پروژه
config/
accounts/
content/
progress/
ai_tutor/
subscription/
payment/
discount/
affiliate/
support/
notifications/
family/
هر بخش دارای مدل‌ها، serializerها، viewها، URLها، migration و تنظیمات مربوط به خود است.
برای تست API می‌توان از Swagger و همچنین پنل مدیریت Django استفاده کرد.