Салоны
Публичные GET-эндпоинты доступны без аутентификации.
Запись/изменение/удаление — только для владельца салона (salons.owner_id == current_user.id) или admin.
Список салонов
GET /api/v1/salons
Поиск и листинг салонов.
Query params
| Параметр | Описание |
|---|---|
query | Поиск по названию / адресу |
category | Slug категории |
price_min | Минимальная цена |
price_max | Максимальная цена |
rating_min | Минимальный рейтинг |
Ответ 200
{
"success": true,
"status": "200",
"message": "Salons retrieved successfully",
"errors": null,
"data": [
{
"id": "uuid",
"name": "Barber House",
"slug": "barber-house",
"address": "str. Pushkin 12",
"lat": 47.024,
"lng": 28.832,
"phone": "+37369000000",
"status": "active",
"avg_rating": 4.8,
"reviews_count": 12,
"photo_urls": []
}
]
}
Получить салон
GET /api/v1/salons/:id
Детальная информация о салоне. Включает расписание, услуги и политику отмены.
Ответ 200
{
"success": true,
"status": "200",
"message": "Salon retrieved successfully",
"errors": null,
"data": {
"id": "uuid",
"name": "Barber House",
"slug": "barber-house",
"address": "str. Pushkin 12",
"lat": 47.024,
"lng": 28.832,
"phone": "+37369000000",
"status": "active",
"avg_rating": 4.8,
"reviews_count": 12,
"photo_urls": [],
"cancellation_hours_before": 24,
"cancellation_fee_percent": "0.0",
"working_hours": [
{ "day_of_week": 1, "open": "09:00", "close": "18:00" },
{ "day_of_week": 2, "open": "09:00", "close": "18:00" }
],
"services": [
{
"id": "uuid",
"name": "Men's Haircut",
"category": "barbershop",
"duration_min": 30,
"price_from": 150.0
}
]
}
}
Создать салон
POST /api/v1/salons
Создать новый салон. Требует аутентификации (владелец или admin).
Запрос
POST /api/v1/salons
Authorization: Bearer <token>
Content-Type: application/json
{
"salon": {
"name": "Barber House",
"address": "str. Pushkin 12",
"phone": "+37369000000",
"lat": 47.024,
"lng": 28.832,
"status": "pending"
}
}
Дополнительно можно передать photos[] как multipart.
Ответ 201
{
"success": true,
"status": "201",
"message": "Salon created successfully",
"errors": null,
"data": {
"id": "uuid",
"name": "Barber House",
"slug": "barber-house",
...
}
}
Обновить салон
PATCH /api/v1/salons/:id
Обновить салон. Только владелец (owner_id) или admin.
Запрос
{
"salon": {
"name": "New Name",
"address": "New Address",
"status": "active"
}
}
Ответ 200
Тело аналогично POST /api/v1/salons с обновлёнными данными.
Удалить салон
DELETE /api/v1/salons/:id
Удалить салон. Только владелец или admin.
Ответ 200
{
"success": true,
"status": "200",
"message": "Salon deleted successfully",
"errors": null,
"data": null
}
Добавить в избранное
POST /api/v1/salons/:id/favorites
Добавить салон в избранное. Требует аутентификации.
Ответ 201
{
"success": true,
"status": "201",
"message": "...",
"errors": null,
"data": null
}
Удалить из избранного
DELETE /api/v1/salons/:id/favorites
Удалить салон из избранного. Требует аутентификации.
Ответ 200
{
"success": true,
"status": "200",
"message": "...",
"errors": null,
"data": null
}