Initial commit - clean project structure
This commit is contained in:
63
README.md
Normal file
63
README.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user