# POST /v2/academy/course/steps/update

# Academy: Update / Store / Delete Course Steps

این اندپوینت سه عملیات روی مراحل دوره (Course Steps) انجام می‌دهد: ایجاد (store)، ویرایش (update) و حذف (delete). نوع عملیات از طریق پارامتر `action` مشخص می‌شود. همه عملیات‌ها روی جدول `academy_course_steps` انجام می‌شود و در صورت خطا، پاسخ استاندارد شامل پیام خطا بازگردانده می‌شود.

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Facademy%2Fcou"><div class="endpoint-info"><div>**URL:** `/v2/academy/course/steps/update`</div><div>**Method:** <span class="method-post">POST</span></div><div>**Controller:** AcademyController@updateStepsCourse</div><div>**Middleware:** authWithJwt</div><div>**Auth:** JWT Required</div></div></div>## Body Parameters

<div class="api-docs" id="bkmrk-field-type-required-"><div class="table-wrapper"><table><thead><tr><th>Field</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>action</td><td>string</td><td>yes</td><td>مشخص‌کننده عملیات. یکی از مقادیر: **update**، **store**، **delete**.</td></tr><tr><td>data.course</td><td>integer</td><td>yes (store/update)</td><td>شناسه دوره</td></tr><tr><td>data.step\_id</td><td>integer</td><td>yes (update/delete)</td><td>شناسه مرحله</td></tr><tr><td>data.title\_fa</td><td>string</td><td>yes (store/update)</td><td>عنوان فارسی مرحله</td></tr><tr><td>data.title\_en</td><td>string | null</td><td>no</td><td>اگر رشته خالی ارسال شود → مقدار `null` ذخیره می‌شود (دقیقاً مطابق کد).</td></tr><tr><td>data.subtitle\_fa</td><td>string</td><td>yes</td><td>زیرعنوان فارسی</td></tr><tr><td>data.subtitle\_en</td><td>string | null</td><td>no</td><td>اگر رشته خالی باشد تبدیل به null می‌شود.</td></tr><tr><td>data.content</td><td>string</td><td>yes</td><td>محتوای مرحله (HTML یا Markdown)</td></tr><tr><td>data.order</td><td>integer</td><td>yes</td><td>ترتیب مرحله در دوره</td></tr></tbody></table>

</div></div>## Controller Logic

```
action = $request->get('action');
data = $request->data;

try {

  // ---------- UPDATE ----------
  if (action == 'update') {
      update academy_course_steps where id = data['step_id']
      set:
        course = data['course']
        title_fa = data['title_fa']
        title_en = data['title_en'] == '' ? null : data['title_en']
        subtitle_fa = data['subtitle_fa']
        subtitle_en = data['subtitle_en'] == '' ? null : data['subtitle_en']
        content = data['content']
        order = data['order']
        updated_at = now()

      return status=true, time

  // ---------- STORE ----------
  } else if (action == 'store') {
      insert into academy_course_steps:
        course = data['course']
        title_fa = data['title_fa']
        title_en = data['title_en'] == '' ? null : data['title_en']
        subtitle_fa = data['subtitle_fa']
        subtitle_en = data['subtitle_en'] == '' ? null : data['subtitle_en']
        content = data['content']
        order = data['order']
        created_at = now()
        updated_at = now()

      return status=true, time

  // ---------- DELETE ----------
  } else if (action == 'delete') {
      delete from academy_course_steps where id = data['step_id']
      return status=true, time
  }

} catch (Exception $e) {
    return status=false, time, message=$e->getMessage();
}
  
```

<div class="api-docs" id="bkmrk-"></div>## Important Notes

<div class="api-docs" id="bkmrk-%D9%87%D8%B1-%D8%B3%D9%87-%D8%B9%D9%85%D9%84%DB%8C%D8%A7%D8%AA-%D8%AE%D8%B1%D9%88%D8%AC%DB%8C-%DB%8C">- هر سه عملیات خروجی یکسان دارند: `{"status": true, "time": ...}`
- رشته‌های خالی `""` در فیلدهای `title_en` و `subtitle_en` به `null` تبدیل می‌شوند.
- عملیات حذف، Soft Delete نیست — رکورد کاملاً حذف می‌شود.
- در صورت بروز Exception، پیام خطا همان مقدار واقعی Exception بازگردانی می‌شود.

</div>## Example Requests

### 1. Update Step

```
POST /v2/academy/course/steps/update
{
  "action": "update",
  "data": {
    "step_id": 12,
    "course": 4,
    "title_fa": "ویرایش شده",
    "title_en": "",
    "subtitle_fa": "ساب جدید",
    "subtitle_en": "",
    "content": "
```

New HTML

```
",
    "order": 3
  }
}
  
```

### 2. Store New Step

```
POST /v2/academy/course/steps/update
{
  "action": "store",
  "data": {
    "course": 4,
    "title_fa": "مرحله جدید",
    "title_en": "New Step",
    "subtitle_fa": "ساب",
    "subtitle_en": "",
    "content": "
```

Hello

```
",
    "order": 5
  }
}
  
```

### 3. Delete Step

```
POST /v2/academy/course/steps/update
{
  "action": "delete",
  "data": {
    "step_id": 12
  }
}
  
```

<div class="api-docs" id="bkmrk--1"></div>## Flowchart

<div class="api-docs" id="bkmrk-validate-jwt-%E2%86%93-read-"><div class="flowchart"><div class="flow-item">Validate JWT</div><div class="flow-arrow">↓</div><div class="flow-item">Read action (update / store / delete)</div><div class="flow-arrow">↓</div><div class="flow-item">Run respective DB query</div><div class="flow-arrow">↓</div><div class="flow-item">Return status=true | handle exception</div></div></div>