1. Модели данных
Услуга (Service):
{
"id": "uuid",
"name": "SPA-массаж",
"description": "Расслабляющий массаж с аромамаслами",
"duration": 90,
"price": 2500,
"category": "relax"
}
Мастер (Master):
{
"id": "uuid",
"name": "Иванова Анна",
"specialization": ["SPA", "антистресс"],
"schedule": {
"monday": ["10:00-18:00"],
"tuesday": ["12:00-20:00"]
},
"rating": 4.9
}
Клиент (Client):
{
"id": "uuid",
"name": "Петров Алексей",
"phone": "+79161234567",
"email": "client@example.com",
"visits": 4
}
Запись (Appointment):
{
"id": "uuid",
"clientId": "uuid",
"masterId": "uuid",
"serviceId": "uuid",
"date": "2023-12-25",
"time": "14:00",
"status": "confirmed" // (pending, confirmed, cancelled, completed)
}
---
2. Эндпоинты
2.1. Каталог услуг
GET /api/services – список всех услуг.
GET /api/services/{id} – детали услуги.
Фильтрация:
GET /api/services?category=relax&min_price=2000
2.2. Расписание мастеров
GET /api/masters – все мастера.
GET /api/masters/{id}/schedule?date=2023-12-25 – свободные слоты мастера на дату.
2.3. Запись на сеанс
POST /api/appointments
{
"clientId": "uuid",
"masterId": "uuid",
"serviceId": "uuid",
"date": "2023-12-25",
"time": "14:00"
}
2.4. Личный кабинет
GET /api/clients/{id}/appointments – история записей.
DELETE /api/appointments/{id} – отмена записи.
2.5. Управление бронями (админ)
PUT /api/appointments/{id} – изменение статуса.
{ "status": "completed" }
---
3. Обработка ошибок
| Код | Ошибка | Пример ответа |
|-----|--------------------------|----------------------------------------|
| 400 | Неверное время | { "error": "Time slot not available" } |
| 404 | Мастер не найден | { "error": "Master not found" } |
| 409 | Запись уже существует | { "error": "Appointment conflict" } |
| 429 | Слишком много запросов | { "error": "Too many requests" } |
---
4. Пример запроса
Запись клиента:
POST /api/appointments
Headers: { "Content-Type": "application/json" }
Body: {
"clientId": "123e4567-e89b-12d3-a456-426614174000",
"masterId": "223e4567-e89b-12d3-a456-426614174000",
"serviceId": "323e4567-e89b-12d3-a456-426614174000",
"date": "2023-12-25",
"time": "14:00"
}
Успешный ответ (201 Created):
{
"id": "423e4567-e89b-12d3-a456-426614174000",
"status": "confirmed",
"discount": 10,
"final_price": 2250
}
---
#api@cool_analyst