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"
}
]
}
]
}'