====== Air Lay API v2 устарело====== ==== Navigation ==== * [[ru:first|Главная]] * [[ru:dsp:first|Web]] * [[ru:dsp:airlay:api|API]] * [[ru:dsp:api:air-lay|API Air Lay]] * [[ru:airlay:examples|Примеры данных]] ---- Раздел в процессе разработки ==== Структура запроса ==== /** * api/v2/{controller}/{action}?{parameter1=value¶meter1=value&...} * Где * controller - контролер в котором производится действие, * action - действие контроллера, * parameter1, parameter2 ... - параметры запроса, * value1, value2 ... - значение параметров */ post запрос raw с json { "version": 1, "kadNum": "24:11:0055:24:007", "inCity": true, "dCity": 300, "dOverCity": 500, "dMax": 100000, "maxAcc": 0.4, "centreArea": [ 92.36016614096505, 55.957195305775436 ], "objects": [ { "dist": 45.5630759568201, "tplnr": "PS035-000403" }, { "dist": 54.000446032760856, "tplnr": "PS035-000401" }, { "dist": 62.82547067059525, "tplnr": "TP006-0001461" }, { "dist": 66.31874139095346, "tplnr": "TP006-0001462" }, { "dist": 68.20241607817265, "tplnr": "TP006-0001470" }, { "dist": 71.39020177489581, "tplnr": "TP006-0001469" }, { "dist": 75.6531728989073, "tplnr": "PS035-000402" }, { "dist": 174.46758937820385, "tplnr": "TP006-0001467" }, { "dist": 175.78817558695735, "tplnr": "PS035-000400" }, { "dist": 176.235569705586, "tplnr": "TP006-0001468" }, { "dist": 283.7276110218554, "tplnr": "PS110-000402" } ] } ==== API ==== /** * GET * Вход пользователя через name и password * @return JWT */ /user/auth /** *GET * Регистрация пользователя необходимые параметры * string name * string password * string email в формате example@mail ~ */ /user/registration /** * GET * Action for get menu * @return object free trees and private trees */ /user/getmenu /** * POST * Action for create tree. You can see JSON object descriptions below for more details. * @name string Name tree * @return object tree mongoDB object */ /node/createtree /** * GET * Get layer objects by parameters. * @id layer id * Coordinates * @lat1 * @lat2 * @lon1 * @lon1 * @return object tree mongoDB object */ /api/v2/node/getObjs /** * POST * Action get layer objects info * @collections json * {"collections" : [ * { * "name" : "layersId", * "layers" : [objectId, objectId, ...] * }, * ... * ]} * @return json */ /api/v2/node/getObjsInfo /** * Action for create Node(layerEntity/dir). You can see JSON object descriptions below for more details. * @name string Node name * @type string type of the node. Values : layerEntity/dir * @treeId ObjectId the id of the tree in which the node is inserted * @parentId ObjectId parent of the node * @order order in the parent's childs. default -1 * @return array ['node'=> nodeInfo] */ /api/v2/node/createNode /** * Action for upload objects. * @layerId object Layer Id * @_FILES['json'] file with the geojson feature collection * @return string 200 Ok */ /api/v2/uploadLayer /** * @param ObjectId $layerId Layer Id * @param string $format file format json/kml/dxf * @param string $filename file name * @return 200 Ok json/kml/dxf/gml file * @deprecated * Action for download layer objects. * Filter by coordinates. Bounds is bbox(2 points) or polygon(<2 points). * Example [[42.729949951171875, 43.23419794321918], * [42.729949951171875,44.143783302207424 ], * [44.20074462890625,44.143783302207424], * [44.20074462890625,43.23419794321918]] * Filter by properties. Parameter name must be equal properties name. */ /api/v3/node/downloadLayer /** * Action for changing node name. * @treeId string ObjectId * @nodeId string ObjectId * @name string node name * @return string 200 Ok */ /api/v2/node/updateNodeName /** * 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 */ /api/v2/node/moveNode /** * Action for removing node. * @treeId object Layer Id * @nodeId object Layer Id * @return string 200 Ok */ /api/v2/node/removeNode /** * Search tree by name * @name string tree name * @return 200 Ok json tree */ /api/v2/node/searchTreeByName /** * Get srtm * @lat * @lon */ /api/v2/user/srtm /** * Action ensure layer db index. * @layerId * @indexName */ /api/v2/node/ensureLayerIndex /** * Action delete layer db index. * @layerId * @indexName */ /api/v2/node/deleteIndex /** * GET * @id layer id * @return josn layer option */ /api/v2/node/getLayerOptions /** * POST * @id layer id * @options json options * @return 200 Ok */ /api/v2/node/updateLayerOptions /** * POST * Action for group creation * @name group name * @return json group */ /api/v2/group/create /** * POST * Action update group name * @id ObjectId group id * @name string new group name * @return 200 Ok */ /api/v2/group/updateName /** * Action adds a tree to the group. * @treeId ObjectId tree which to add * @groupId ObjectId group where to add * @return string 200 Ok */ /api/v2/group/addTree /** * Action remove tree from group. * @treeId ObjectId tree which to remove * @groupId ObjectId group where to remove * @return string 200 Ok */ /api/v2/group/removeTree /** * Action return user groups. * @return string 200 Ok */ /api/v2/group/get /** * Action for adding user to group. * @userId string ObjectId. * @groupId string ObjectId. * @return string 200 Ok */ /api/v2/group/addUser /** * 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 */ /api/v2/group/setPermissions /** * Action for deleting user from group. * @userId string ObjectId. * @groupId string ObjectId. * @return string 200 Ok */ /api/v2/group/deleteUser /** * POST * Action remove group * @id group id * @return 200 OK */ /api/v2/group/remove /** * 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 */ /api/v2/purchase/createProduct /** * GET * Action for get product information. * @productId string ObjectId of entity which is product * @return string 200 product information */ /api/v2/purchase/getProduct /** * GET * Action return all available product, excluding users products. * Filters: * @access int interaction_mask, /in development * @type string (tree/map), /in development * @point json {"lon":86.696379, "lat":54.153597} /in development * @return string 200 products */ /api/v2/purchase/getProducts /** * GET * Action for purchase product * @productId string ObjectId of entity which is product * @return string 200 OK */ /api/v2/purchase/purchaseProduct /** * 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 */ /api/v2/purchase/updateProduct /** * 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 */ /api/v2/purchase/removeProduct /** * GET * Action for product get version. * @productId string ObjectId of entity which is product * @return string 200 product version */ /api/v2/purchase/getProductVersion /** * Action for get user products * return string 200 user products */ /api/v2/purchase/getUserProducts /** * 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 */ /api/v2/node/setSideBar /** * Action get sidebar text pattern. * @layerId string ObjectId * @return string 200 Ok */ /api/v2/user/getSideBar /** * Action find user by name. * @name string userName regexp. * if name =='' return all users, else search by regexp * @return string 200 [userId,name] */ /api/v2/user/findUsersByNames /** * Action find tree by name. * @name string treeName regexp. * @return string 200 [treeId,name] */ /api/v2/node/searchTreeByName /** * 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 */ /api/v2/node/createObject /** * 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 */ /api/v2/node/updateObject /** * POST * Action remove layers object * @treeId ObjectId tree id * @layerId ObjectId layer id * @objectId ObjectId layer object id * @return 200 Ok */ /api/v2/node/removeObject /** * 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 */ /api/v2/node/changeLayerObject /** * 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 */ /api/v2/purchase/activate /** * POST * Action confirm paid products * @productId objectId product id * @purchaseName string purchases name * @return 200 Ok */ /api/v2/purchase/productPayConfirm /** * GET * Action get unconfirmed paid products * @return 200 Ok json */ /api/v2/purchase/getUnconfirmedPaidProduct /** * GET * Action get help objects * @return 200 Ok json help objects */ /api/v2/help/get /** * POST * Action add help object * @help json help object * @file file help media file * @return 200 Ok */ /api/v2/help/add /** * POST * Action update the help object * @helpObjectId objectId help object id * @help json help object * @file file help media file * @return 200 Ok */ /api/v2/help/update /** * POST * Action remove help object * @helpObjectId objectId help object id * @return 200 Ok */ /api/v2/help/remove /** * Rebuild user menu */ /api/v2/user/rebuildUserMenu /** * Upload track * @file gpx format */ /api/v2/node/uploadTrack /** * GET * Get user search */ /api/v2/user/getUserSearch /** * GET * Get user search */ /api/v2/user/getUserSearch /** * GET * Action get url * @url string needed url * @return 200 string url */ /api/v2/url/get /** * Action get tracker * @token QR token or auth token * @id tracker id * @return 200 array trackers */ /api/v2/tracker/get /** * Action create tracker * @tracker raw json data * @return 200 json tracker object */ /api/v2/tracker/create /** * Action update tracker * @tracker raw json data(id necessary) * @return 200 OK */ /api/v2/tracker/update /** * Action delete tracker * @id tracker id * @return 200 OK */ /api/v2/tracker/delete /** * POST * Action connect device to tracker * @token auth device token * @trackerId tracker id * @return 200 array trackers */ /api/v2/tracker/connect /** * POST * Action send data to tracker module * @token JWT auth device token * @type string type object (location/object) * @body json object * @schemeId scheme id(if type object) * @return 200 array trackers */ /api/v2/tracker/send /** * POST * Action get temp QR token * @trackerId/@layerId ObjectId tracker id/layer id * @return 200 Ok token */ /api/v2/QR/get /** * POST * Action get token for access to tracker module * @token temp QR token or auth token * @deviceId device id * @trackerId tracker module id for auth token * @return 200 Ok or errors array */ /api/v2/QR/auth /** * POST * Action get token with layer id * @layerId objectId layers id * @return 200 string JWT */ api/v2/node/getSubscriptionToken /** * POST * Action create scheme * Raw json data * @return 200 Ok json scheme object */ api/v2/scheme/create /** * GET * Action get scheme by id * @id ObjectId scheme id * @layerId ObjectId layer id(tracker id) * @type string scheme type (Verification, Collector, Tracker, Command) * @return 200 Ok json scheme object */ api/v2/scheme/get /** * POST * Action update scheme * Raw json data (necessarily "_id") * @return 200 Ok */ api/v2/scheme/update /** * POST * Action delete scheme by id * @id scheme id * @return 200 Ok */ api/v2/scheme/delete /** * POST * Action verification object * @schemeId ObjectId scheme id * @objectId ObjectId object id * @return 200 Ok or errors array * Error codes: * 1: Fields not found * 2: Empty value * 3: Invalid type. Value must be string/int/bool * 4: Invalid value, must be one of the list [...] */ api/v2/scheme/verification /** * GET * Get upload logs * @layerId ObjectId layer id * @return 200 OK log urls */ /api/v2/user/getUploadLogs /** * GET * Action for get user organization. * @return string json object organization */ /api/v2/organization/get /** * POST * Action for update organization info. * @name new organization name * @return 200 OK */ /api/v2/organization/update /** * GET * Action for get portal. * @return 200 json object all connection portals */ /api/v2/portal/get /** * POST * Action for create portal. * @name string portal name * @settings json portal settings * @productId array portal products * @open string 'true'/'false' * @private string 'true'/'false' * @groups array portal groups * @helps array portal helps * @return object tree mongoDB object */ /api/v2/portal/create /** * POST * Action for delete portal. * @id string portal id, if id is empty remove all portals * @return 200 OK */ /api/v2/portal/remove /** * POST * Action for delete all organization portals. And create default portal. * @return 200 OK */ /api/v2/portal/removeAll /** * POST * Action for update portal. * @id portal id * @name string portal name * @settings array portal settings * @productId array portal products * @open string 'true'/'false' or int 1/0 * @private string 'true'/'false' or int 1/0 * @groups array portal groups * @helps array portal helps * @return object tree mongoDB object */ /api/v2/portal/update /** * GET * Action get news objects * @param ObjectId $id news id * @param string $type news type * @return 200 Ok json news objects */ /api/v2/news/get /** * GET * Action for get callbacks */ /api/v2/callback/get /** * POST * Action for add callback * @param string $name caller name * @param string $message message * @param string $phone phone number * @param string $product product title * @return 200 OK Callback object */ /api/v2/callback/create /** * POST * Action for delete callback * @param ObjectId id callback object id * @return 200 Ok */ /api/v2/callback/delete /** * POST * Action for update callback * @param ObjectId id callback object id * @param string $name caller name * @param string $message message * @param string $phone phone number * @param string $product product title */ /api/v2/callback/update /** * GET * Getting a search list * @param integer $portalId Portal id. Is required. * @param ObjectId $id Searching id. * @return status 200/400/403 message searching list code 0 */ /api/v2/searching/get /** * POST * Create searching object action * @param integer $portalId Portal id. Is required. * @param string $name Searching name * @param base64 $icon Searching icon * @param json $dataSets Array searching dataSets in json format. * @param json $examples Array searching examples in json format. * @return status 200 message OK code 0 */ /api/v2/searching/create /** * Update searching object action * * @param ObjectId $id Searching object id. Is required. * @param integer $portalId Portal id. Is required. * @param string $name Searching name * @param base64 $icon Searching icon * @param json $dataSets Array searching dataSets in json format. * @param json $examples Array searching examples in json format. * @return status 200 message OK code 0 */ /api/v2/searching/update /** * Delete searching object action by id * @param ObjectId $searchingId Searching object id. Is required. * @param integer $portalId Portal id. Is required. * @return 200 Ok */ /api/v2/searching/delete /** * GET * Perform user search * @param string $type Search type(user/system) * @param string $query Search query * @param string $backName Only for system searchEngine * @param ObjectId $searchId SearchEngine id, only for user searchEngine * @return 200 OK searching result */ /api/v2/user/performUserSearch ==== Tree ==== { _id: ObjectID; "properties": { "type": "tree", "name": string, "ownerId": ObjectID, "shared": "free"/"private" }, "options" : { "iconOptions" : { "type" : "default"/"user"/"none"//default иконка создаётся на стороне back-end, user загружена пользователем, none - отсутствие иконки "icon" : base64 } } "children": []/null; } ==== Directory ==== { _id: ObjectID; "properties": { "type": "dir"; "name": string; }, "options" : { "iconOptions" : { "type" : "default"/"user"/"none"//default иконка создаётся на стороне back-end, user загружена пользователем, none - отсутствие иконки "icon" : base64 } }, "children": []/null } ==== Layer ==== { "properties": { "type": "layer", "api": string, "alias": ObjectID }, "options" : { "iconOptions" : { "type" : "default"/"user"/"none"//default иконка создаётся на стороне back-end, user загружена пользователем, none - отсутствие иконки "icon" : base64 } } "children": []/null } ==== Layer Entity ==== { "_id" : ObjectId("5cffac95ec8fc0140f5c9c82"), "properties" : { "type" : "layerEntity", "name" : "Some name", "api" : "api/v2/node/getobjs?type=Layer&id=5cffac95ec8fc0140f5c9c82", "parentId" : ObjectId("5cffac86ec8fc014102af2d2"), "treeId" : ObjectId("5cffac86ec8fc014102af2d2"), "filter" : "" }, "children" : [], "options" : { "isPreviewActive" : false, "description" : "{{#date}}Дата: {{date}}
{{/date}}\n{{#time}}Time: {{time}}
{{/time}}\n{{#cost}}Cost: {{cost}}
{{/cost}}\n{{message}}", "uniqueUploadFields" : [], "updated" : { "value" : false, "time" : 0 }, "track" : { "value" : null, "description" : null }, "lineOptions" : { "color" : "#4047ff", "weight" : 3, "opacity" : 1, "zoom" : 1 }, "multiPolygonOptions" : { "color" : "#fff927", "weight" : 4, "opacity" : 1, "fillOpacity" : 0.5, "zoom" : 1 }, "pointOptions" : { "markerType" : "marker", "zoom" : 1, "iconOptions" : { "iconUrl" : "https://unpkg.com/leaflet@1.3.4/dist/images/marker-icon.png", "iconSize" : [ 25, 41 ], "iconAnchor" : [ 20, 40 ] }, "markerOptions" : { "type" : "circle", "radius" : 10, "numberOfSides" : 3, "rotation" : 0, "color" : "#1eb004", "weight" : 1, "fillOpacity" : 0.8, "fillColor" : "#3c794e" } }, "dataSetId" : ObjectId("5cffac95ec8fc0140f5c9c83"), "filter" : "string", "iconOptions" : { "type" : "default"/"user"/"none"//default иконка создаётся на стороне back-end, user загружена пользователем, none - отсутствие иконки "icon" : base64 } } }
------ ==== 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; // To much requests Authorization: 4; // 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") } ==== Device ==== { "_id" : ObjectId, "properties" : { "deviceId" : string, "trackers" : [ { "trackerId" : ObjectId, "status" : 0/1 } ] }, "geometry" : { "type" : "Point", "coordinates" : [ double, double ] } } ==== Scheme ==== **Verification** { "_id" : ObjectId(""), "type" : "Verification", "dataSetId" : ObjectId(""), "name" : "Some name", "organizationId" : ObjectId(""), "fields" : [ { "name" : "some name 1", "type" : "string" }, { "name" : "some name 2", "type" : "int" }, { "name" : "some name 3", "type" : "double" }, { "name" : "some name 4", "type" : "list", "value" : array }, { "name" : "some name 5", "type" : "boolean" } ] } **Collector** { "_id" : ObjectId(""), "type" : "Collector", "name" : "Some name", "trackerId" : ObjectId(""), "dataSetId" : ObjectId(""), "uniqueField" : string, "organizationId" : ObjectId("") [ { "name" : "Params 1", "type" : "int/double/boolean/string/list", "value" : "some value"/array,//Необязательный параметр, //может быть массивом если list, для list обязательный параметр "required" : bool }, { "name" : "Params 2", "type" : "list", "value" : [ "Some value", "Another value" ], "required" : bool }, { "name" : "Params 3", "type" : "number", "value" : 20, "required" : bool }, { "name" : "Params 4", "type" : "string", "required" : bool } ] } **Tracker** { "_id" : ObjectId(""), "type" : "Tracker", "name" : "Some name", "trackerId" : ObjectId(""), "dataSetId" : ObjectId(""), "organizationId" : ObjectId("") } **Command** { "_id" : ObjectId(""), "type" : "Command", "dataSetId" : ObjectId(""), "name" : "Some name", "organizationId" : ObjectId(""), "command" : "message", "trackerId" : ObjectId(""), "fields" : [ { "name" : "Params 1", "type" : "list", "value" : [ "Params 1", "Params 2" ] } ] } ==== Trackers ==== { "_id" : ObjectId, "owner" : ObjectId, "name" : string, "OpenAPI" : bool, "QR" : bool, "Auth" : array[ ObjectId, ... ] } ===Category=== { "_id" : ObjectId(""), "type": "user", "dataSetId" : ObjectId(""), "name" : "Some name", "geometryType" : "Point/LineString/Polygon", "img" : base64, "fields" : [ { "name" : "Params 1", "type" : "double/boolean/string/list", "value" : "some value"/array,//Необязательный параметр, //может быть массивом если list, для list обязательный параметр "required" : bool }, { "name" : "Params 2", "type" : "list", "value" : [ "Some value", "Another value" ], "required" : bool }, { "name" : "Params 3", "type" : "number", "required" : bool }, { "name" : "Params 4", "type" : "string", "required" : bool } ] }, { "_id" : ObjectId(""), "type": "system", "name" : "Name of translation", "geometryType" : "Point/LineString/Polygon", "img" : 'mat-icon name' } ==== Tracks ==== { "_id" : ObjectId, "deviceId" : string, "lon" : double, "lat" : double, "time" : ISODate } ==== Tracks body /api/v2/tracker/send ==== { "deviceId" : string, "lon" : double, "lat" : double } ==== Upload file log ==== { "_id" : ObjectId, "time" : ISODate, "userId" : ObjectId, "logFile" : string, "status" : string upload/progress/success/error, "dataSetId" : ObjectId, "fileName": string } ==== Organization ==== { _id: ObjectId, name: string organization name ownerId: Objectid user id, portals: [] ObjectId portals } ==== Portal ==== { _id: ObjectId, name: string portal name, url: string portal url, setting: {}, organizationId: ObjectId organization id productId: [], searchId: [], open: bool, private: bool, groups: [], helps: [] } ==== PortalConnection ==== { userId: ObjectId, portalId: ObjectId, access: bool } ==== News ==== { "_id" : ObjectId, "type" : string airlay/navikey/7ways, "title" : string, "message" : string, "image" : base64, "time" : ISODate } ==== Callback ==== { "_id" : ObjectId, "name" : string, "message" : string, "phone" : NumberLong, "product" : string, "time" : ISODate } ------ ==== SearchEngine ==== { _id: ObjectId, 'name' : string( 'Поиск по координатам'), 'type' : string('system'/'user'), 'icon' : base64(img), 'examples' : array[string], 'portalId' : int, // Если type = system 'backName' : string, // Если type = user 'dataSets' : Array [ { 'dataSetId' : objectID, 'type' : string('equal', 'notequal', 'entry', 'start', 'end', 'regexp', 'smart'), 'register' : bool, 'fields' : Array, "name" : string, 'datasetUniqueField' : string, } ] } ------ ==== Filter ==== { "dataSetId" : ObjectId(""), "name" : "string", "filter": [ { "field" : "string"//атрибут "type" : "string"/"number"/"date",//тип фильтра, "alias" : "string" //псевдоним } ] } ------