# تغییرات API Exchange Token ## نسخه جدید (اکتبر 2024) ### تغییرات اساسی #### 1. انتقال API از `courses` به `account` - **قدیمی**: `/api/courses/auth/exchange-token/` - **جدید**: `/api/account/exchange-token/` #### 2. تغییر ساختار Response **قدیمی:** ```json { "success": true, "message": "ورود موفق", "user": { "id": "123", "email": "user@example.com", "name": "علی احمدی", "role": "admin", "is_admin": true } } ``` **جدید:** ```json { "success": true, "message": "ورود موفق", "token": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0", "user": { "id": 123, "fullname": "علی احمدی", "email": "user@example.com", "avatar": "https://cdn.example.com/avatar.jpg" } } ``` #### 3. تغییر URL تولید Token موقت **Response قبلی:** ```json { "token": "abc123", "url": "https://frontend.example.com/join-class?token=abc123", "expires_in": 300 } ``` **Response جدید:** ```json { "token": "abc123xyz789", "url": "https://imamjavad.newhorizonco.uk/join-class?token=abc123xyz789&slug=python-basics", "expires_in": 300 } ``` ### تغییرات در فیلدها | فیلد قدیمی | فیلد جدید | توضیحات | |-----------|----------|---------| | `user.name` | `user.fullname` | تغییر نام فیلد | | `user.id` (string) | `user.id` (number) | تغییر نوع داده | | `user.role` | حذف شد | دیگر ارسال نمی‌شود | | `user.is_admin` | حذف شد | دیگر ارسال نمی‌شود | | - | `token` | **اضافه شد**: توکن احراز هویت DRF | | - | `user.avatar` | **اضافه شد**: URL تصویر پروفایل | ### URL ثابت دیگر از تنظیمات یا environment variable استفاده نمی‌شود. URL ثابت است: ``` https://imamjavad.newhorizonco.uk/join-class?token={TEMP_TOKEN}&slug={COURSE_SLUG} ``` ### مزایای تغییرات ✅ **Token واقعی**: دیگر نیازی به login مجدد نیست ✅ **Avatar**: نمایش تصویر پروفایل کاربر ✅ **Slug دوره**: دسترسی مستقیم به اطلاعات دوره ✅ **URL ثابت**: عدم وابستگی به تنظیمات ✅ **ساده‌تر**: حذف فیلدهای اضافی (role, is_admin) ### Migration Guide #### Frontend (Next.js) **قدیمی:** ```typescript const user = await api.exchangeToken(tempToken); localStorage.setItem('user', JSON.stringify(user)); ``` **جدید:** ```typescript const data = await exchangeToken(tempToken); localStorage.setItem('authToken', data.token); // ⭐ جدید localStorage.setItem('user', JSON.stringify(data.user)); ``` #### Flutter **قدیمی:** ```dart final user = response['user']; // نیاز به login مجدد داشت ``` **جدید:** ```dart final authToken = response['token']; // ⭐ جدید final user = response['user']; // ذخیره token برای درخواست‌های بعدی await storage.write(key: 'authToken', value: authToken); ``` ### Breaking Changes ⚠️ 1. **URL تغییر کرد**: باید از `/api/account/exchange-token/` استفاده شود 2. **فیلد `token` اجباری است**: باید در frontend ذخیره و استفاده شود 3. **فیلد `name` به `fullname` تغییر کرد** 4. **فیلدهای `role` و `is_admin` حذف شدند** 5. **URL موقت شامل `slug` می‌شود** ### تاریخ اعمال تغییرات تاریخ: **14 اکتبر 2024** ### فایل‌های تغییر یافته 1. `apps/account/serializers/auth.py` (جدید) 2. `apps/account/views/auth.py` (جدید) 3. `apps/account/urls.py` (آپدیت) 4. `apps/course/views/course.py` (آپدیت: CourseOnlineClassTokenAPIView) 5. `docs/exchange_token_api.md` (آپدیت) 6. `docs/online_class_entry_flow.md` (آپدیت)