You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.2 KiB
3.2 KiB
Online Class Entry Scenario
1. دریافت توکن ورود به کلاس آنلاین
- هدف: کاربر لاگینشده لینک ورود موقت به کلاس بگیرد.
- درخواست:
POST /api/courses/{course_id}/online/token/به همراه توکن احراز هویت کاربر. - ورودی اختیاری:
redirect_path(مسیر نسبی در فرانت برای صفحه کلاس). - خروجی: توکن یکبارمصرف ذخیرهشده در Redis + آدرس نهایی ورود (دامنه فرانت + Query Param توکن).
نمونه curl
curl --request POST \
--url https://api.example.com/api/courses/42/online/token/ \
--header 'Authorization: Token USER_AUTH_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"redirect_path": "online-classroom"
}'
نمونه پاسخ
{
"token": "5f7b8c...e1",
"url": "https://front.example.com/online-classroom?token=5f7b8c...e1",
"expires_in": 300
}
2. اعتبارسنجی توکن و دریافت دادههای کلاس
- هدف: فرانت با توکن دریافتی اطلاعات کلاس، پروفایل کاربر و متادیتا را بگیرد.
- درخواست:
POST /api/courses/online/token/validate/ - ورودی:
token - خروجی: آبجکت دوره (سریالایز کامل)، پروفایل کاربر، و متادیتا شامل وضعیت کلاس، زمانها و وضعیت حضور استاد.
نمونه curl
curl --request POST \
--url https://api.example.com/api/courses/online/token/validate/ \
--header 'Content-Type: application/json' \
--data '{
"token": "5f7b8c...e1"
}'
نمونه پاسخ
{
"course": {
"id": 42,
"title": "درس اخلاق",
"status": "ongoing",
"timing": {
"monday": "18:00",
"wednesday": "18:00"
},
"online_link": "https://meeting.example.com/class/42",
"is_online": true,
"professor": {
"id": 7,
"fullname": "استاد رضایی"
}
},
"user": {
"id": 105,
"fullname": "علی احمدی",
"email": "ali@example.com"
},
"metadata": {
"status": "ongoing",
"is_online": true,
"has_started": true,
"has_finished": false,
"professor_in_class": false,
"scheduled_times": {
"monday": "18:00",
"wednesday": "18:00"
},
"generated_at": "2024-10-05T10:15:30Z",
"validated_at": "2024-10-05T10:16:05.123456Z"
}
}
نکات پیادهسازی در فرانتاند
- پس از دریافت پاسخ مرحلهٔ اول، کاربر را به
urlبازگردانی کنید. - در صفحه کلاس، توکن از Query String خوانده شده و به مرحلهٔ دوم ارسال شود.
- در صورت خطا (Expiry یا Invalid)، فرانت باید کاربر را به صفحهٔ اصلی یا خطا هدایت کند و درخواست توکن جدید بدهد.
expires_inنشان میدهد لینک چه مدت اعتبار دارد؛ بهتر است شمارش معکوس یا تلاش خودکار برای تمدید توکن داشته باشید.