7.1 KiB
راهنمای استفاده از endpoint های ورود به کلاس آنلاین
این فایل برای تیمهای frontend و flutter نوشته شده و فقط توضیح میدهد:
- هر endpoint چه کاری انجام میدهد
- در چه شرایطی باید از آن استفاده شود
- ترتیب درست استفاده از endpoint ها چیست
این راهنما وارد کدنویسی React یا Flutter نمیشود و فقط منطق استفاده را توضیح میدهد.
هدف کلی
کاربر برای ورود به کلاس آنلاین دو حالت دارد:
- کلاس هنوز توسط استاد شروع نشده است
- کلاس از قبل شروع شده و room فعال است
رفتار درست فرانت باید بر اساس همین دو حالت تعیین شود.
اصل مهم
فرانت نباید با درخواست اشتباه باعث ساختن کلاس توسط دانشجو شود.
بنابراین:
- اگر کلاس شروع نشده باشد، کاربر باید وارد
waiting pageشود - اگر کلاس شروع شده باشد، کاربر باید مستقیم
join tokenواقعی بگیرد و وارد کلاس شود
endpoint ها
1. بررسی وضعیت کلاس
Endpoint
GET /api/courses/<course-slug>/online/validate/
کاربرد
این endpoint برای تصمیمگیری اولیه فرانت است.
با این endpoint میتوان فهمید:
- آیا کلاس الان آنلاین است یا نه
- آیا کاربر اجازه ورود به کلاس را دارد یا نه
- آیا کاربر استاد است و میتواند کلاس را شروع کند یا نه
خروجی مهم
فیلدهای مهم در metadata:
is_onlinecan_join_live_sessioncan_create_live_sessionhas_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- هدر احراز هویت کاربر
بدنه عملا میتواند خالی باشد.
خروجی
پاسخ شامل این فیلدهاست:
tokenurlexpires_in
3. گرفتن join token واقعی برای ورود مستقیم به کلاس
Endpoint
POST /api/courses/online/room/token/
کاربرد
این endpoint access_token واقعی PlugNMeet را میسازد.
با این token کاربر مستقیم وارد کلاس میشود.
چه زمانی باید استفاده شود
وقتی که کلاس از قبل شروع شده و room فعال است.
چه زمانی نباید استفاده شود
وقتی هنوز کلاس شروع نشده است.
در آن حالت این endpoint مسیر مناسب ورود نیست و باید از waiting flow استفاده شود.
ورودی
بدنه:
course_slug
به همراه هدر احراز هویت کاربر
خروجی
پاسخ شامل:
room_idtoken
رفتار درست بعد از دریافت پاسخ
کاربر باید مستقیم به conference_client با access_token هدایت شود.
مثال:
https://meet.imamjavad.online/?access_token=<access_token>
ترتیب درست استفاده در فرانت
سناریو 1: کاربر روی دکمه ورود به کلاس میزند
ترتیب درست:
- فرانت وضعیت کلاس را با
online/validateبررسی کند - اگر کلاس فعال بود:
online/room/token/- هدایت مستقیم با
access_token
- اگر کلاس فعال نبود:
online/token/- هدایت کاربر به waiting page
منطق تصمیمگیری پیشنهادی
-
is_online = trueمسیر درست: ورود مستقیم به کلاس -
is_online = falseمسیر درست: waiting page
رفتار داخل conference_client
conference_client الان دو ورودی را میفهمد:
حالت اول: ورود مستقیم
اگر URL شامل این باشد:
access_token
کاربر مستقیم وارد flow اصلی کلاس میشود.
حالت دوم: waiting flow
اگر URL شامل این باشد:
tokenslug
کاربر وارد waiting/pre-join flow میشود.
در این حالت:
- temporary token به auth token واقعی تبدیل میشود
- وضعیت کلاس از Django خوانده میشود
- اگر کلاس هنوز شروع نشده باشد، waiting page نمایش داده میشود
- اگر کلاس شروع شده باشد، دکمه ورود به کلاس نمایش داده میشود
- اگر کاربر استاد باشد و کلاس شروع نشده باشد، دکمه شروع کلاس نمایش داده میشود
آپدیت خودکار وضعیت
در waiting flow، وضعیت کلاس به صورت polling دورهای از Django بررسی میشود.
بنابراین:
- اگر استاد کلاس را شروع کند، صفحه انتظار بهروزرسانی میشود
- اگر استاد کلاس را ببندد، وضعیت صفحه دوباره به حالت انتظار/پایان بازمیگردد
جمعبندی نهایی
برای فرانت اصلی سایت یا اپ
- ابتدا همیشه
online/validate - اگر کلاس فعال بود:
online/room/token/ - اگر کلاس فعال نبود:
online/token/
برای conference_client
- اگر
access_tokenداشت: ورود مستقیم - اگر
token + slugداشت: waiting flow
قاعده مهم
online/token/ برای قبل از شروع کلاس است
online/room/token/ برای وقتی است که کلاس واقعا شروع شده است