Create Lesson

Створення нового уроку з учасниками та скіпасами.

Endpoint

POST /api/v1/lessons/

Authentication

Required: Yes (Token Authentication)

Request Body

{
  "booking_number": "HMS-12345",
  "description": "Індивідуальний урок для сім'ї (6 годин)",
  "start_datetime": "2025-11-05T09:00:00Z",
  "end_datetime": "2025-11-05T15:00:00Z",
  "instructor_name": "Петро Іванович",
  "location": "Буковель-1",
  "status": "active",
  "participants": [
    {
      "customer": {
        "name": "Іван",
        "surname": "Петренко",
        "phone_number": "+380501234567",
        "email_adress": "ivan@example.com"
      },
      "notes": "Досвідчений лижник",
      "skipasses": [
        {
          "skipass_number": "12-2323-2323231",
          "valid_from": "2025-11-05T09:00:00Z",
          "valid_until": "2025-11-05T12:00:00Z",
          "skipass_type": "3-годинний",
          "skipass_price": 100.00,
          "skipass_category": "Дорослий",
          "notes": "Перша половина дня"
        },
        {
          "skipass_number": "12-2323-2323232",
          "valid_from": "2025-11-05T12:00:00Z",
          "valid_until": "2025-11-05T15:00:00Z",
          "skipass_type": "3-годинний",
          "skipass_price": 100.00,
          "skipass_category": "Дорослий",
          "notes": "Друга половина дня"
        }
      ]
    },
    {
      "customer": {
        "name": "Марія",
        "surname": "Петренко",
        "phone_number": "+380501234568",
        "email_adress": "maria@example.com"
      },
      "notes": "Початківець",
      "skipasses": [
        {
          "skipass_number": "12-2323-2323233",
          "valid_from": "2025-11-05T09:00:00Z",
          "valid_until": "2025-11-05T15:00:00Z",
          "skipass_type": "6-годинний",
          "skipass_price": 180.00,
          "skipass_category": "Дорослий",
          "notes": "Повний день"
        }
      ]
    }
  ]
}

Request Parameters

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

Participant Object

Parameter Type Required Description
customer object Yes Дані клієнта
notes string No Примітки про учасника
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 Тип: "3-годинний", "6-годинний"
skipass_price decimal No Ціна скіпасу
skipass_category string No Категорія: "Дорослий", "Дитячий"
notes string No Примітки

Response

Success Response (201 CREATED)

{
  "status": "success",
  "lesson_id": 123,
  "lesson": {
    "id": 123,
    "booking_number": "HMS-12345",
    "description": "Індивідуальний урок для сім'ї (6 годин)",
    "start_datetime": "2025-11-05T09:00:00Z",
    "end_datetime": "2025-11-05T15:00:00Z",
    "instructor_name": "Петро Іванович",
    "location": "Буковель-1",
    "status": "active",
    "participants": [
      {
        "id": 456,
        "customer": {
          "name": "Іван",
          "surname": "Петренко",
          "phone_number": "+380501234567",
          "email_adress": "ivan@example.com"
        },
        "notes": "Досвідчений лижник",
        "skipasses": [
          {
            "id": 789,
            "skipass_number": "12-2323-2323231",
            "valid_from": "2025-11-05T09:00:00Z",
            "valid_until": "2025-11-05T12:00:00Z",
            "skipass_type": "3-годинний",
            "skipass_price": "100.00",
            "skipass_category": "Дорослий",
            "notes": "Перша половина дня"
          }
        ]
      }
    ],
    "created_at": "2025-11-03T12:00:00Z",
    "updated_at": "2025-11-03T12:00:00Z"
  }
}

Error Response (400 BAD REQUEST)

{
  "status": "error",
  "message": "Missing required field: 'booking_number'"
}

Notes

  • Якщо customer з таким phone_number вже існує, буде використаний існуючий запис
  • У одного учасника може бути кілька скіпасів (наприклад, 2×3год для 6-годинного уроку)
  • Якщо valid_from/valid_until не вказані, валідація буде відбуватись по часу уроку
  • Всі дати в форматі ISO 8601 (UTC)

Example cURL

curl -X POST "https://bukovelvipentry.breport.site/api/v1/lessons/" \
  -H "Authorization: Token YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "booking_number": "HMS-12345",
    "start_datetime": "2025-11-05T09:00:00Z",
    "end_datetime": "2025-11-05T15:00:00Z",
    "participants": [
      {
        "customer": {
          "name": "Іван",
          "surname": "Петренко",
          "phone_number": "+380501234567"
        },
        "skipasses": [
          {
            "skipass_number": "12-2323-2323231"
          }
        ]
      }
    ]
  }'