Initial commit
This commit is contained in:
21
Smart Lift Access Production.postman_environment.json
Normal file
21
Smart Lift Access Production.postman_environment.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"id": "6aa0ecde-17c7-4621-94f8-bfb1561431af",
|
||||
"name": "Smart Lift Access Production",
|
||||
"values": [
|
||||
{
|
||||
"key": "base_url",
|
||||
"value": "https://api.smartelevator.ru",
|
||||
"type": "default",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "base_api_url",
|
||||
"value": "https://api.smartelevator.ru/api/v1",
|
||||
"type": "default",
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"_postman_variable_scope": "environment",
|
||||
"_postman_exported_at": "2024-10-02T07:25:49.949Z",
|
||||
"_postman_exported_using": "Postman/11.15.0"
|
||||
}
|
||||
943
Smart Lift Access.postman_collection.json
Normal file
943
Smart Lift Access.postman_collection.json
Normal file
@@ -0,0 +1,943 @@
|
||||
{
|
||||
"info": {
|
||||
"_postman_id": "24ed5c75-9fbc-4910-9c07-4b9d55e26d5f",
|
||||
"name": "Smart Lift Access",
|
||||
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
|
||||
"_exporter_id": "2286120"
|
||||
},
|
||||
"item": [
|
||||
{
|
||||
"name": "Controller",
|
||||
"item": [
|
||||
{
|
||||
"name": "Read Config",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [
|
||||
{
|
||||
"key": "X-Api-Key",
|
||||
"value": "{{controller_api_key}}"
|
||||
},
|
||||
{
|
||||
"key": "Accept",
|
||||
"value": "application/json"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me/groups",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me",
|
||||
"groups"
|
||||
]
|
||||
},
|
||||
"description": "Чтение текущей конфигурации группы лифтов"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Upload Config",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "X-Api-Key",
|
||||
"value": "{{controller_api_key}}"
|
||||
},
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Accept",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Accept-Encoding",
|
||||
"value": "gzip"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"lifts\": [\n {\n \"allowed\": [\n -5,\n -4,\n -3,\n -2,\n -1,\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22\n ],\n \"tech\": [\n 10,\n 20\n ],\n \"id\": \"QW123450\",\n \"vip\": [\n 23\n ],\n \"type\": \"CARGO\",\n \"name\": \"Большой грузовой лифт\",\n \"lobby\": [\n 0\n ]\n },\n {\n \"allowed\": [\n -5,\n -4,\n -3,\n -2,\n -1,\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22\n ],\n \"tech\": [\n 10,\n 20\n ],\n \"id\": \"QW123451\",\n \"vip\": [\n 23\n ],\n \"type\": \"CARGO\",\n \"name\": \"Большой грузовой лифт\",\n \"lobby\": [\n 0\n ]\n },\n {\n \"allowed\": [\n -5,\n -4,\n -3,\n -2,\n -1,\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22\n ],\n \"tech\": [\n 10,\n 20\n ],\n \"id\": \"QW123452\",\n \"vip\": [\n 23\n ],\n \"type\": \"CARGO\",\n \"name\": \"Большой грузовой лифт\",\n \"lobby\": [\n 0\n ]\n },\n {\n \"allowed\": [\n -5,\n -4,\n -3,\n -2,\n -1,\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22\n ],\n \"tech\": [\n 10,\n 20\n ],\n \"id\": \"QW123453\",\n \"vip\": [\n 23\n ],\n \"type\": \"CARGO\",\n \"name\": \"Большой грузовой лифт\",\n \"lobby\": [\n 0\n ]\n }\n ],\n \"readers\": [\n {\n \"id\": \"reader1\",\n \"name\": \"Считыватель в кабине большого грузового лифта\",\n \"location\": \"CABIN\",\n \"lift_id\": \"QW123450\"\n },\n {\n \"id\": \"reader2\",\n \"name\": \"Считыватель в холе\",\n \"location\": \"LOBBY\"\n },\n {\n \"id\": \"reader3\",\n \"name\": \"Считыватель на парковке\",\n \"location\": \"PARKING\"\n }\n ]\n}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_url}}/controller/config",
|
||||
"host": [
|
||||
"{{base_url}}"
|
||||
],
|
||||
"path": [
|
||||
"controller",
|
||||
"config"
|
||||
]
|
||||
},
|
||||
"description": "Загружает кофигурацию группы лифтов на сервер. Конфигурация перезаписывается."
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Objects",
|
||||
"item": [
|
||||
{
|
||||
"name": "Images",
|
||||
"item": [
|
||||
{
|
||||
"name": "Upload Image",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "multipart/form-data"
|
||||
},
|
||||
{
|
||||
"key": "Accept",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "formdata",
|
||||
"formdata": [
|
||||
{
|
||||
"key": "image",
|
||||
"type": "file",
|
||||
"src": []
|
||||
}
|
||||
]
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/objects/36DCD807-43CE-467B-869D-1EBA9502B3A8/image",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"objects",
|
||||
"36DCD807-43CE-467B-869D-1EBA9502B3A8",
|
||||
"image"
|
||||
]
|
||||
},
|
||||
"description": "Загрузка изображения для объекта. \nMultipart\nОбязательный параметр image\nContent-Type: image/jpeg\nМаксимальный размер изображения 1Мб\nПоддерживается только jpg"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Get Image",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [
|
||||
{
|
||||
"key": "Accept",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/objects/7C733991-1E73-4532-A444-30217E8EFD16/image?width=300",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"objects",
|
||||
"7C733991-1E73-4532-A444-30217E8EFD16",
|
||||
"image"
|
||||
],
|
||||
"query": [
|
||||
{
|
||||
"key": "width",
|
||||
"value": "300",
|
||||
"description": "Изменяет размер изображения, учитывая соотношение сторон"
|
||||
}
|
||||
]
|
||||
},
|
||||
"description": "Картинка объекта\nПоддерживается изменения размера. Для именения размера оригинального размера необходимо указать параметр width"
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Object List",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [
|
||||
{
|
||||
"key": "Accept",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/objects",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"objects"
|
||||
]
|
||||
},
|
||||
"description": "Возвращает список всех объектов, зарегистрированных в системе, с групами и лифтами.\nЕсли текущий пользователь является администратором, то для каждой группы возвращается список считывателей\nПример ответа:\n`\n[\n {\n \"id\": \"6AED41C9-A355-46A5-9C1B-41079E25176E\",\n \"name\": \"Тестовый объект 1\"\n \"address\": \"Адрес тестового объекта 1\",\n // Список групп лифтов на объекте\n \"groups\": [\n {\n \"id\": \"BC3DD872-54B5-4090-8735-1FC729C3E43E\",\n \"name\": \"Подъезд №7\",\n // Список лифтов в группе\n \"lifts\": [\n {\n \"id\": \"XO-CRG-1\",\n \"name\": \"3\",\n // Тип лифта. Возможные значения:\n // - UNIVERSAL\n // - PASSENGER\n // - CARGO\n \"type\": \"CARGO\",\n \"allowed\": [ 1, 2, 3, 4, 6],\n \"lobby\": [ 1, -1, -2 ],\n \"tech\": [ 5 ],\n \"vip\": []\n },\n // Список считывателей. Возвращается только если текущий пользователь является авминистратором\n \"readers\": [\n {\n \"name\": \"В холле\",\n \"id\": \"r1\",\n \"floor\": 1,\n // Место установки считывателя. Возможные значения:\n // Возмжные значения:\n // - ENTRANCE\n // - PARKING\n // - LOBBY\n // - CABIN\n // Если указан тип CABIN поле lift_id должно быть не null\n \"location\": \"LOBBY\"\n },\n {\n \"id\": \"r4\",\n \"name\": \"Лифт 1\",\n \"location\": \"CABIN\",\n // Обязательное поле, если location == CABIN\n \"lift_id\": \"XO-UNI-1\"\n }\n ]\n }\n ]\n }\n]\n`"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Get Object By Id",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [
|
||||
{
|
||||
"key": "Accept",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/objects/6AED41C9-A355-46A5-9C1B-41079E25176E",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"objects",
|
||||
"6AED41C9-A355-46A5-9C1B-41079E25176E"
|
||||
]
|
||||
},
|
||||
"description": "Возвращает список всех объектов, зарегистрированных в системе."
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Create Object",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Accept",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\"name\":\"\\u0422\\u0435\\u0441\\u0442\\u043e\\u0432\\u044b\\u0439 \\u043e\\u0431\\u044a\\u0435\\u043a\\u0442 98\",\"address\":\"\\u0410\\u0434\\u0440\\u0435\\u0441\\u0441 \\u0442\\u0435\\u0441\\u0442\\u043e\\u0432\\u043e\\u0433\\u043e \\u043e\\u0431\\u044a\\u0435\\u043a\\u0442\\u0430 98\"}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/objects",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"objects"
|
||||
]
|
||||
},
|
||||
"description": "Создание объекта"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Modify Object",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "PATCH",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Accept",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\"name\":\"\\u0422\\u0435\\u0441\\u0442\\u043e\\u0432\\u044b\\u0439 \\u043e\\u0431\\u044a\\u0435\\u043a\\u0442 99\",\"address\":\"\\u0410\\u0434\\u0440\\u0435\\u0441\\u0441 \\u0442\\u0435\\u0441\\u0442\\u043e\\u0432\\u043e\\u0433\\u043e \\u043e\\u0431\\u044a\\u0435\\u043a\\u0442\\u0430 99\"}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/objects/6AED41C9-A355-46A5-9C1B-41079E25176E",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"objects",
|
||||
"6AED41C9-A355-46A5-9C1B-41079E25176E"
|
||||
]
|
||||
},
|
||||
"description": "Редактрование объекта"
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Auth",
|
||||
"item": [
|
||||
{
|
||||
"name": "Send Code",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\"phone\":\"+79037602666\"}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_url}}/auth/v1/code",
|
||||
"host": [
|
||||
"{{base_url}}"
|
||||
],
|
||||
"path": [
|
||||
"auth",
|
||||
"v1",
|
||||
"code"
|
||||
]
|
||||
},
|
||||
"description": "Отправляет СМС с одноразовым паролем на указанный номер телефона. В ответе возвращается время, до которого пароль действует. \nЕсли время действия предыдущего пароля еще не закончилось, то новый пароль не отправляется и в ответе возвращается время действия текущего пароля. \nНомер телефона должен быть в международном формате (начинаться с +)"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Login",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"phone\": \"+79037602666\",\n \"code\": \"184163\"\n}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_url}}/auth/v1/token",
|
||||
"host": [
|
||||
"{{base_url}}"
|
||||
],
|
||||
"path": [
|
||||
"auth",
|
||||
"v1",
|
||||
"token"
|
||||
]
|
||||
},
|
||||
"description": "Вход в систему по номеру телефона и одноразовому паролю.\nВ ответе возвращает:\n- access_token: Токен используется для авторизации запросов к API путем передачи заголовкa\n\"Authorization: Bearer access_token\". \n- expires_at: Время до которого действителен access_token \n- refresh_token: Токен для обновления access_token после того как истечет его время действия"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Refresh Token",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\"refresh_token\":\"Yl4qV8/q7NVEcxh9bxnaF8wygw5f7tOXFBhDDHEdlqQ=\"}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_url}}/auth/v1/token/refresh",
|
||||
"host": [
|
||||
"{{base_url}}"
|
||||
],
|
||||
"path": [
|
||||
"auth",
|
||||
"v1",
|
||||
"token",
|
||||
"refresh"
|
||||
]
|
||||
},
|
||||
"description": "Обновление токенов. В запросе надо передать refresh_token, если токен валиден то возвращается новые access и refresh токены. Если токен был отозван то вернется 401 ошибка.\nВ ответе возвращает:\n- access_token: Токен используется для авторизации запросов к API путем передачи заголовкa\n\"Authorization: Bearer access_token\". \n- expires_at: Время до которого действителен access_token \n- refresh_token: Токен для обновления access_token после того как истечет его время действия"
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Users",
|
||||
"item": [
|
||||
{
|
||||
"name": "Group Access",
|
||||
"item": [
|
||||
{
|
||||
"name": "Group Access List",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me/groups",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me",
|
||||
"groups"
|
||||
]
|
||||
},
|
||||
"description": "Возвращает список групп к которым у пользователя есть доступ. Если текщий пользователь является администратором, то он может делать запрос для любого пользователя"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Grant Group Access",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\"group_id\":\"BC3DD872-54B5-4090-8735-1FC729C3E43E\",\"preferred_lift_id\":\"QW12345\",\"preferred_floor\":0,\"lobby_floor\":0}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me/groups",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me",
|
||||
"groups"
|
||||
]
|
||||
},
|
||||
"description": "Привязать группу к пользователяю.\nАдминистратор может привязывать группы для любого пользователя.\n"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Modify Group Access",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "PATCH",
|
||||
"header": [
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"preferred_lift_id\": \"qwer\",\n \"preferred_floor\": 123,\n \"lobby_floor\": 999\n}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me/groups/893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me",
|
||||
"groups",
|
||||
"893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17"
|
||||
]
|
||||
},
|
||||
"description": "Изменение параметров доступа к группе"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Send Command",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\"cmd\":\"call\",\"data\":{\"floor\":\"1\"}}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me/groups/893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17/command",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me",
|
||||
"groups",
|
||||
"893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17",
|
||||
"command"
|
||||
]
|
||||
},
|
||||
"description": "Отправить команду группе лифтов.\n```\n{\n \"cmd\": \"call\",\n \"data\": {\n \"floor\": 1\n }\n}\n\n```"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Delete Group Access",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "DELETE",
|
||||
"header": [
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me/groups/BC3DD872-54B5-4090-8735-1FC729C3E43E",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me",
|
||||
"groups",
|
||||
"BC3DD872-54B5-4090-8735-1FC729C3E43E"
|
||||
]
|
||||
},
|
||||
"description": "Отозвать доступ пользователя к группе\nАмининистратор может отзывать доступ у любого пользователя"
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Presets",
|
||||
"item": [
|
||||
{
|
||||
"name": "Get Group Floor Presets List",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me/groups/893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17/presets",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me",
|
||||
"groups",
|
||||
"893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17",
|
||||
"presets"
|
||||
]
|
||||
},
|
||||
"description": "Возвращает список предустановленных этажей для группы. Возвращаются как общие этажи так и пользовательские"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Delete Floor Preset",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "DELETE",
|
||||
"header": [
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me/groups/893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17/presets/988CA5E3-7982-4F9B-9A96-1F54FB61B8C4",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me",
|
||||
"groups",
|
||||
"893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17",
|
||||
"presets",
|
||||
"988CA5E3-7982-4F9B-9A96-1F54FB61B8C4"
|
||||
]
|
||||
},
|
||||
"description": "Возвращает список групп к которым у пользователя есть доступ. Если текщий пользователь является администратором, то он может делать запрос для любого пользователя"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Create Floor Preset",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\"name\":\"\\u0411\\u0430\\u0441\\u0441\\u0435\\u0439\\u043d \\u043d\\u0430 \\u043a\\u0440\\u044b\\u0448\\u0435\",\"floor\":100}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me/groups/893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17/presets",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me",
|
||||
"groups",
|
||||
"893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17",
|
||||
"presets"
|
||||
]
|
||||
},
|
||||
"description": "Возвращает список групп к которым у пользователя есть доступ. Если текщий пользователь является администратором, то он может делать запрос для любого пользователя"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Modify Floor Preset",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "PATCH",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\"name\":\"\\u0411\\u0430\\u0441\\u0441\\u0435\\u0439\\u043d \\u043d\\u0430 \\u043a\\u0440\\u044b\\u0448\\u0435\",\"floor\":100}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me/groups/893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17/presets",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me",
|
||||
"groups",
|
||||
"893995CF-6DAC-4A6E-83CE-3DDC2FC1EB17",
|
||||
"presets"
|
||||
]
|
||||
},
|
||||
"description": "Возвращает список групп к которым у пользователя есть доступ. Если текщий пользователь является администратором, то он может делать запрос для любого пользователя"
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Create User",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\"name\":\"Имя Пользователя\",\"phone\":\"+79037602667\",\"is_phone_confirmed\":false,\"is_active\":false,\"is_admin\":true}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users"
|
||||
]
|
||||
},
|
||||
"description": "Создание пользователя. Нужны права администратора."
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Modify User",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "PATCH",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
},
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\"name\":\"\\u0418\\u043c\\u044f \\u041f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\"}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me"
|
||||
]
|
||||
},
|
||||
"description": "Изменения данных пользователя. Нужны права администратора, кроме случая когда указан user_id текущего пользователя"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "User List",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users?page=1&per=10",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users"
|
||||
],
|
||||
"query": [
|
||||
{
|
||||
"key": "page",
|
||||
"value": "1",
|
||||
"description": "Страница которую надо вернуть. Первая страница 1"
|
||||
},
|
||||
{
|
||||
"key": "per",
|
||||
"value": "10",
|
||||
"description": "Кол-во записей на странице"
|
||||
}
|
||||
]
|
||||
},
|
||||
"description": "Список пользователей с пагинацией. Нужны права администратора"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Get User",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me"
|
||||
]
|
||||
},
|
||||
"description": "Пользователь"
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Get Сurrent User",
|
||||
"protocolProfileBehavior": {
|
||||
"followRedirects": false,
|
||||
"followOriginalHttpMethod": false,
|
||||
"followAuthorizationHeader": false
|
||||
},
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [
|
||||
{
|
||||
"key": "Authorization",
|
||||
"value": "Bearer {{access_token}}"
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"raw": "{{base_api_url}}/users/me",
|
||||
"host": [
|
||||
"{{base_api_url}}"
|
||||
],
|
||||
"path": [
|
||||
"users",
|
||||
"me"
|
||||
]
|
||||
},
|
||||
"description": "Пользователь"
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
31
WebSocket-ClientMessages.md
Normal file
31
WebSocket-ClientMessages.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Сообщения клиента
|
||||
|
||||
## Исходящие (сервер->клиент)
|
||||
|
||||
### state
|
||||
|
||||
- **type** - `state`
|
||||
|
||||
- **data** - Не *null
|
||||
|
||||
```javascript
|
||||
{
|
||||
// Идентификатор лифта
|
||||
"lift_id": "XO-CRG-3",
|
||||
// Состояние кабины лифта
|
||||
// Возможные варианты:
|
||||
// * STOPPED - лифт стоит
|
||||
// * MOVE_UP - лифт поднимается
|
||||
// * MOVE_DOWN - лифт опускается
|
||||
"car_state": "MOVE_UP",
|
||||
// Состояние дверей лифта
|
||||
// Возможные варианты:
|
||||
// * DOOR_OPENING
|
||||
// * DOOR_OPENED
|
||||
// * DOOR_CLOSING
|
||||
// * DOOR_CLOSED
|
||||
"door_state": "DOOR_CLOSED",
|
||||
// Этаж на котором находится лифт
|
||||
"floor": -1
|
||||
}
|
||||
```
|
||||
129
WebSocket-ControllerMessages.md
Normal file
129
WebSocket-ControllerMessages.md
Normal file
@@ -0,0 +1,129 @@
|
||||
# Сообщения контролера
|
||||
|
||||
## Входящие (контроллер->сервер)
|
||||
|
||||
### config
|
||||
|
||||
+ **type** - ```config```
|
||||
|
||||
+ **data** - Не *null*
|
||||
|
||||
```javascript
|
||||
{
|
||||
// Список лифтов
|
||||
"lifts":
|
||||
[
|
||||
{
|
||||
"id": "QW12345",
|
||||
"name": "Большой грузовой лифт",
|
||||
// Тип лифта. Может быть одним из следующих значений
|
||||
// - UNIVERSAL
|
||||
// - PASSENGER
|
||||
// - CARGO
|
||||
"type": "CARGO",
|
||||
// Этажи, на которорых лифт может останавливаться
|
||||
"allowed":
|
||||
[
|
||||
-5,-4,-3,-2,-1,
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
||||
10,11,12,13,14,15,16,17,18,19,
|
||||
20,21,22
|
||||
],
|
||||
"vip": [23],
|
||||
"lobby": [0],
|
||||
"tech": [10, 20]
|
||||
}
|
||||
],
|
||||
// Список считывателей установленных в группе
|
||||
"readers":
|
||||
[
|
||||
{
|
||||
// Идентификатор считывателя (уникальный для группы)
|
||||
"id": "reader1",
|
||||
// Название
|
||||
"name": "Считыватель в кабине большого грузового лифта",
|
||||
// Расположение считывателя
|
||||
// Возмжные значения:
|
||||
// - ENTRANCE
|
||||
// - PARKING
|
||||
// - LOBBY
|
||||
// - CABIN
|
||||
// Если указан тип CABIN поле lift_id должно быть не null
|
||||
"location": "CABIN",
|
||||
// Идентификатор лифта, в котором установлен считыватель
|
||||
// Значение должно соответствовать одному из значений в списке лифтов
|
||||
"lift_id": "QW12345"
|
||||
},
|
||||
{
|
||||
"id": "reader2",
|
||||
"name": "Считыватель в холе",
|
||||
"location": "HALL"
|
||||
},
|
||||
{
|
||||
"id": "reader3",
|
||||
"name": "Считыватель на парковке",
|
||||
"location": "PARKING"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Исходяшие (сервер->контроллер)
|
||||
|
||||
### cmd
|
||||
|
||||
- **type** - `cmd`
|
||||
|
||||
- **data** - Не *null*
|
||||
|
||||
```javascript
|
||||
{
|
||||
// Команда
|
||||
// В данный момент call единственная поддерживаемая команда
|
||||
// Вызывает лифт на указанный этаж
|
||||
"cmd": "call",
|
||||
// String, Обязательный параметр
|
||||
// Идентификатор предпочитаемого лифта
|
||||
"lift_id": "<lift_id>"
|
||||
// Int, Обязательный параметр
|
||||
// Этаж на который необходимо вызвать лифт
|
||||
"floor": 1,
|
||||
// UUID, Обязательный параметр
|
||||
// Идентификатор пользователя вызывающего лифт
|
||||
"user_id": "<user_id>"
|
||||
}
|
||||
```
|
||||
|
||||
### users
|
||||
|
||||
Сервер присылает сообщение сразу после подключения, а так же каждый раз при измении списка пользователей, имееющих доступ к данной группе лифтов
|
||||
|
||||
- **type** - `cmd`
|
||||
|
||||
- **data** - Не *null*. Cписок пользователей, имеющих доступ к данной группе лифтов
|
||||
|
||||
```javascript
|
||||
[
|
||||
{
|
||||
// Идентификатор пользователя,
|
||||
// используется для идентификации пользователя считывателем
|
||||
// UUID, обязательный параметр
|
||||
"user_id": "<user_id>",
|
||||
// Идентификатор предпочитаемого лифта
|
||||
// String, не обязательный параметр
|
||||
"favorite_lift": "QW12345",
|
||||
// Домашний этаж пользователя
|
||||
// Int, не обязательный параметр
|
||||
"home_floor": 1,
|
||||
// Предпочитаемый этаж лобби
|
||||
// Int, не обязательный параметр
|
||||
"lobby_floor": 0
|
||||
},
|
||||
{
|
||||
"user_id": "<user_id>"
|
||||
"favorite_lift": "QW12345",
|
||||
"home_floor": 4,
|
||||
"lobby_floor": 0,
|
||||
}
|
||||
]
|
||||
```
|
||||
55
WebSocket.md
Normal file
55
WebSocket.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# WebSocket
|
||||
|
||||
## Подключение
|
||||
|
||||
Сервер предоставляет 2 url для подключения к WebSocket:
|
||||
|
||||
+ Для контроллера группы лифтов
|
||||
```wss://{base_url}/ws/v1/controller```
|
||||
+ Для клиентских приложений
|
||||
```wss://{base_url}/ws/v1/client```
|
||||
|
||||
## Передача данных
|
||||
|
||||
Передача данных происходит путем отправки бинарных сообщений. Сообщение представляет из себя *json* следующей структуры:
|
||||
|
||||
```javascript
|
||||
{
|
||||
// Идентификатор типа сообщения
|
||||
"type": "auth",
|
||||
// Данные соответствующие типу сообщения
|
||||
// !!!Формат данных различен для сообщений с одинаковым типом на разных url
|
||||
"data": "token"
|
||||
}
|
||||
```
|
||||
|
||||
:boom: Внимание!!!
|
||||
Формат данных различен для сообщений с одинаковым типом на разных [url](#%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5), кроме сообщения [auth](#%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)
|
||||
|
||||
* [Описание сообщений контроллера](./WebSocket-ControllerMessages.md)
|
||||
* [Описание сообщений клиента](./WebSocket-ClientMessages.md)
|
||||
|
||||
## Авторизация
|
||||
|
||||
Авторизация происходит путем отправки сообщения [auth](#auth) сразу после установки соединения. Если сервер не получает сообщение в течении **10** сек после подключения, то соединение закрывается. Так же соединение закрывается, если первое сообщение после соединения не соответствует формату сообщения [auth](#auth). Все последующие отправки данного сообщения игнорируются.
|
||||
|
||||
```javascript
|
||||
{
|
||||
// Тип сообщения
|
||||
"type": "auth",
|
||||
// Для контроллера *api_key*, созданный при добавлении группы в БД
|
||||
// Для клиента *access_token*, полученный после авторизации.
|
||||
"data": "<access_token|api_key>"
|
||||
}
|
||||
```
|
||||
|
||||
При успешной авторизации сервер присылает сообщение:
|
||||
|
||||
```javascript
|
||||
{
|
||||
"type": "auth",
|
||||
"data": true
|
||||
}
|
||||
```
|
||||
|
||||
При неуспешной авторизации соединение закрывается c кодом закрытия **1008**
|
||||
Reference in New Issue
Block a user