Перейти к основному содержимому

Записи к мастерам

Управление записями к мастерам. Все эндпоинты требуют аутентификации.

Статусы записи (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": "Отличный мастер, приду ещё!"
}
}
ПолеТипОбязательноОписание
ratingintegerДаОт 1 до 5
bodystringНетТекст отзыва

Ответ 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
}