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

GET /api/v1/salons/:id/availability

Получить доступные слоты для записи в салон на конкретный день. Публичный эндпоинт.

Query params

ПараметрОбязательноОписание
service_idДаUUID услуги (определяет длительность слота)
dateНетДата в формате YYYY-MM-DD (по умолчанию — сегодня)
master_idНетUUID мастера для фильтрации слотов

Запрос

GET /api/v1/salons/:id/availability?service_id=uuid&date=2026-04-07&master_id=uuid

Ответ 200

{
"success": true,
"status": "200",
"message": "Availability retrieved successfully",
"errors": null,
"data": [
{
"starts_at": "2026-04-07T09:00:00+03:00",
"ends_at": "2026-04-07T09:30:00+03:00",
"duration_min": 30,
"master_id": "uuid"
},
{
"starts_at": "2026-04-07T09:30:00+03:00",
"ends_at": "2026-04-07T10:00:00+03:00",
"duration_min": 30,
"master_id": "uuid"
}
]
}

Ответ 422 — service_id не передан

{
"success": false,
"status": "422",
"message": "service_id is required",
"errors": null,
"data": null
}

Логика построения слотов

  1. Берётся расписание салона (или мастера, если master_id указан)
  2. Из рабочих часов на date вычитаются существующие подтверждённые записи
  3. Генерируются слоты длиной duration_min (из услуги)
  4. Учитываются schedule_blocks (отпуска, больничные)
  5. Временны́е зоны — через salon.timezone (IANA, по умолчанию Europe/Chisinau)