Initial commit
This commit is contained in:
45
README.md
Normal file
45
README.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Tadrisino API — فاز ۱ (۴ از ۱۱ اپ)
|
||||
|
||||
پیادهسازی اولیهی ۴ اپ اول (از ۱۱ اپ طراحیشده): `accounts`, `content`, `progress`, `ai_tutor`.
|
||||
بقیهی اپها (subscription, payment, discount, affiliate, support, notifications, family) در فاز بعدی اضافه میشن.
|
||||
|
||||
## اجرا
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
## تست با Swagger
|
||||
مرورگر: **http://127.0.0.1:8000/api/docs/**
|
||||
(Redoc هم هست: `/api/redoc/`، و پنل ادمین: `/admin/`)
|
||||
|
||||
## جریان تست پیشنهادی
|
||||
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` رو تست کنید.
|
||||
|
||||
## نکات مهم / اصلاحات نسبت به سند اولیه
|
||||
- **مدل `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 واقعی).
|
||||
|
||||
## ساختار
|
||||
```
|
||||
config/ تنظیمات پروژه (settings, urls اصلی)
|
||||
accounts/ Identity & Profile
|
||||
content/ Curriculum
|
||||
progress/ Progress & Gamification
|
||||
ai_tutor/ AI Tutor
|
||||
```
|
||||
|
||||
## اپهای باقیمونده (فاز بعدی)
|
||||
subscription, payment, discount, affiliate, support, notifications, family
|
||||
Reference in New Issue
Block a user