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

Салоны

Публичные GET-эндпоинты доступны без аутентификации.
Запись/изменение/удаление — только для владельца салона (salons.owner_id == current_user.id) или admin.


Список салонов

GET /api/v1/salons

Поиск и листинг салонов.

Query params

ПараметрОписание
queryПоиск по названию / адресу
categorySlug категории
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
}