Создает новую услугу текущего мастера или участника салона.
Для индивидуального мастера provider_id созданной услуги равен id текущего пользователя. Для роли SALON backend находит салон текущего пользователя, получает id владельца салона и записывает его в provider_id услуги. Это относится и к владельцу салона, и к админу салона.
Правила валидации:
nameне должен быть пустым и не должен быть длиннее 120 символовdescriptionне должен быть пустым и не должен быть длиннее 4000 символовpriceдолжен быть в диапазоне от 1 до 100000discount_percent, если передан вPOST /api/service, должен быть в диапазоне от 0 до 100;0означает отсутствие скидки,1..100задает скидку услуги при созданииdurationдолжен быть в диапазоне от 1 до 1440 минутcategory_idдолжен быть положительным ID существующей конечной подкатегории- корневую категорию или категорию с дочерними категориями нельзя назначить услуге
imagesдолжен содержать от 1 до 10 уникальных положительных ID файлов в порядке клиента- для индивидуального мастера
service_locationsобязателен и должен содержать от 1 до 3 объектов с уникальнымиservice_location:IN_SALON,AT_MASTER_PLACE,CLIENT_PLACE - в каждом объекте
service_locationsобязателен непустойaddress - в каждом объекте можно передать
geolocation; координаты сохраняются напрямую без повторного геокодирования - если в объекте передан
addressбезgeolocation, backend геокодирует этот адрес; при ошибке возвращается422 geocoding_failed - для
IN_SALONобязателен непустойsalon_name - для
CLIENT_PLACEобязателенradius_kmсо значением1,5,10или20 - салонная услуга использует адрес и координаты самого салона; поля
service_locations,addressиgeolocationдля ролиSALONзапрещены и приводят к400 invalid_body advantagesдолжен содержать не больше 5 уникальных непустых строк до 50 символов
Доступ:
- только роли
MASTERилиSALON - файлы из
imagesдолжны быть доступны текущему пользователю - файлы из
imagesдолжны иметь purposeCARD - требуется JWT
Базовая цена по умолчанию. Используется, если price_intervals отсутствуют или проверяемое время не попадает ни в один интервал.
Необязательные интервалы динамической базовой цены. Интервалы не должны пересекаться. Если поле не передано или передан пустой массив, используется только price.
[ { "start_time": "10:00", "end_time": "12:00", "price": 2000 } ]
Процент скидки услуги, который можно задать сразу при создании через POST /api/service.
Правила:
0сохраняется как0и означает отсутствие скидки1..100устанавливает скидку услуги в процентах- если поле не передано или передано
null, услуга создается без скидки
Ordered service image IDs. The first image is used as preview. All files must have purpose CARD.
[ 101, 102, 103 ]
Обязательно для индивидуального мастера. Содержит объекты с адресом и метаданными каждого места оказания. Для салонной услуги поле запрещено, потому что она использует местоположение салона.
- https://felmee.comhttps://felmee.com/api/service
- http://localhost:8080http://localhost:8080/api/service
curl -i -X POST \
https://felmee.com/api/service \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"name": "Мужская стрижка",
"price": 1500,
"price_intervals": [
{
"start_time": "10:00",
"end_time": "12:00",
"price": 2000
}
],
"discount_percent": 15,
"duration": 60,
"description": "Стрижка с мытьем головы и укладкой.",
"category_id": 3,
"is_fix_price": true,
"images": [
101,
102,
103
],
"service_locations": [
{
"service_location": "AT_MASTER_PLACE",
"address": "Moscow, Tverskaya, 16",
"geolocation": {
"lat": 55.7618,
"lon": 37.6095
}
}
],
"advantages": [
"Стерильные инструменты",
"Быстро"
]
}'Услуга успешно создана
Устаревший camelCase-alias поля error_code; при ошибке оба поля содержат одинаковое значение.
Код ошибки. Для успешных ответов всегда null.
{ "success": true, "message": "Service created successfully", "error_code": null, "data": { "id": 20, "images": [ … ], "name": "Мужская стрижка", "price": 1500, "price_intervals": [ … ], "base_price": 1500, "final_price": 1275, "discount_percent": 15, "duration": 60, "description": "Стрижка с мытьем головы и укладкой.", "category_id": 3, "parent_category_id": 1, "provider_id": 5, "is_fix_price": true, "service_locations": [ … ], "address": "г. Москва, ул. Тверская, д.16", "advantages": [ … ], "geo": { … } } }