Записи к мастерам
Управление записями к мастерам. Все эндпоинты требуют аутентификации.
Статусы записи (AASM)
confirmed → in_progress → completed → reviewed
↘ cancelled (терминальный)
↘ no_show (терминальный)
Начальный статус при создании: confirmed.
Создать запись
POST /api/v1/appointments
Создать запись. Клиент бронирует слот.
Запрос
{
"appointment": {
"salon_id": "uuid",
"service_id": "uuid",
"master_id": "uuid",
"starts_at": "2026-04-07T10:00:00Z"
}
}
| Поле | Обязательно | Описание |
|---|---|---|
salon_id | Да | |
service_id | Да | |
master_id | Да | |
starts_at | Да | ISO 8601, UTC |
Ответ 201
{
"success": true,
"status": "201",
"message": "Appointment created successfully",
"errors": null,
"data": {
"id": "uuid",
"status": "confirmed",
"starts_at": "2026-04-07T10:00:00Z",
"ends_at": "2026-04-07T10:30:00Z",
"total_amount": "150.0",
"salon": {
"salon_id": "uuid",
"name": "Barber House",
"address": "str. Pushkin 12"
},
"master": {
"master_id": "uuid",
"name": "Ion Popescu"
},
"service": {
"service_id": "uuid",
"name": "Men's Haircut",
"price_snapshot": "150.0",
"duration_min": 30
}
}
}
Получить запись
GET /api/v1/appointments/:id
Детали конкретной записи. Доступна только участникам (клиент, мастер, владелец салона, admin).
Ответ 200
Тело аналогично POST /api/v1/appointments response.
Подтвердить запись
PATCH /api/v1/appointments/:id/confirm
Подтвердить запись вручную. Только владелец салона или мастер.
На текущий момент записи создаются уже со статусом
confirmed. Эндпоинт зарезервирован для будущего ручного подтверждения.
Ответ 200
{
"success": true,
"status": "200",
"message": "Appointment confirmed successfully",
"errors": null,
"data": { ... }
}
Отменить запись
PATCH /api/v1/appointments/:id/cancel
Отменить запись. Доступно клиенту, мастеру и владельцу.
Для клиента проверяется политика отмены (cancellation_hours_before). Владелец и admin могут отменять без ограничений.
Ответ 200
{
"success": true,
"status": "200",
"message": "Appointment cancelled successfully",
"errors": null,
"data": { ... }
}
Завершить запись
PATCH /api/v1/appointments/:id/complete
Отметить запись как завершённую. Только владелец салона или мастер.
Ответ 200
{
"success": true,
"status": "200",
"message": "Appointment completed successfully",
"errors": null,
"data": { ... }
}
Отметить неявку
PATCH /api/v1/appointments/:id/no_show
Отметить клиента как неявившегося. Только владелец салона или мастер.
Ответ 200
{
"success": true,
"status": "200",
"message": "Appointment marked as no-show",
"errors": null,
"data": { ... }
}
Оставить отзыв
POST /api/v1/appointments/:id/review
Оставить отзыв после завершения записи. Только клиент, только после статуса completed.
После успешной отправки запись переходит в статус reviewed.
Запрос
{
"review": {
"rating": 5,
"body": "Отличный мастер, приду ещё!"
}
}
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
rating | integer | Да | От 1 до 5 |
body | string | Нет | Текст отзыва |
Ответ 201
{
"success": true,
"status": "201",
"message": "Review submitted successfully",
"errors": null,
"data": {
"id": "uuid",
"rating": 5,
"body": "Отличный мастер, приду ещё!",
"created_at": "2026-04-07T11:00:00Z"
}
}
Ответ 422 — Запись не завершена
{
"success": false,
"status": "422",
"message": "Validation failed",
"errors": {
"appointment": ["must be completed before review"]
},
"data": null
}