3 changed files with 254 additions and 3 deletions
@ -0,0 +1,237 @@ |
|||||
|
# راهنمای استفاده از endpoint های ورود به کلاس آنلاین |
||||
|
|
||||
|
این فایل برای تیمهای `frontend` و `flutter` نوشته شده و فقط توضیح میدهد: |
||||
|
|
||||
|
- هر endpoint چه کاری انجام میدهد |
||||
|
- در چه شرایطی باید از آن استفاده شود |
||||
|
- ترتیب درست استفاده از endpoint ها چیست |
||||
|
|
||||
|
این راهنما وارد کدنویسی React یا Flutter نمیشود و فقط منطق استفاده را توضیح میدهد. |
||||
|
|
||||
|
## هدف کلی |
||||
|
|
||||
|
کاربر برای ورود به کلاس آنلاین دو حالت دارد: |
||||
|
|
||||
|
1. کلاس هنوز توسط استاد شروع نشده است |
||||
|
2. کلاس از قبل شروع شده و room فعال است |
||||
|
|
||||
|
رفتار درست فرانت باید بر اساس همین دو حالت تعیین شود. |
||||
|
|
||||
|
## اصل مهم |
||||
|
|
||||
|
فرانت نباید با درخواست اشتباه باعث ساختن کلاس توسط دانشجو شود. |
||||
|
|
||||
|
بنابراین: |
||||
|
|
||||
|
- اگر کلاس شروع نشده باشد، کاربر باید وارد `waiting page` شود |
||||
|
- اگر کلاس شروع شده باشد، کاربر باید مستقیم `join token` واقعی بگیرد و وارد کلاس شود |
||||
|
|
||||
|
## endpoint ها |
||||
|
|
||||
|
### 1. بررسی وضعیت کلاس |
||||
|
|
||||
|
#### Endpoint |
||||
|
|
||||
|
`GET /api/courses/<course-slug>/online/validate/` |
||||
|
|
||||
|
#### کاربرد |
||||
|
|
||||
|
این endpoint برای تصمیمگیری اولیه فرانت است. |
||||
|
|
||||
|
با این endpoint میتوان فهمید: |
||||
|
|
||||
|
- آیا کلاس الان آنلاین است یا نه |
||||
|
- آیا کاربر اجازه ورود به کلاس را دارد یا نه |
||||
|
- آیا کاربر استاد است و میتواند کلاس را شروع کند یا نه |
||||
|
|
||||
|
#### خروجی مهم |
||||
|
|
||||
|
فیلدهای مهم در `metadata`: |
||||
|
|
||||
|
- `is_online` |
||||
|
- `can_join_live_session` |
||||
|
- `can_create_live_session` |
||||
|
- `has_finished` |
||||
|
|
||||
|
#### زمان استفاده |
||||
|
|
||||
|
این endpoint باید قبل از تصمیم نهایی برای ورود به کلاس صدا زده شود. |
||||
|
|
||||
|
#### تصمیمگیری بر اساس پاسخ |
||||
|
|
||||
|
- اگر `is_online = true` و `can_join_live_session = true` |
||||
|
فرانت باید مستقیم به سراغ گرفتن `join token` واقعی برود |
||||
|
|
||||
|
- اگر `is_online = false` |
||||
|
فرانت نباید مستقیم سراغ `room/token` برود و باید از flow صفحه انتظار استفاده کند |
||||
|
|
||||
|
- اگر `can_create_live_session = true` |
||||
|
کاربر استاد است و فرانت باید مستقیم به سراغ گرفتن `join token` واقعی برود |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### 2. ساخت لینک ورود موقت برای waiting page |
||||
|
|
||||
|
#### Endpoint |
||||
|
|
||||
|
`POST /api/courses/<course_id>/online/token/` |
||||
|
|
||||
|
#### کاربرد |
||||
|
|
||||
|
این endpoint برای ورود به waiting flow استفاده میشود. |
||||
|
|
||||
|
این endpoint: |
||||
|
|
||||
|
- یک `temporary token` میسازد |
||||
|
- یک URL ورود به `conference_client` برمیگرداند |
||||
|
|
||||
|
#### چه زمانی باید استفاده شود |
||||
|
|
||||
|
فقط وقتی که کلاس هنوز شروع نشده است. |
||||
|
|
||||
|
#### چه زمانی نباید استفاده شود |
||||
|
|
||||
|
اگر کلاس از قبل شروع شده و room فعال است، نباید این endpoint مسیر اصلی ورود باشد. |
||||
|
|
||||
|
در آن حالت باید مستقیم `join token` واقعی گرفته شود. |
||||
|
|
||||
|
#### ورودی |
||||
|
|
||||
|
- `course_id` در URL |
||||
|
- هدر احراز هویت کاربر |
||||
|
|
||||
|
بدنه عملا میتواند خالی باشد. |
||||
|
|
||||
|
#### خروجی |
||||
|
|
||||
|
پاسخ شامل این فیلدهاست: |
||||
|
|
||||
|
- `token` |
||||
|
- `url` |
||||
|
- `expires_in` |
||||
|
|
||||
|
|
||||
|
### 3. گرفتن join token واقعی برای ورود مستقیم به کلاس |
||||
|
|
||||
|
#### Endpoint |
||||
|
|
||||
|
`POST /api/courses/online/room/token/` |
||||
|
|
||||
|
#### کاربرد |
||||
|
|
||||
|
این endpoint `access_token` واقعی PlugNMeet را میسازد. |
||||
|
|
||||
|
با این token کاربر مستقیم وارد کلاس میشود. |
||||
|
|
||||
|
#### چه زمانی باید استفاده شود |
||||
|
|
||||
|
وقتی که کلاس از قبل شروع شده و room فعال است. |
||||
|
|
||||
|
#### چه زمانی نباید استفاده شود |
||||
|
|
||||
|
وقتی هنوز کلاس شروع نشده است. |
||||
|
|
||||
|
در آن حالت این endpoint مسیر مناسب ورود نیست و باید از waiting flow استفاده شود. |
||||
|
|
||||
|
#### ورودی |
||||
|
|
||||
|
بدنه: |
||||
|
|
||||
|
`course_slug` |
||||
|
|
||||
|
به همراه هدر احراز هویت کاربر |
||||
|
|
||||
|
#### خروجی |
||||
|
|
||||
|
پاسخ شامل: |
||||
|
|
||||
|
- `room_id` |
||||
|
- `token` |
||||
|
|
||||
|
#### رفتار درست بعد از دریافت پاسخ |
||||
|
|
||||
|
کاربر باید مستقیم به `conference_client` با `access_token` هدایت شود. |
||||
|
|
||||
|
مثال: |
||||
|
|
||||
|
`https://meet.imamjavad.online/?access_token=<access_token>` |
||||
|
|
||||
|
|
||||
|
## ترتیب درست استفاده در فرانت |
||||
|
|
||||
|
### سناریو 1: کاربر روی دکمه ورود به کلاس میزند |
||||
|
|
||||
|
ترتیب درست: |
||||
|
|
||||
|
1. فرانت وضعیت کلاس را با `online/validate` بررسی کند |
||||
|
2. اگر کلاس فعال بود: |
||||
|
- `online/room/token/` |
||||
|
- هدایت مستقیم با `access_token` |
||||
|
3. اگر کلاس فعال نبود: |
||||
|
- `online/token/` |
||||
|
- هدایت کاربر به waiting page |
||||
|
|
||||
|
## منطق تصمیمگیری پیشنهادی |
||||
|
|
||||
|
- `is_online = true` |
||||
|
مسیر درست: ورود مستقیم به کلاس |
||||
|
|
||||
|
- `is_online = false` |
||||
|
مسیر درست: waiting page |
||||
|
|
||||
|
## رفتار داخل conference_client |
||||
|
|
||||
|
`conference_client` الان دو ورودی را میفهمد: |
||||
|
|
||||
|
### حالت اول: ورود مستقیم |
||||
|
|
||||
|
اگر URL شامل این باشد: |
||||
|
|
||||
|
- `access_token` |
||||
|
|
||||
|
کاربر مستقیم وارد flow اصلی کلاس میشود. |
||||
|
|
||||
|
### حالت دوم: waiting flow |
||||
|
|
||||
|
اگر URL شامل این باشد: |
||||
|
|
||||
|
- `token` |
||||
|
- `slug` |
||||
|
|
||||
|
کاربر وارد waiting/pre-join flow میشود. |
||||
|
|
||||
|
در این حالت: |
||||
|
|
||||
|
1. temporary token به auth token واقعی تبدیل میشود |
||||
|
2. وضعیت کلاس از Django خوانده میشود |
||||
|
3. اگر کلاس هنوز شروع نشده باشد، waiting page نمایش داده میشود |
||||
|
4. اگر کلاس شروع شده باشد، دکمه ورود به کلاس نمایش داده میشود |
||||
|
5. اگر کاربر استاد باشد و کلاس شروع نشده باشد، دکمه شروع کلاس نمایش داده میشود |
||||
|
|
||||
|
## آپدیت خودکار وضعیت |
||||
|
|
||||
|
در waiting flow، وضعیت کلاس به صورت polling دورهای از Django بررسی میشود. |
||||
|
|
||||
|
بنابراین: |
||||
|
|
||||
|
- اگر استاد کلاس را شروع کند، صفحه انتظار بهروزرسانی میشود |
||||
|
- اگر استاد کلاس را ببندد، وضعیت صفحه دوباره به حالت انتظار/پایان بازمیگردد |
||||
|
|
||||
|
## جمعبندی نهایی |
||||
|
|
||||
|
### برای فرانت اصلی سایت یا اپ |
||||
|
|
||||
|
- ابتدا همیشه `online/validate` |
||||
|
- اگر کلاس فعال بود: `online/room/token/` |
||||
|
- اگر کلاس فعال نبود: `online/token/` |
||||
|
|
||||
|
### برای conference_client |
||||
|
|
||||
|
- اگر `access_token` داشت: ورود مستقیم |
||||
|
- اگر `token + slug` داشت: waiting flow |
||||
|
|
||||
|
### قاعده مهم |
||||
|
|
||||
|
`online/token/` برای قبل از شروع کلاس است |
||||
|
|
||||
|
`online/room/token/` برای وقتی است که کلاس واقعا شروع شده است |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue