====== Air Lay ======
==== Navigation ====
* [[en:first|Main page]]
* [[en:api|AirLay API]]
* [[en:api:air-lay-v2|API Air Lay v2]]
----
Раздел в процессе разработки
==== Структура запроса ====
/**
* api/v2/{controller}/{action}?{parameter1=value¶meter1=value&...}
* Где
* controller - контролер в котором производится действие,
* action - действие контроллера,
* parameter1, parameter2 ... - параметры запроса,
* value1, value2 ... - значение параметров
*/
----
==== API ====
/**
* api/{action}
* Где action функция контроллера
*/
/**
* Вход пользователя через name и password
* @return JWT
*/
public function authAction()
/**
* Регистрация пользователя необходимые параметры
* string name
* string password
* string email в формате example@mail ~
*/
public function registrationAction()
/**
* Action for get menu
* @return object free trees and private trees
*/
public function getMenuAction()
/**
* Action for create tree. You can see JSON object descriptions below for more details.
* @name string Name tree
* @return object tree mongoDB object
*/
public function createTreeAction()
/**
* Action for create Node(layerEntity/map/dir). You can see JSON object descriptions below for more details.
* @name string Node name
* @type string type of the node. Values : layerEntity/map/dir
* @treeId ObjectId
* @parentId ObjectId parent of the node
* @order order in the parent's childs. default -1
* @return array ['node'=> nodeInfo]
*/
public function createNodeAction()
/**
* Action for upload objects.
* @layerId object Layer Id
* @file file New objects
* @treeId object Tree Id
* @return string 200 Ok
* 400 code 0 Need layerId, file, treeId
* 400 code 1 File have is not correct type
* 403 если пользователь не может изменить дерево
* 400 code 2 слой не найден
*/
public function uploadLayerAction()
/**
* Action for changing node name.
* @treeId string ObjectId
* @nodeId string ObjectId
* @name string node name
* @return string 200 Ok
*/
public function updateNodeNameAction()
/**
* Action for changing node parent or order.
* @treeId string ObjectId
* @nodeId string ObjectId
* @newParentId string ObjectId
* @order string order number of node in new parent
* @return string 200 Ok
*/
public function moveNodeAction()
/**
* Action for removing node.
* @treeId object Layer Id
* @nodeId object Layer Id
* @return string 200 Ok
*/
public function removeNodeAction()
/**
* Action for changing node name.
* @treeId string ObjectId
* @nodeId string ObjectId
* @name string node name
* @return string 200 Ok
*/
public function updateNodeNameAction()
/**
* Action for group creation.
* @name string group name
* @return string 200 Ok
*/
public function createGroupAction()
/**
* Action for update group settings.
* @id ObjectId group id
* @name string new group name
* @return string 200 Ok
*/
public function updateGroupNameAction()
/**
* Action for update group settings.
* @treeId ObjectId tree which to add
* @groupId ObjectId group where to add
* @return string 200 Ok
*/
public function addTreeToGroupAction()
/**
* Action for update group settings.
* @treeId ObjectId tree which to remove
* @groupId ObjectId group where to remove
* @return string 200 Ok
*/
public function removeTreeFromGroupAction()
/**
* Action return user groups.
* @return string 200 Ok
*/
public function getUserGroupsAction()
/**
* Action for adding user to group.
* @userId string ObjectId.
* @groupId string ObjectId.
* @return string 200 Ok
*/
public function addUserToGroupAction()
/**
* Action set user/tree permissions for group
* @id string ObjectId
* @groupId string ObjectId
* @permissions string group_mask
* @entityName string 'trees'/'users'
* @return string 200 Ok
*/
public function setGroupPermissionsAction()
/**
* Action for deleting user from group.
* @userId string ObjectId.
* @groupId string ObjectId.
* @return string 200 Ok
*/
public function deleteUserFromGroupAction(){
/**
* Action remove user groups.
* @id string ObjectId
* @return string 200 Ok
*/
public function removeGroupAction()
/**
* POST
* Action for product creation.
* @title string group name **necessarily**
* @type string **necessarily**
* @treetIds/@file json array ObjectId of entities which is trees or file with product in zip format **necessarily**
* @groupId if owner of the group
* @description string product description
* @shortDescription string product short description
* @access int interaction_mask
* @icon string base64 icon
* @cost int product cost, default 0, not used at the moment.
* @translation string json product translations, example {"ru":{"title":"Заголовок", "description": "описание на русском", ...}, "en":{...}}
* @return string 200 Ok
*/
public function createProductAction()
/**
* GET
* Action for get product information.
* @productId string ObjectId of entity which is product
* @return string 200 product information
*/
public function getProductAction()
/**
* GET
* Action return all available product, excluding users products.
* Filters:
* @access int interaction_mask,
* @type string (tree/map),
* @point json {"lon":86.696379, "lat":54.153597}
* @return string 200 product information
*/
public function getProductsAction()
/**
* GET
* Action for purchase product
* @productId string ObjectId of entity which is product
* @return string 200 OK
*/
public function purchaseProductAction()
/**
* POST
* Action for product update.
* @productId string ObjectId of entity which is product **necessarily**
* @title string product name
* @treeIds json array ObjectId trees
* @file file in zip format
* @description string product description
* @shortDescription string product short description
* @access int interaction_mask
* @icon string base64 icon
* @cost map string - double.
* @translation string json product translations, example {"ru":{"title":"Заголовок", "description": "описание на русском", ...}, "en":{...}}
* @return string 200 Ok
*/
public function updateProductAction()
/**
* GET
* Action for product remove from user or from bd if user is owner.
* @productId string ObjectId of entity which is product
* @return string 200 Ok
*/
public function removeProductAction()
/**
* GET
* Action for product get version.
* @productId string ObjectId of entity which is product
* @return string 200 product version
*/
public function getProductVersionAction()
/**
* Action for get user products
* return string 200 user products
*/
public function getUserProductsAction()
/**
* GET
* @text string feedback text
* @productId ObjectId product id
* @return string 200 Ok
*/
public function postFeedbackAction()
/**
* GET
* @productId ObjectId product id
* @return array 200 product feedback
*/
public function getProductFeedbackAction()
/**
* GET
* Action for get product file
* @productId ObjectId product id
* @return product file
*/
public function getProductFileAction()
/**
* Action set sidebar text pattern.
* @layerId string ObjectId
* @pattern string sidebar text pattern
* @return string 200 Ok
*/
public function setSideBarAction()
/**
* Action get sidebar text pattern.
* @layerId string ObjectId
* @return string 200 Ok
*/
public function getSideBarAction()
/**
* Action find user by name.
* @name string userName regexp.
* if name =='' return all users, else search by regexp
* @return string 200 [userId,name]
*/
public function findUsersByNamesAction()
/**
* Action find tree by name.
* @name string treeName regexp.
* @return string 200 [treeId,name]
*/
public function searchTreeByNameAction()
/**
* GET
* Action get translation array
* @language language code en/ru
* @return 200, json translation
*/
public function getTranslateAction()
/**
* POST
* Action create layers object
* @layerId ObjectId layers id
* @treeId ObjectId tree Id
* @geometry string geo json geometry
* @properties string json properties
* @return 200 new objectId
*/
public function createObjectAction()
/**
* POST
* Action update layers object
* @objectId ObjectId layer object id
* @layerId ObjectId layer id
* @treeId ObjectId tree Id
* @objectId ObjectId layer object id
* @geometry geojson geometry
* @properties json properties
* @return 200 Ok
*/
public function updateObjectAction()
/**
* POST
* Action remove layers object
* @treeId ObjectId tree id
* @layerId ObjectId layer id
* @objectId ObjectId layer object id
* @return 200 Ok
*/
public function removeObjectAction()
/**
* POST
* Action change the layer for a layer object
* @layerId objectId layers id
* @newLayerId objectId new layers id
* @treeId ObjectId tree id
* @objectId ObjectId layer object id
* @return 200 Ok
*/
public function changeLayerObjectAction()
/**
* Action activate users devices.
* @request string *
* @providerId string *
* @receipt string for iOs devices.
* @web int if from webbrowser
* @os string devices OS
* @purchaseId string purchaseToken or pincode
* @return 200 Ok
*/
public function activationAction()
/**
* POST
* Action confirm paid products
* @productId objectId product id
* @purchaseName string purchases name
* @return 200 Ok
*/
public function productPayConfirmAction()
/**
* GET
* Action get unconfirmed paid products
* @return 200 Ok json
*/
public function getUnconfirmedPaidProductAction()
/**
* GET
* Action get help objects
* @return 200 Ok json help objects
*/
public function getHelpAction()
/**
* POST
* Action add help object
* @help json help object
* @file file help media file
* @return 200 Ok
*/
public function addHelpAction()
/**
* POST
* Action update the help object
* @helpObjectId objectId help object id
* @help json help object
* @file file help media file
* @return 200 Ok
*/
public function updateHelpAction()
/**
* POST
* Action remove help object
* @helpObjectId objectId help object id
* @return 200 Ok
*/
public function removeHelpAction()
**Tree**
{
_id: ObjectID;
"properties": {
"type": "tree",
"name": string,
"ownerId": ObjectID,
"shared": "free"/"private",
},
"children": []/null;
}
**Directory**
{
_id: ObjectID;
"properties": {
"type": "dir";
"name": string;
},
"children": []/null;
}
**Layer**
{
"properties": {
"type": "layer",
"api": string,
"alias": ObjectID
},
"children": []/null
}
**Layer Entity**
{
_id: ObjectID;
"properties": {
"type": "layerEntity",
"name": string,
"index": [],
"api": string/null
},
"children": []/null,
"options": [standartLayerOptions]
}
==== Map ====
{
_id: ObjectID;
properties: {
type: "map";
typeMap: "osm"/"2gis"/"mapbox"/"yandex"/"google",
name: string;
url: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
urlCache: "http://cache.mrgis02.mrsks.local/osm/{z}/{x}/{y}.png",
options: {
maxZoom: 18
},
checked: 1,
cache: 0,
}
}
==== overlayLayer ====
{
"properties": {
"type": "overlayLayer",
"name": "Зоны с особыми условиями использования территории",
"url": "//pkk5.rosreestr.ru/arcgis/rest/services/Cadastre/ZONES/MapServer/export?",
"options": {
"format": "image/png",
"transparent": "true",
"tileSize": 256,
"zIndex": 100,
"shiftX": 0,
"shiftY": 0,
"maxZoom": 18
},
"checked": false
}
}
==== Tokens ====
Response header
// Access open
Authorization: 0;
// Expired token
Authorization: 1;
// Access denied
Authorization: 2;
// Some error
Authorization: 3;
// Refresh Token
refresh_token : some_token;
// Access Token
access_token : some_token;
==== Users ====
{
_id: ObjectID,
name: string,
email: string,
password: bcrypt,
time: time,
groups: [
groupId(ObjectID),
groupId(ObjectID)
],
products: [
productId(ObjectID),
productId(ObjectID)
]
}
==== Interaction mask (interaction_mask) ====
// 0 uses for invisible groups or products. Users can get access from owner invite only.
0 - invite
// Users can sent invite to owner groups or products.
1 - private
// Users can join to group without limitations.
2 - public
// Users can buy product.
3 - buy
// Users can get product, if they have premium account.
4 - premium
==== Mask of access for groups (group_mask) ====
// Mask of access to group/product. Can take 3 values 1 - read, 2 - write, 4- access.
// For groups
Read allows to see group members, write allows to add group members, access allows do delete and configure group.
// For example
// User doesn't have access to group/product.
0
//user has access to group/product.
4
==== Groups ====
{
_id: ObjectID,
name: string
access: interaction_mask,
users: [
{
userId: ObjectID,
mask: group_mask
}
],
tree: [
{
treeId: ObjectID,
mask: group_mask
}
],
}
==== Products ====
{
_id: ObjectID,
owner: {
userId/groupId : ObjectID
},
treeIds[]/file: ObjectID/filepath,
type: string(tree/map),
access: interaction_mask,
title: string,
description: text,
shortDescription: text,
shortDescription: text,
icon: icon,
cost: [
string(ISO 3166-1 alpha-3) : double,
...
],
users: [
ObjectID
],
purchaseId : string
}
==== Translations ====
{
"_id" : ObjectId,
"language" : string,
"code" : string,
"phrases" : {
"phrases" : "phrases translate",
...
}
}
==== Orders ====
{
"_id" : ObjectId,
"userId" : ObjectId,
"providerId" : ObjectId,
"productId" : ObjectId/string,
"softExpire" : int,
"hardExpire" : int,
"cost" : float,
"date" : Date,
"activation" : {
"token" : string,
"activated" : boolean,
"activatedDate" : Date,
"deviceId" : string,
"serialNumber" : stirng,
"expired" : boolean
}
}
==== Helps ====
{
title : string,
order : int,
text: string,
url: string,
type: string("Video"/"Image")
}
==== Users role ====
0 - **map user** пользователь портала созданого cms user-ом, может находится в группах созданных cms user-ом, создаётся при регистрации в портале cms user-а, добавлении cms user-ом, и при встраивании БД заказчика.
1 - **cms user** пользователь CMS имеет возможность генерировать порталы и создавать пользователей 0 уровня, создаётся при регистрации в AirLay
2 - **brand user** пользователь Администратор системы AirLay доступны конфигурации бренда системы и работы с базой системы, создаётся при инициализации системы на сервере