Для начала, необходимо авторизоваться, чтобы полноценно использовать API.
Обратите внимание, что для авторизации используется номер телефона
POST: /login?username=+375447635465_by&password=bbbbb
После этого, за Вами будет сохранена сессия.
URL | Доступ | Описание | Дополнительная информация |
/accounts/{idAccount}
|
ALL | возвращает данные указанного аккаунта. | В случае, если Вы не авторизованы под аккаунт, который запрашиваете, то Вам вернётся не вся информация. Также, если Вы не владелец аккаунта и у владельца установлен флаг isPhoneVisible, Вам не вернётся информация о его номере телефона |
/accounts
|
ADMIN | Возвращает данные ВСЕХ аккаунтов. | Команда запрещена и невозможна к использованию |
Ответ (если Вы не владелец аккаунта):
{
"idAccount": 14,
"username": "Mariska",
"roles": [
{
"idRole": 1,
"name": "ROLE_MASTER",
},
{
"idRole": 2,
"name": "ROLE_CLIENT",
}
],
"address": "Example st, 8, 123",
"userDetails": {
"idUserDetails": 1,
"about": "Hello my name is Marina. I am pretty good girl",
"socialNetwork": "tg.com/123",
"phoneCode": {
"idPhoneCode": 105,
"countryName": "Латвия",
"phoneCode": 371,
"countryCut": "lv"
},
"displayedPhone": "+375 44 555 44 33",
"firstName": "Марина",
"lastName": "Петровна",
},
"accountSettings": {
"idAccountSettings": 1,
"defaultWorkingDayStart": "06:00:00",
"defaultWorkingDayEnd": "15:00:00",
"phoneVisible": false
}
}
Ответ (если Вы владелец аккаунта)
{
"idAccount": 23,
"password": "$2a$10$sIgFFM/3o5q4VTKYoMFoee98h4Euh9jkr19mHI4Ig4qfFDsy6I/IK",
"username": "Marishechka",
"registrationDate": "2023-09-05T21:00:00.000+00:00",
"email": "[email protected]",
"roles": [
{
"idRole": 1,
"name": "ROLE_MASTER",
},
{
"idRole": 2,
"name": "ROLE_CLIENT",
}
],
"address": "Улица Продольная, 15",
"userDetails": {
"idUserDetails": 47,
"about": "Привет, я Маришка, но не Иришка!",
"socialNetwork": "[email protected]",
"phoneCode": {
"idPhoneCode": 20,
"countryName": "Беларусь",
"phoneCode": 375,
"countryCut": "by"
},
"phone": "+375 44 763-54-65",
"displayedPhone": "+375 44 763-54-65",
"firstName": "Марина",
"lastName": "Агафьевна",
},
"accountSettings": {
"idAccountSettings": 2,
"defaultWorkingDayStart": "03:00:00",
"defaultWorkingDayEnd": "20:00:00",
"phoneVisible": false
}
}
URL | Доступ | Описание | Дополнительная информация |
/accounts/{idAccount}
|
искомый аккаунт == авторизованный аккаунт | Позволяет частично изменять данные аккаунта. | Некоторые поля невозможно изменить без других |
Поле для изменения | Название параметра | Тип | Примечание |
Пароль | password | Строка | + поле oldPassword - необходимо ввести для подтверждения смены пароля |
Имя пользователя | username | Строка | - |
Электронная почта | Строка | Формат: [email protected] | |
Адрес | address | Строка | - |
Текст о себе | text | Строка | - |
Теги | tags | Строка | - |
Вид деятельности | profession | Строка | - |
Социальные сети | socialNetwork | Строка | - |
Номер телефона и код страны | phone + countryCut | Строка | При изменении одного из параметров, второй обязательно должен присутствовать |
Имя | fistName | Строка | - |
Фамилия | lastName | Строка | - |
Начало рабочего дня по умолчанию | defaultWorkingDayStart | Строка | Формат: "05:00:00" |
Конец рабочего дня по умолчанию | defaultWorkingDayEnd | Строка | Формат: "18:30:00" |
Видимость телефона на странице аккаунта | isPhoneVisible | true/false | true или false |
Поля не из списка будут игнорироваться.
Каждое поле является опциональным, так что Вы можете изменять только те поля, которые необходимо.
Пример тела запроса:
{
"password": "MyNeWPassw0rD",
"oldPassword": "myOldPassword11",
"username": "Jakline",
"email": "[email protected]",
"address": "Пушкинская 56",
"userDetails": {
"about": {
"text": "Привет, я занимаюсь профессиональной обработкой ноготочков",
"tags": "маникюр,педикюр,брови",
"profession": "Мастер по маникюру"
},
"socialNetwork": "@my_inst",
"phoneCode": {
"countryCut": "by"
},
"phone": "+375441233243",
"firstName": "Василиса",
"lastName": "Прекрасная"
},
"accountSettings": {"
defaultWorkingDayStart": "06:00:00",
"defaultWorkingDayEnd": "20:00:00",
"phoneVisible": false
}
}
URL | Доступ | Описание | Дополнительная информация |
/accounts/{idAccount}
|
ADMIN | Позволяет удалить аккаунт | Команда запрещена и невозможна к использованию |
URL | Доступ | Описание | Дополнительная информация |
/accounts/{idAccount}/settings
|
искомый аккаунт == авторизованный аккаунт | Производит поиск настроек аккаунта | - |
Ответ
{
"idAccountSettings": 1,
"defaultWorkingDayStart": "09:00:00",
"defaultWorkingDayEnd": "23:00:00",
"phoneVisible": false
}
Вы также можете изменять настройки напрямую, а не через REST-API аккаунта
URL | Доступ | Описание | Дополнительная информация |
/accounts/{idAccount}/settings |
Искомый аккаунт == авторизованный аккаунт | Позволяет частично изменять данные настроек аккаунта. | - |
Поле для изменения | Название параметра | Тип | Примечание |
Начало рабочего дня по умолчанию | defaultWorkingDayStart | Строка | Формат: "05:00:00" |
Конец рабочего дня по умолчанию | defaultWorkingDayEnd | Строка | Формат: "18:30:00" |
Видимость телефона на странице аккаунта | isPhoneVisible | Логический | true или false |
Параметры являются опциональными, однако следует помнить, что конец рабочего дня не должен быть раньше начала рабочего дня!
Пример Json-тела запроса
{
"defaultWorkingDayStart": "10:00:00",
"defaultWorkingDayEnd": "23:00:00",
"phoneVisible": true
}
Ответ:
{
"idAccountSettings": 1,
"defaultWorkingDayStart": "10:00:00",
"defaultWorkingDayEnd": "23:00:00",
"phoneVisible": true
}
URL | Доступ | Описание | Дополнительная информация |
/appointments/{idAppointment} |
Только собственные записи | Производит поиск записи по её id | - |
/appointments |
ADMIN | Производит поиск всех возможных записей | Запрещено и невозможно к использованию |
/accounts/{idAccount}/income-appointments |
ALL | Производит поиск записей к определенному мастеру | idAccount - идентификатор аккаунта МАСТЕРА |
/accounts/{idAccount}/outcome-appointments |
Только владелец аккаунта имеет доступ к своим записям | Производит поиск записей определенного клиента | idAccount - идентификатор аккаунта КЛИЕНТА |
/accounts/{idMasterAccount}/appointments?idUserDetails={idUserDetails} |
MASTER и владелец аккаунта | Поиск всех записей определенного клиента к определенному мастеру | - |
Пример ответа json
{
"idAppointment": 54,
"masterAccount": {
//информация о мастере
},
"service": {
"idService": 8,
"name": "Подпиливание",
"price": 190.0,
"time": "2 часа 30 минут",
"account": {
//данные о владельце услуги (повторяет данные мастера)
},
"serviceSubtype": {
"idServiceSubtype": 1,
"name": "Маникюр",
"serviceType": {
"idServiceType": 1,
"name": "Ногтевой сервис"
}
}
},
"appointmentDateTime": "2023-09-27T08:00:00.000+00:00",
"userDetailsClient": {
//информация о клиенте
}
}
Как видно из ответа, данные приходят полностью, без внешних ключей. С одной стороны это выглядит громоздко, однако с другой - мы можем получить полную информацию сразу
URL | Доступ | Описание | Дополнительная информация |
/appointments
|
Необходимо быть авторизованным | Создает новую запись | В теле запроса должен фигурировать Ваш аккаунт (либо как мастера, либо как клиента) |
Пример json-тела запроса
{
"masterAccount": {
"idAccount": 23
},
"service": {
"idService": 13
},
"appointmentDateTime": "2023-10-13T15:30:00.000+03:00",
"userDetailsClient": {
"idUserDetails": 46
}
}
Ответ аналогичен ответу при поиске.
Обратите внимание на то, что необходимо знать идентификаторы аккаунта, услуги, а также деталей клиента.
Также, стоит обратить внимание на формат даты. Если попытаться на сервер отправить дату в формате
2023-10-13T15:30:00.000+00:00
, то данные на сервере сохраняться на +3 часа, поскольку сервер хранит дату и время именно в часовом поясе +3,
что необходимо учитывать при отправке запроса.
URL | Доступ | Описание | Дополнительная информация |
/appointments/{idAppointment} |
ADMIN | Полностью замещает существующую запись | Команда запрещена и невозможна к использованию |
URL | Доступ | Описание | Дополнительная информация |
/appointments/{idAppointment} | Авторизован + необходимо быть участником удаляемой записи (мастером или клиентом) | Производит удаление записи по id | - |
/accounts/{idAccount}/outcome-appointments/{idAppointment} | CLIENT + необходимо быть участником удаляемой записи (клиентом) | Производит удаление записи по id | - |
/accounts/{idAccount}/income-appointments/{idAppointment} | MASTER + необходимо быть участником удаляемой записи (мастером) | Производит удаление записи по id | - |
По большому счёту, разницы в указанных методах нет. Скорее всего, в будущих версиях какой-либо из методов будет упразднён.
URL | Доступ | Описание | Дополнительная информация |
/services/{idService} | ALL | Производит поиск услуги по её id | - |
/accounts/{idAccountMaster}/services | ALL | Производит поиск всех услуг выбранного мастера | - |
/service-types/{idServiceType}/service-subtypes/services?serviceSubtypeIds=1,2,4,5 | ALL | Поиск всех услуг по перечню подтипов услуг конкретного типа услуги. Выбирается тип услуги (напр. Барбершоп), выбирается несколько подтипом (Стрижка бороды, усов) и по этим параметрам производится поиск созданных пользовательских услуг. | - |
URL | Доступ | Описание | Дополнительная информация |
/services | MASTER | Производит создание услуги для мастера | Указанный idAccount в теле запроса должен совпадать с idAccount авторизованного пользователя |
Тело запроса:
{
"name": "Покрытие гель-лаком", //название услуги
"price": 123.0, //Цена
"time": "1 час 30 минут", //строго x час(а,ов) или x час(а,ов) xx минут. Время на услугу
"account": {
"idAccount": 13 //чей аккаунт
},
"serviceSubtype": {
"idServiceSubtype": 7 //id подтипа услуги
}
}
Все поля обязательны
Все параметры обязательны
URL | Доступ | Описание | Дополнительная информация |
/services/{idService} | MASTER | Производит полное изменение услуги мастера | Указанный idAccount в json-теле должен совпадать с авторизованным пользователем |
Тело запроса:
{
"name": "Покрытие гель-лаком", //название услуги
"price": 123.0, //Цена
"time": "1 час 30 минут", //строго x час(а,ов) или x час(а,ов) xx минут. Время на услугу
"account": {
"idAccount": 13 //чей аккаунт
},
"serviceSubtype": {
"idServiceSubtype": 7 //id подтипа услуги
}
}
Method=DELETE
/services/{idService} permit=MASTER
- Удаляет услугу. Возможно удалить только свою услугу
URL | Доступ | Описание | Дополнительная информация |
/services/{idService} | MASTER | Производит полное удаление услуги мастера | Указанный сервис должен принадлежать авторизованному пользователю |
Method=GET
URL | Доступ | Описание | Дополнительная информация |
/service-subtypes | ALL | Производит поиск всех возможных подтипов услуг | Скорее всего, этот метод Вам не понадобится |
/service-subtypes/{idServiceSubtype} | ALL | Производит поиск конкретного подтипа услуги по его id | - |
/service-types/{idServiceType}/service-subtypes | ALL | Производит поиск всех подтипов услуг по типу услуги | - |
URL | Доступ | Описание | Дополнительная информация |
/service-types | ALL | Производит поиск всех возможных типов услуг | - |
/service-types/{idServiceType} | ALL | Производит поиск конкретного типа услуги по его id | - |
URL | Доступ | Описание | Дополнительная информация |
/accounts/{idAccount}/clients | Мастер + idAccount совпадает с авторизованным пользователем | Производит поиск всей информации о пользователях, которые являются клиентом мастера | - |
URL | Доступ | Описание | Дополнительная информация |
/user-details | MASTER | Производит создание пользовательской информации (клиента без владельца. Виден только самому мастеру) | - |
Тело запроса создания:
{
displayedPhone: "+375 44 123 23 23",
firstName: "Алёша", //обязательное поле
lastName: "Попович",
about: {
text: "Клиент отличается капризностью",
},
phoneCode: {
countryCut: "by" //поле обязательно, если указан телефон
},
masterOwner: {
idAccount: 13 //совпадает с Вашим аккаунтом, обязательное поле
}
}
URL | Доступ | Описание | Дополнительная информация |
/user-details/{idUserDetails} | MASTER | Производит частичное изменение выбранных полей пользовательской информации, которую ранее создавал ЭТОТ мастер | - |
Тело запроса изменения:
{
displayedPhone: "+375 44 123 23 23",
firstName: "Алёша",
lastName: "Попович",
about: {
text: "Клиент отличается капризностью",
},
phoneCode: {
countryCut: "by" //поле обязательно, если указан телефон
}
}
URL | Доступ | Описание | Дополнительная информация |
/accounts/{idAccount}/clients/{idUserDetails} | MASTER | Удаляет пользовательскую информацию о клиенте ранее созданную авторизованным мастером | Невозможно удалить чужого клиента |
URL | Доступ | Описание | Дополнительная информация |
/accounts/{idAccount}/working-days | ALL | Возвращает все рабочие дни указанного мастера | - |
URL | Доступ | Описание | Дополнительная информация |
/accounts/{idAccount}/working-days | MASTER | Создает новый рабочий день для мастера | - |
Тело запроса для создания:
{
idAccount: 13,
date: "2023-09-05T00:00:00.000+00:00",
workingDayStart: "09:00:00", // необязательное
workingDayEnd: "15:00:00" //необязательное
}