# iPump API
## Описание
Методы для взаимодействия приложения "iPump" с сервером "iPump".
## Основные данные
* URL API: [https://xn--80aaa9begoeg5b.xn--p1ai/](https://xn--80aaa9begoeg5b.xn--p1ai/)
* Типы запросов: POST, GET, DELETE
* Тип авторизации API: Bearer Token
* Часовой пояс UTC
После регистрации клиента, клиенту выдаётся ключ "AccessToken", который затем используется в каждом запрос на добавление/редактирование/удаление личных данных. В каждом методе где нужна авторизация передаётся этот код в заголовке запроса.
``` code
{
"headers": {
"Accept": "application/json",
"Authorization": "Bearer AccessToken"
}
}
```
## Коды ответов
``` code
200 - запрос успешный
400 - ошибка
404 - метод api не найден
401 - доступ запрещён
500 - ошибка сервера
```
## Пользователи
### Регистрация
### `POST /api/register`
**Описание**
* Вызывается для регистрации пользователя.
* Метод не требует авторизации Bearer Token.
**Требуемые параметры JSON**
```json
{
"email": String,
"password": String
}
```
**Headers**
```json
{
"Accept": "application/json",
"OS": "Версия операционной системы",
"Device": "Название устройства"
}
```
**Ответ**
```code
Code 200
Response {"token": string, "app_id": String}
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
```
### Авторизация
### `POST /api/auth`
**Описание**
* Вызывается для авторизации пользователя.
* Метод не требует авторизации Bearer Token.
**Требуемые параметры**
#### JSON
```code
{
"email": String,
"password": String
}
```
#### Headers
```code
{
"Accept": "application/json",
"OS": "Версия операционной системы",
"Device": "Название устройства"
}
```
#### Ответ
```code
Code 200
Response {"token": string, "app_id": Integer}
```
#### Ответ в случае ошибки
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
или
Response {
error_msg: "Логин или пароль введён неверно"
}
```
### Восстановление пароля
### `POST /api/restore_password`
**Описание**
* Вызывается для восстановления пароля пользователя.
* Метод не требует авторизации Bearer Token.
**Требуемые параметры**
```code
"email": String
```
#### Ответ
```code
Code 200
```
#### Ответ в случае ошибки
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
или
Response {
error_msg: "Логин или пароль введён неверно"
}
```
### Удаление пользователя
### `DELETE /api/delete_user`
**Описание**
* Вызывается для удаления пользователя.
* Метод требует авторизации Bearer Token.
#### Ответ
```code
Code 200
```
### Проверка запроса на наблюдение
### `GET /api/patient_access`
**Описание**
* Вызывается для проверки доступа на наблюдение.
* Метод требует авторизации Bearer Token.
* Для тестирование - открыть ссылку с app_id своим https://pump.iback.online/create_patient_access?app_id=:app_id, эта ссылка создаст запрос наблюдателя
#### Ответ
```code
Code 200
Response {
"app_id": Integer,
[
{"owner_id": Integer, "name": String, "approved": Boolean, "created": Datetime},
{"owner_id": Integer, "name": String, "approved": Boolean, "created": Datetime},
...
]
}
```
### Одобрить доступ для наблюдателя
### `POST /api/patient_access/approve`
**Описание**
* Вызывается для одобрения доступа.
* Метод требует авторизации Bearer Token.
**Требуемые параметры JSON**
```json
{"owner_id": Integer}
```
**Ответ**
```code
Code 200
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
или
Response {
error_msg: "Логин или пароль введён неверно"
}
```
### Удалить доступ для наблюдателя
### `DELETE /api/patient_access/delete`
**Описание**
* Вызывается для удаления доступа.
* Метод требует авторизации Bearer Token.
**Требуемые параметры JSON**
```json
{"owner_id": Integer}
```
**Ответ**
```code
Code 200
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
или
Response {
error_msg: "Логин или пароль введён неверно"
}
```
## Болюсный ввод
### Создание болюсного ввода
### `POST /api/boluses/create`
**Описание**
* История ввода каждой дозы
* Метод требует авторизации Bearer Token.
**Требуемые параметры**
```code
"uid": Integer, айди, испольлзуется для отмены
"timeCreated": Integer, // Время ввода дозы UTC timestamp
"glucoseMeasurementType": String?, // Тип измерения глюкозы (до или после еды)
"glucoseLevel": Double?, // Уровень глюкозы в крови
"breadUnits": Double?, // Количество ХЕ (углеводных единиц)
"calculatedDose": Double?, // Расчетная доза инсулина
"injectionType": String, // Тип инъекции (стандартная, квадратная, шприц-ручка, двойная)
"fastDose": Double?, // Доза быстрого инсулина
"fastDoseInjectionSpeed": Double, // Скорость ввода стд. инсулина (ед/мин)
"squareDose": Double?, // Доза квадратного инсулина
"squareDoseInterval": Double?, // Продолжительность действия квадратной дозы (в секундах)
"comment": String?, // Комментарий к записи
"products": [
{
"uid": Integer, // Идентификатор объекта
"title": String, // Название продукта
"measure": String // Единица измерения
"carbs": Double // Количество углеводов
"breadUnits": Double // Количество ХЕ
},
...
]?, (МОЖЕТ БЫТЬ ПУСТЫМ)
"totalDose": Double, // Общая доза инсулина (расчетная)
"injectionFinishDate": Integer, // Время окончания инъекции
"squareDoseEndDate": Integer?, // Время окончания квадратной дозы
"fastDoseEndDate": Integer?, // Время окончания быстрой дозы
"insulinFormula": String? // Формула рассчёта (только через калькулятор)
```
**Ответ**
```code
Code 200
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
```
### Деактивация ввода всего болюсного инсулина
### `POST /api/boluses/deactivate`
**Требуемые параметры**
```code
"timeDeactivation": Integer,
"all": Boolean//Должно быть true
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
или
Response {
error_msg: "Логин или пароль введён неверно"
}
```
**Ответ**
```code
Code 200
```
### Деактивация Болюсного Ввода (определённого)
### `POST /api/boluses/deactivate`
**Требуемые параметры**
```code=
"uid": Integer,
"timeDeactivation": Integer
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
или
Response {
error_msg: "Логин или пароль введён неверно"
}
```
**Ответ**
```code
Code 200
```
## Базальный ввод
### Активация базального профиля
### `POST /api/basals/activation`
**Описание**
* История ввода доз в базальном режиме
* Метод требует авторизации Bearer Token.
* Может быть активен только один базальный профиль
**Требуемые параметры**
```code
"name": String,
"timeActivation": Integer //Время активации
"uid": Int //Если айди тот же - значит, пользователь отредактировал профиль
"doses": [
{
minute: Double,//От начала дня
speed: Double//Кол-во ед час
}
...
{
minute: Double,//От начала дня
speed: Double//Кол-во ед час
}
]
```
**Ответ**
```code
Code 200
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
```
### Деактивация базального профиля
### `POST /api/basals/deactivation`
**Описание**
* Метод требует авторизации Bearer Token.
**Требуемые параметры**
```code
"uid": Integer,
"timeDeactivation": Integer,
```
**Ответ**
```code
Code 200
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
```
### Создание временного базального профиля
### `POST /api/temporary_basals/create`
**Описание**
* Метод требует авторизации Bearer Token.
* Когда временный профиль активируется, обычный базал встаёт на паузу, пока временный не закончится. Затем обычный возобновляет ввод. Временный профиль - единственный профиль, который можно отложить (начало через 5 часов, например).
**Требуемые параметры (JSON)**
```json
{
"timeCreated": Integer, // Дата создания
"timeStart": Integer, // Время начала (может быть позже создания)
"duration": Integer, // Продолжительность (в секундах)
"uid": Integer,
"dose": Double
}
```
**Ответ**
```code
Code 200
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
```
### Деактивация/удаление врем. базального профиля
### `DELETE /api/temporary_basals/delete`
**Описание**
* Метод требует авторизации Bearer Token.
```code
{
"timeCanceled": Integer, // Время удаления
}
```
**Ответ**
```code
Code 200
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
```
### Настройки приложения
### `POST /api/settings/save`
**Описание**
* История настроек приложения
* Метод требует авторизации Bearer Token.
* Ручной болюс никак не относится к данным, описанным выше. Это ввод при нажатии на кнопку на помпе. Данные с помпы пока не считываются. В дневник записи не ведутся.
**Описание полей**
* **fullName** - ФИО
* **targetGlycemicRange** - 24x часовой диапазон целевой гликемии. Массив данных, каждый элемент массива содержит объект - {hour - час от 1-23, minute - минута 0-59, value - значение}.
* **countCarbsBU** - Заданное и скорректированные значения Углеводов в ХЕ
* **targetCarbsK** - 24x часовой диапазон УК. Массив данных, каждый элемент массива содержит объект - {hour - час от 1-23, minute - минута 0-59, value - значение}.
* **targetISF** - 24x часовой диапазон ФЧИ. Массив данных, каждый элемент массива содержит объект - {hour - час от 1-23, minute - минута 0-59, value - значение}.
**Требуемые параметры (JSON)**
```json
{
"timeUpdated": Integer,//Время сохранения
"fullName": String?,
"targetGlycemicRange": [
{
minute: Double,//От начала дня
speed: Double,//Кол-во ед час
value: Double//Значение ед час
}
....
]?,
"countCarbsBU": Double
"targetCarbsK": [
{
minute: Double,//От начала дня
speed: Double//Кол-во ед час
value: Double//Значение ед час
}
....
]?,
"targetISF": [
{
minute: Double,//От начала дня
speed: Double//Кол-во ед час
value: Double//Значение ед час
}
....
]?,
//"ID": "ID юзера", убрал, он и так получен при регистраци
"manualBolus": Double? // Значение ручного болюса (сколько инсулина введётся, если пользователь нажмёт кнопку на помпе)
}
```
**Ответ**
```code
Code 200
```
**Ответ в случае ошибки**
```code
Code 400
Response {
errors: {
field1: [
"Ошибка 1",
"Ошибка 2"
],
field2: [
"Ошибка 1",
"Ошибка 2"
]
}
}
```
### PDF отчёт
### `GET /api/reports/pdf`
**Описание**
* PDF отчёт
* Метод требует авторизации Bearer Token.
* Параметры ниже опциональные, если их нет, то отчёт формируется за неделю
* Ответ - String base64
* Сервис для проверки base64 - https://base64.guru/converter/decode/pdf
**Параметры**
```code=
"from": String,//Формат dd.mm.yyyy
"to": String, //Формат dd.mm.yyyy
```
**Ответ в случае ошибки**
```code
Code 500 или 403
или
Response {
error_msg: "Логин или пароль введён неверно"
}
```
**Ответ**
```code
Code 200
String base64
```