Skip to main content
#P1693

GET /v2/academy/courses/view

Academy: View Courses

این اندپوینت لیست دوره‌های آموزشی آکادمی را با امکان فیلتر بر اساس دسته‌بندی بازمی‌گرداند. داده‌ها شامل اطلاعات کامل دوره، اطلاعات دسته‌بندی مرتبط، وضعیت کاربر در دوره (progress)، تعداد کل مراحل و وضعیت نمایش (featured) است. تنها دوره‌هایی که وضعیت آن‌ها 1 یا 3 باشد در خروجی قرار می‌گیرند.

URL: /v2/academy/courses/view
Method: 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[]