#P1693
GET /v2/academy/courses/view
Academy: View Courses
این اندپوینت لیست دورههای آموزشی آکادمی را با امکان فیلتر بر اساس دستهبندی بازمیگرداند. دادهها شامل اطلاعات کامل دوره، اطلاعات دستهبندی مرتبط، وضعیت کاربر در دوره (progress)، تعداد کل مراحل و وضعیت نمایش (featured) است. تنها دورههایی که وضعیت آنها 1 یا 3 باشد در خروجی قرار میگیرند.
URL:
/v2/academy/courses/viewMethod: GET
Controller: AcademyController@viewCourses
Middleware: authWithJwt
Auth: JWT Required
Filter:
?category_id= (optional)Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| category_id | integer | no | اگر ارسال شود فقط دورههای مربوط به آن دستهبندی نمایش داده میشوند |
Controller Logic
// Filter: category_id (optional)
// Only show courses with status IN (1,3)
// Join with academy_categories for category details
// For each course: find progress, total steps, progress completed
$resultCourses = DB::table('academy_courses')
->select([...])
->where(function ($q) use ($request) {
if ($request->has('category_id') && $request->get('category_id')) {
$q->where('academy_courses.category', $request->get('category_id'));
}
})
->whereIn("academy_courses.status", [1, 3])
->leftJoin("academy_categories", "academy_categories.id", "academy_courses.category")
->get();
foreach ($resultCourses as $course) {
$resultCompleted = DB::table('academy_course_completed')
->select('completed', 'current_step')
->where('course', $course->id)
->where('student', $request->get('operator')->id)
->first();
if (!$resultCompleted) {
$stepCompleted = 0;
$currentStep = 1;
} else {
$stepCompleted = $resultCompleted->completed;
$currentStep = $resultCompleted->current_step;
}
$courseCount = DB::table('academy_course_steps')
->where('course', $course->id)
->count();
$courses[] = [
"id" => $course->id,
"slug" => $course->slug,
"branch" => !is_null($course->branch) ? $course->branch : false,
"price" => !is_null($course->price) ? $course->price : 'free',
"necessary" => !is_null($course->necessary) ? json_decode($course->necessary) : false,
"title" => [...],
"category" => [...],
"progress" => [
"current_step" => (int)$currentStep,
"completed" => (int)$stepCompleted
],
"duration" => $course->duration,
"total_steps" => $courseCount,
"featured" => $course->featured,
"description" => $course->description,
"status" => $course->status,
"created_at" => $course->created_at,
"updated_at" => $course->updated_at
];
}
return [
"status" => true,
"time" => time(),
"data" => $courses
];
Course Object Structure
| Field | Type | Description |
|---|---|---|
| id | integer | شناسه دوره |
| slug | string | اسلاگ یکتا |
| branch | integer | false | شناسه شعبه یا false اگر مقدار نداشته باشد |
| price | integer | "free" | قیمت دوره یا "free" اگر مقدار نداشته باشد |
| necessary | array | false | پیشنیازهای دوره (json_decode) یا false |
| title.fa | string | عنوان فارسی دوره |
| title.en | string | عنوان انگلیسی دوره |
| category.* | object | اطلاعات کامل دستهبندی مرتبط |
| progress.current_step | integer | مرحله فعلی کاربر در دوره |
| progress.completed | integer | تعداد مراحل تکمیلشده توسط کاربر |
| duration | integer | مدت زمان دوره (به واحد دقیقه) |
| total_steps | integer | تعداد کل مراحل دوره |
| featured | integer (0/1) | وضعیت برجسته بودن دوره |
| description | string | توضیحات دوره |
| status | integer | 1 یا 3 (فعال / نمایشی) |
| created_at | datetime | تاریخ ایجاد |
| updated_at | datetime | تاریخ بهروزرسانی |
Example Response
Status: 200 OK
{
"status": true,
"time": 1730000000,
"data": [
{
"id": 21,
"slug": "advanced-react",
"branch": false,
"price": "free",
"necessary": false,
"title": {
"fa": "ریاکت پیشرفته",
"en": "Advanced React"
},
"category": { ... },
"progress": { "current_step": 1, "completed": 0 },
"duration": 180,
"total_steps": 12,
"featured": 1,
"description": "دوره کامل React برای توسعهدهندگان پیشرفته",
"status": 1,
"created_at": "2024-04-02 11:30:00",
"updated_at": "2024-04-20 19:12:00"
}
]
}
Flowchart
Validate JWT (operator loaded)
↓
Check optional category_id
↓
Query academy_courses WHERE status IN (1,3)
↓
LEFT JOIN academy_categories
↓
Loop → Fetch course progress (completed/current_step)
↓
Count total_steps from academy_course_steps
↓
Build final structured course object
↓
Return status=true + time + data[]