Update Lesson

Оновлення існуючого уроку. Підтримує часткове оновлення (PATCH) та повне оновлення (PUT).

Endpoint

PUT /api/v1/lessons/{id}/
PATCH /api/v1/lessons/{id}/

Authentication

Required: Yes (Token Authentication)

Path Parameters

Parameter Type Required Description
id integer Yes ID уроку для оновлення

Request Body

Всі поля опціональні. Якщо поле не вказано, воно залишається без змін.

{
  "booking_number": "HMS-12345-UPDATED",
  "description": "Оновлений опис уроку",
  "start_datetime": "2025-11-05T10:00:00Z",
  "end_datetime": "2025-11-05T16:00:00Z",
  "instructor_name": "Ольга Сергіївна",
  "location": "Буковель-2",
  "status": "completed",
  "participants": [
    {
      "customer": {
        "name": "Іван",
        "surname": "Петренко",
        "phone_number": "+380501234567",
        "email_adress": "ivan@example.com"
      },
      "skipasses": [
        {
          "skipass_number": "12-2323-2323231",
          "valid_from": "2025-11-05T10:00:00Z",
          "valid_until": "2025-11-05T13:00:00Z",
          "skipass_type": "3-годинний",
          "skipass_price": 100.00,
          "skipass_category": "Дорослий",
          "notes": "Оновлений скіпас"
        }
      ]
    }
  ]
}

Request Parameters

Parameter Type Required Description
booking_number string No Номер бронювання
description string No Опис уроку
start_datetime datetime No Початок уроку (ISO 8601)
end_datetime datetime No Закінчення уроку (ISO 8601)
instructor_name string No Ім'я інструктора
location string No Локація проведення
status string No Статус: active, cancelled, completed
participants array No Список учасників (якщо вказано, замінює всіх існуючих)

Participant Object

Parameter Type Required Description
customer object Yes Дані клієнта
skipasses array Yes Список скіпасів учасника

Customer Object

Parameter Type Required Description
name string Yes Ім'я
surname string Yes Прізвище
phone_number string Yes Телефон (унікальний)
email_adress string No Email

Skipass Object

Parameter Type Required Description
skipass_number string Yes Номер скіпасу
valid_from datetime No Початок дії скіпасу
valid_until datetime No Закінчення дії скіпасу
skipass_type string No Тип скіпасу
skipass_price decimal No Ціна скіпасу
skipass_category string No Категорія скіпасу
notes string No Примітки

Response

Success Response (200 OK)

{
  "status": "success",
  "lesson_id": 123,
  "lesson": {
    "id": 123,
    "booking_number": "HMS-12345-UPDATED",
    "description": "Оновлений опис уроку",
    "start_datetime": "2025-11-05T10:00:00Z",
    "end_datetime": "2025-11-05T16:00:00Z",
    "instructor_name": "Ольга Сергіївна",
    "location": "Буковель-2",
    "status": "completed",
    "customers": [
      {
        "id": 456,
        "name": "Іван",
        "surname": "Петренко",
        "phone_number": "+380501234567",
        "email_adress": "ivan@example.com"
      }
    ],
    "skipasses": [
      {
        "id": 789,
        "customer": {
          "id": 456,
          "name": "Іван",
          "surname": "Петренко",
          "phone_number": "+380501234567",
          "email_adress": "ivan@example.com"
        },
        "skipass_number": "12-2323-2323231",
        "source_system": "lesson",
        "source_name": "Лижна школа",
        "valid_from": "2025-11-05T10:00:00Z",
        "valid_until": "2025-11-05T13:00:00Z",
        "skipass_type": "3-годинний",
        "skipass_price": "100.00",
        "skipass_category": "Дорослий",
        "notes": "Оновлений скіпас",
        "created_at": "2025-11-03T12:00:00Z"
      }
    ],
    "customers_count": 1,
    "skipasses_count": 1,
    "created_at": "2025-11-03T12:00:00Z",
    "updated_at": "2025-11-05T14:30:00Z"
  }
}

Error Response (400 BAD REQUEST)

{
  "status": "error",
  "message": "Lesson ID is required"
}

Error Response (404 NOT FOUND)

{
  "status": "error",
  "message": "Lesson not found"
}

Notes

  • Часткове оновлення: Якщо поле не вказано, воно залишається без змін
  • Оновлення учасників: Якщо вказано поле participants, всі старі учасники та їх скіпаси видаляються і створюються нові
  • Збереження клієнтів: Якщо клієнт з таким phone_number вже існує, використовується існуючий запис
  • Транзакційність: Всі зміни виконуються в транзакції - або все оновлюється, або нічого
  • Статус уроку: Можна змінити статус на completed або cancelled після завершення

Example cURL

Часткове оновлення (змінити тільки статус)

curl -X PUT "https://bukovelvipentry.breport.site/api/v1/lessons/123/" \
  -H "Authorization: Token YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "completed"
  }'

Повне оновлення з новими учасниками

curl -X PUT "https://bukovelvipentry.breport.site/api/v1/lessons/123/" \
  -H "Authorization: Token YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "booking_number": "HMS-12345-UPDATED",
    "description": "Оновлений урок",
    "start_datetime": "2025-11-05T10:00:00Z",
    "end_datetime": "2025-11-05T16:00:00Z",
    "instructor_name": "Ольга Сергіївна",
    "location": "Буковель-2",
    "status": "active",
    "participants": [
      {
        "customer": {
          "name": "Іван",
          "surname": "Петренко",
          "phone_number": "+380501234567"
        },
        "skipasses": [
          {
            "skipass_number": "12-2323-2323231"
          }
        ]
      }
    ]
  }'