2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30
2026-08-11 16:43:12 +03:30

Tadrisino API — فاز ۱ (۴ از ۱۱ اپ)

پیاده‌سازی اولیه‌ی ۴ اپ اول (از ۱۱ اپ طراحی‌شده): accounts, content, progress, ai_tutor. بقیه‌ی اپ‌ها (subscription, payment, discount, affiliate, support, notifications, family) در فاز بعدی اضافه می‌شن.

اجرا

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

Description
No description provided
Readme 67 MiB
Languages
Python 96.8%
Shell 2.2%
HTML 0.9%