Skip to content

Заполнить или изменить салон

Request

Частично заполняет или изменяет салон текущего пользователя.

Салон определяется backend по текущему JWT-пользователю. Если переданные значения совпадают с уже сохраненными, backend возвращает changed = false и сообщение No changes were made to the salon.

Правила валидации:

  • должен быть заполнен хотя бы один корректный field
  • name, если передан, не должен быть пустым и не должен быть длиннее 100 символов
  • cover_photo_id, если передан, должен быть положительным ID файла
  • cover_photo_id должен принадлежать текущему пользователю и иметь purpose CARD
  • city, если передан, не должен быть пустым и не должен быть длиннее 30 символов
  • если передан city, обязательно должна быть передана geolocation; geolocation без city разрешена
  • address, если передан, не должен быть пустым и не должен быть длиннее 1000 символов
  • geolocation, если передан, должен содержать lat и lon
  • geolocation.lat должен быть в диапазоне [-90, 90], geolocation.lon - в диапазоне [-180, 180]
  • если переданы address и geolocation, backend сохраняет оба значения напрямую без повторного геокодирования
  • если передан address без geolocation, backend геокодирует адрес; при неуспешном геокодировании возвращается 422 geocoding_failed
  • если передана geolocation без address и без city, backend выполняет обратное геокодирование и сохраняет найденный адрес
  • если переданы city и geolocation без address, backend сохраняет координаты напрямую, а address устанавливает равным city
  • contact_phone, если передан, должен быть валидным телефоном и не должен быть длиннее 32 символов
  • description, если передан, не должен быть пустым и не должен быть длиннее 1000 символов
  • interior_description, если передан, не должен быть пустым и не должен быть длиннее 1000 символов
  • category_ids, если передан, должен быть массивом уникальных положительных ID существующих категорий
  • advantages, если передан, должен содержать уникальные непустые строки, не больше 5 элементов, каждый элемент не длиннее 50 символов
  • interior_images, если передан, должен содержать уникальные положительные ID файлов и не больше 10 элементов
  • все файлы из interior_images должны принадлежать текущему пользователю и иметь purpose CARD
  • amenities, если передан, должен содержать уникальные значения enum и не больше 4 элементов
  • working_days, если передан, должен содержать ровно 7 элементов от MONDAY до SUNDAY по порядку
  • для рабочего дня working = true обязательны start_time и end_time
  • для выходного дня working = false start_time и end_time должны быть null
  • end_time должен быть позже start_time, длительность рабочего интервала не меньше 30 минут

Требования:

  • требуется JWT
  • текущий пользователь должен быть участником салона
Security
bearerAuth or jwtCookie
Bodyapplication/jsonrequired
namestring or null, [ 1 .. 100 ] characters.*\S.*
cover_photo_idinteger or null, (int64), >= 1

ID файла обложки. Файл должен принадлежать пользователю и иметь purpose CARD.

citystring or null, [ 1 .. 30 ] characters.*\S.*
addressstring or null, [ 1 .. 1000 ] characters.*\S.*
geolocation(ProfileGeolocation (object or null))
One of:
contact_phonestring or null, [ 1 .. 32 ] characters

Контактный телефон салона.

descriptionstring or null, [ 1 .. 1000 ] characters.*\S.*
interior_descriptionstring or null, [ 1 .. 1000 ] characters.*\S.*
category_idsArray of integers or null, unique

ID существующих категорий салона.

advantagesArray of strings or null, <= 5 items, unique

Преимущества салона. Каждый элемент должен быть непустой строкой длиной до 50 символов.

interior_imagesArray of integers or null, <= 10 items, unique

ID фотографий интерьера. Все файлы должны принадлежать пользователю и иметь purpose CARD.

amenitiesArray of strings or null, <= 4 items, unique
working_daysArray of objects or null, = 7 items(SalonWorkingDay)

Ровно 7 дней, в порядке MONDAY -> SUNDAY.

curl -i -X PATCH \
  https://felmee.com/api/salon \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Persona",
    "cover_photo_id": 42,
    "city": "Minsk",
    "address": "Minsk, Nezavisimosti 1",
    "geolocation": {
      "lat": 53.9,
      "lon": 27.56
    },
    "contact_phone": "+375291112233",
    "description": "Beauty salon in the city center.",
    "interior_description": "Bright studio with separate manicure rooms.",
    "category_ids": [
      1,
      2
    ],
    "advantages": [
      "Parking",
      "Wi-Fi"
    ],
    "interior_images": [
      201,
      202
    ],
    "amenities": [
      "PARKING",
      "TEA_COFFEE"
    ],
    "working_days": [
      {
        "day_of_week": "MONDAY",
        "working": true,
        "start_time": "09:00",
        "end_time": "18:00"
      },
      {
        "day_of_week": "TUESDAY",
        "working": true,
        "start_time": "09:00",
        "end_time": "18:00"
      },
      {
        "day_of_week": "WEDNESDAY",
        "working": true,
        "start_time": "09:00",
        "end_time": "18:00"
      },
      {
        "day_of_week": "THURSDAY",
        "working": true,
        "start_time": "09:00",
        "end_time": "18:00"
      },
      {
        "day_of_week": "FRIDAY",
        "working": true,
        "start_time": "09:00",
        "end_time": "18:00"
      },
      {
        "day_of_week": "SATURDAY",
        "working": false,
        "start_time": null,
        "end_time": null
      },
      {
        "day_of_week": "SUNDAY",
        "working": false,
        "start_time": null,
        "end_time": null
      }
    ]
  }'

Responses

Салон успешно обработан

Bodyapplication/json
codeErrorstring or nullrequired

Устаревший camelCase-alias поля error_code; при ошибке оба поля содержат одинаковое значение.

successbooleanrequired

Флаг успешного выполнения запроса

messagestringrequired

Человекочитаемое описание результата

error_codestring or null(ERROR_CODE)required

Код ошибки. Для успешных ответов всегда null.

Enum:"invalid_body""unauthorized""not_found""conflict""object_modified_by_another_thread""action_too_late""too_many_request""code_is_gone""forbidden""user_blocked"
dataobject or null(UpdateSalonData)required

Полезная нагрузка. Может быть объектом, массивом или null.

Response
{ "success": true, "message": "Salon updated successfully", "error_code": null, "data": { "changed": true, "name": "Persona", "description": "Beauty salon in the city center.", "interior_description": "Bright studio with separate manicure rooms.", "city": "Minsk", "address": "Minsk, Nezavisimosti 1", "geolocation": {}, "contact_phone": "+375291112233", "cover_photo_id": 42, "category_ids": [], "advantages": [], "interior_images": [], "amenities": [], "working_days": [], "rating": 4.27 } }