Skip to content

Latest commit

 

History

History
931 lines (862 loc) · 28.2 KB

REST_API_DOC.md

File metadata and controls

931 lines (862 loc) · 28.2 KB

REST API Документация (актуально для v0.3.1.4)

Авторизация

Для начала, необходимо авторизоваться, чтобы полноценно использовать API. Обратите внимание, что для авторизации используется номер телефона
POST: /login?username=+375447635465_by&password=bbbbb
После этого, за Вами будет сохранена сессия.

Аккаунт (Account)

Поиск GET:

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 } }

Редактирование PATCH:

URL Доступ Описание Дополнительная информация
/accounts/{idAccount} искомый аккаунт == авторизованный аккаунт Позволяет частично изменять данные аккаунта. Некоторые поля невозможно изменить без других
Поле для изменения Название параметра Тип Примечание
Пароль password Строка + поле oldPassword - необходимо ввести для подтверждения смены пароля
Имя пользователя username Строка -
Электронная почта email Строка Формат: [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 } }

Удаление DELETE:

URL Доступ Описание Дополнительная информация
/accounts/{idAccount} ADMIN Позволяет удалить аккаунт Команда запрещена и невозможна к использованию

Настройки аккаунта (AccountSettings)

Поиск GET:

URL Доступ Описание Дополнительная информация
/accounts/{idAccount}/settings искомый аккаунт == авторизованный аккаунт Производит поиск настроек аккаунта -

Ответ

{ "idAccountSettings": 1, "defaultWorkingDayStart": "09:00:00", "defaultWorkingDayEnd": "23:00:00", "phoneVisible": false }

Редактирование PATCH:

Вы также можете изменять настройки напрямую, а не через 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 }

Запись (Appointment)

Поиск GET

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": { //информация о клиенте } }

Как видно из ответа, данные приходят полностью, без внешних ключей. С одной стороны это выглядит громоздко, однако с другой - мы можем получить полную информацию сразу

Создание POST

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, что необходимо учитывать при отправке запроса.

Полное изменение PUT

URL Доступ Описание Дополнительная информация
/appointments/{idAppointment} ADMIN Полностью замещает существующую запись Команда запрещена и невозможна к использованию

Удаление DELETE

URL Доступ Описание Дополнительная информация
/appointments/{idAppointment} Авторизован + необходимо быть участником удаляемой записи (мастером или клиентом) Производит удаление записи по id -
/accounts/{idAccount}/outcome-appointments/{idAppointment} CLIENT + необходимо быть участником удаляемой записи (клиентом) Производит удаление записи по id -
/accounts/{idAccount}/income-appointments/{idAppointment} MASTER + необходимо быть участником удаляемой записи (мастером) Производит удаление записи по id -

По большому счёту, разницы в указанных методах нет. Скорее всего, в будущих версиях какой-либо из методов будет упразднён.

Услуги (Service)

Поиск GET

URL Доступ Описание Дополнительная информация
/services/{idService} ALL Производит поиск услуги по её id -
/accounts/{idAccountMaster}/services ALL Производит поиск всех услуг выбранного мастера -
/service-types/{idServiceType}/service-subtypes/services?serviceSubtypeIds=1,2,4,5 ALL Поиск всех услуг по перечню подтипов услуг конкретного типа услуги. Выбирается тип услуги (напр. Барбершоп), выбирается несколько подтипом (Стрижка бороды, усов) и по этим параметрам производится поиск созданных пользовательских услуг. -

Создание POST

URL Доступ Описание Дополнительная информация
/services MASTER Производит создание услуги для мастера Указанный idAccount в теле запроса должен совпадать с idAccount авторизованного пользователя

Тело запроса: { "name": "Покрытие гель-лаком", //название услуги "price": 123.0, //Цена
"time": "1 час 30 минут", //строго x час(а,ов) или x час(а,ов) xx минут. Время на услугу "account": { "idAccount": 13 //чей аккаунт },
"serviceSubtype": { "idServiceSubtype": 7 //id подтипа услуги } }

Все поля обязательны

Полное изменение PUT

Все параметры обязательны

URL Доступ Описание Дополнительная информация
/services/{idService} MASTER Производит полное изменение услуги мастера Указанный idAccount в json-теле должен совпадать с авторизованным пользователем

Тело запроса: { "name": "Покрытие гель-лаком", //название услуги "price": 123.0, //Цена
"time": "1 час 30 минут", //строго x час(а,ов) или x час(а,ов) xx минут. Время на услугу "account": { "idAccount": 13 //чей аккаунт },
"serviceSubtype": { "idServiceSubtype": 7 //id подтипа услуги } }

Удаление DELETE

Method=DELETE /services/{idService} permit=MASTER - Удаляет услугу. Возможно удалить только свою услугу

URL Доступ Описание Дополнительная информация
/services/{idService} MASTER Производит полное удаление услуги мастера Указанный сервис должен принадлежать авторизованному пользователю

Подтипы услуг (serviceSubtype)

Поиск GET

Method=GET

URL Доступ Описание Дополнительная информация
/service-subtypes ALL Производит поиск всех возможных подтипов услуг Скорее всего, этот метод Вам не понадобится
/service-subtypes/{idServiceSubtype} ALL Производит поиск конкретного подтипа услуги по его id -
/service-types/{idServiceType}/service-subtypes ALL Производит поиск всех подтипов услуг по типу услуги -

Типы услуг (serviceType)

Поиск GET

URL Доступ Описание Дополнительная информация
/service-types ALL Производит поиск всех возможных типов услуг -
/service-types/{idServiceType} ALL Производит поиск конкретного типа услуги по его id -

Детали пользователя (userDetails)

Поиск GET

URL Доступ Описание Дополнительная информация
/accounts/{idAccount}/clients Мастер + idAccount совпадает с авторизованным пользователем Производит поиск всей информации о пользователях, которые являются клиентом мастера -

Создание POST

URL Доступ Описание Дополнительная информация
/user-details MASTER Производит создание пользовательской информации (клиента без владельца. Виден только самому мастеру) -

Тело запроса создания:

{ displayedPhone: "+375 44 123 23 23", firstName: "Алёша", //обязательное поле lastName: "Попович", about: { text: "Клиент отличается капризностью", }, phoneCode: { countryCut: "by" //поле обязательно, если указан телефон }, masterOwner: { idAccount: 13 //совпадает с Вашим аккаунтом, обязательное поле } }

Изменение PATCH

URL Доступ Описание Дополнительная информация
/user-details/{idUserDetails} MASTER Производит частичное изменение выбранных полей пользовательской информации, которую ранее создавал ЭТОТ мастер -

Тело запроса изменения:

{ displayedPhone: "+375 44 123 23 23", firstName: "Алёша", lastName: "Попович", about: { text: "Клиент отличается капризностью", }, phoneCode: { countryCut: "by" //поле обязательно, если указан телефон } }

Удаление DELETE

URL Доступ Описание Дополнительная информация
/accounts/{idAccount}/clients/{idUserDetails} MASTER Удаляет пользовательскую информацию о клиенте ранее созданную авторизованным мастером Невозможно удалить чужого клиента

Рабочие дни мастера (workingDays)

Поиск GET

URL Доступ Описание Дополнительная информация
/accounts/{idAccount}/working-days ALL Возвращает все рабочие дни указанного мастера -

Создание POST

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" //необязательное }