openapi: 3.0.3 info: title: 'Cервис позиционирования' description: '' version: 1.0.0 _postman_id: 878e308e-bbb0-4fda-99f7-a67e2200453b servers: - url: 'https://positioning.stage.odinn.cloud' tags: - name: V1 description: '' components: securitySchemes: default: type: http scheme: bearer description: "Принимается JWT токен, выданный сервисом пользователей.\nВы можете получить токен пользователя с помощью этого метода.
\nЕсли используется сервисный токен, также необходимо передать заголовок `X-User-ID` с ID пользователя.\n" security: - default: [] paths: '/api/v1/positions/user/{id}': get: summary: 'Получить историю местоположений пользователя внутри зон' operationId: '' description: '(последние 500 точек)' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: users:positions' properties: message: type: string example: 'User does not have any of permissions: users:positions' tags: - V1 parameters: - in: path name: id description: 'Идентификатор (UUID)' example: 7680261c-ce29-3185-a9c0-e31ca37ca72d required: true schema: type: uuid /api/v1/positions/current: get: summary: 'Получить историю местоположений текущего пользователя внутри зон' operationId: '' description: '(последние 500 точек)' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized tags: - V1 /api/v1/spaces: get: summary: '' operationId: getApiV1Spaces description: '' parameters: - in: query name: page description: 'Номер страницы.' example: 1 required: false schema: type: integer description: 'Номер страницы.' example: 1 nullable: false - in: query name: page-size description: 'Количество элементов, возвращаемых на странице. По умолчанию 50.' example: 50 required: false schema: type: integer description: 'Количество элементов, возвращаемых на странице. По умолчанию 50.' example: 50 nullable: false responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: spaces:list' properties: message: type: string example: 'User does not have any of permissions: spaces:list' tags: - V1 post: summary: '' operationId: postApiV1Spaces description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: spaces:create' properties: message: type: string example: 'User does not have any of permissions: spaces:create' tags: - V1 requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: bf nullable: false width: type: number description: 'Must be at least 1.' example: 72 nullable: false height: type: number description: 'Must be at least 1.' example: 77 nullable: false image_offset_x: type: number description: '' example: 4379.7 nullable: true image_offset_y: type: number description: '' example: 1.299751187 nullable: true image_scale: type: number description: 'Must be at least 0.1.' example: 45 nullable: true notes: type: string description: 'Must not be greater than 500 characters.' example: zlsmiysehyvpjntngdvud nullable: true required: - name - width - height '/api/v1/spaces/{id}': put: summary: '' operationId: putApiV1SpacesId description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: spaces:update' properties: message: type: string example: 'User does not have any of permissions: spaces:update' tags: - V1 requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: vyqqrq nullable: false width: type: number description: 'Must be at least 1.' example: 89 nullable: false height: type: number description: 'Must be at least 1.' example: 73 nullable: false image_offset_x: type: number description: '' example: 39.818 nullable: true image_offset_y: type: number description: '' example: 12751817.206831 nullable: true image_scale: type: number description: 'Must be at least 0.1.' example: 49 nullable: true notes: type: string description: 'Must not be greater than 500 characters.' example: xcoiyvywfryirewaegl nullable: true required: - name - width - height get: summary: '' operationId: getApiV1SpacesId description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: spaces:list' properties: message: type: string example: 'User does not have any of permissions: spaces:list' tags: - V1 delete: summary: '' operationId: deleteApiV1SpacesId description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: spaces:delete' properties: message: type: string example: 'User does not have any of permissions: spaces:delete' tags: - V1 parameters: - in: path name: id description: 'Идентификатор (UUID)' example: e73f6942-77f6-3485-99b6-7a5b419656a9 required: true schema: type: uuid '/api/v1/spaces/{id}/image': post: summary: 'Загрузить карту помещения' operationId: '' description: '' parameters: [] responses: { } tags: - V1 requestBody: required: false content: application/json: schema: type: object properties: image: type: string description: '' example: null nullable: false delete: summary: 'Удалить карту помещения' operationId: '' description: '' parameters: [] responses: { } tags: - V1 parameters: - in: path name: id description: 'Идентификатор (UUID)' example: 6eb24a32-834e-35b2-b21a-19f15ee85fca required: true schema: type: uuid '/api/v1/spaces/{id}/position': post: summary: 'Записать местоположение пользователя внутри помещения.' operationId: '' description: "Координаты измеряются в безарзмерных единицах от помещения (не от зоны).\nЗона находится автоматически по переданным координатам и границам зон (включительно)." parameters: [] responses: { } tags: - V1 requestBody: required: true content: application/json: schema: type: object properties: x: type: number description: 'Must be at least 0.' example: 15 nullable: false 'y': type: number description: 'Must be at least 0.' example: 30 nullable: false z: type: number description: 'Must be at least 0.' example: 81 nullable: true lat: type: number description: 'Must be at least 0.' example: 58 nullable: true long: type: number description: 'Must be at least 0.' example: 36 nullable: true required: - x - 'y' parameters: - in: path name: id description: 'Идентификатор (UUID)' example: 18790e0e-0b66-3236-a009-8542d579067b required: true schema: type: uuid /api/v1/zones: get: summary: '' operationId: getApiV1Zones description: '' parameters: - in: query name: page description: 'Номер страницы.' example: 1 required: false schema: type: integer description: 'Номер страницы.' example: 1 nullable: false - in: query name: page-size description: 'Количество элементов, возвращаемых на странице. По умолчанию 50.' example: 50 required: false schema: type: integer description: 'Количество элементов, возвращаемых на странице. По умолчанию 50.' example: 50 nullable: false responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: zones:list' properties: message: type: string example: 'User does not have any of permissions: zones:list' tags: - V1 post: summary: '' operationId: postApiV1Zones description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: zones:create' properties: message: type: string example: 'User does not have any of permissions: zones:create' tags: - V1 requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: dmlhheawfjsiubw nullable: false space: type: object description: '' example: [] nullable: false properties: id: type: string description: 'Must be a valid UUID.' example: 95b1b967-998d-37fa-b0f3-85762f275cd0 nullable: false required: - id is_wifi_available: type: boolean description: '' example: true nullable: true ssid: type: string description: 'This field is required when is_wifi_available is true. Must not be greater than 128 characters.' example: mxqnafuvm nullable: true security: type: string description: '' example: null nullable: false wifi_password: type: string description: 'This field is required unless security is in null or none. Must not be greater than 128 characters.' example: yxhqjsccaawltbj nullable: true points: type: array description: 'Must have at least 2 items.' example: - [] items: type: object properties: x: type: number description: 'Must be at least 0.' example: 63 nullable: false 'y': type: number description: 'Must be at least 0.' example: 37 nullable: false z: type: number description: 'Must be at least 0.' example: 66 nullable: true required: - x - 'y' color: type: string description: 'Must match the regex /^#[0-9a-f]{6}$/i. Must be at least 6 characters. Must not be greater than 9 characters.' example: vf nullable: true denied_duties: type: array description: '' example: null items: type: object nullable: true properties: id: type: string description: 'Must be a valid UUID.' example: d565f195-f84e-34fd-9dd8-bcf7232c48df nullable: false required: - id allowed_duties: type: array description: '' example: null items: type: object nullable: true properties: id: type: string description: 'Must be a valid UUID.' example: 8d1bae79-663a-3171-bab7-b40f812d07a8 nullable: false required: - id notes: type: string description: 'Must not be greater than 500 characters.' example: oxqaqeqrmkqpumg nullable: true required: - name - space - points '/api/v1/zones/{id}': put: summary: '' operationId: putApiV1ZonesId description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: zones:update' properties: message: type: string example: 'User does not have any of permissions: zones:update' tags: - V1 requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: nraafcrlpiomkk nullable: false space: type: object description: '' example: [] nullable: false properties: id: type: string description: 'Must be a valid UUID.' example: d9786f92-18ee-360b-8ccb-ec532a223d6a nullable: false required: - id is_wifi_available: type: boolean description: '' example: true nullable: true ssid: type: string description: 'This field is required when is_wifi_available is true. Must not be greater than 128 characters.' example: ztiebsvycloywht nullable: true security: type: string description: '' example: null nullable: false wifi_password: type: string description: 'This field is required unless security is in null or none. Must not be greater than 128 characters.' example: bixbtprw nullable: true points: type: array description: 'Must have at least 2 items.' example: - [] items: type: object properties: x: type: number description: 'Must be at least 0.' example: 7 nullable: false 'y': type: number description: 'Must be at least 0.' example: 21 nullable: false z: type: number description: 'Must be at least 0.' example: 13 nullable: true required: - x - 'y' color: type: string description: 'Must match the regex /^#[0-9a-f]{6}$/i. Must be at least 6 characters. Must not be greater than 9 characters.' example: emdaxia nullable: true denied_duties: type: array description: '' example: null items: type: object nullable: true properties: id: type: string description: 'Must be a valid UUID.' example: 201e8c25-2561-38de-a6af-e125d74f733a nullable: false required: - id allowed_duties: type: array description: '' example: null items: type: object nullable: true properties: id: type: string description: 'Must be a valid UUID.' example: 645068a9-dc86-30a7-aa0a-076a99f18300 nullable: false required: - id notes: type: string description: 'Must not be greater than 500 characters.' example: nhzrlxqgoavvn nullable: true required: - name - space - points get: summary: '' operationId: getApiV1ZonesId description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: zones:list' properties: message: type: string example: 'User does not have any of permissions: zones:list' tags: - V1 delete: summary: '' operationId: deleteApiV1ZonesId description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: zones:delete' properties: message: type: string example: 'User does not have any of permissions: zones:delete' tags: - V1 parameters: - in: path name: id description: 'Идентификатор (UUID)' example: b3f22223-9947-3e58-a735-1de6b7145fd4 required: true schema: type: uuid /api/v1/beacons: get: summary: '' operationId: getApiV1Beacons description: '' parameters: - in: query name: page description: 'Номер страницы.' example: 1 required: false schema: type: integer description: 'Номер страницы.' example: 1 nullable: false - in: query name: page-size description: 'Количество элементов, возвращаемых на странице. По умолчанию 50.' example: 50 required: false schema: type: integer description: 'Количество элементов, возвращаемых на странице. По умолчанию 50.' example: 50 nullable: false responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: beacons:list' properties: message: type: string example: 'User does not have any of permissions: beacons:list' tags: - V1 post: summary: '' operationId: postApiV1Beacons description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: beacons:create' properties: message: type: string example: 'User does not have any of permissions: beacons:create' tags: - V1 requestBody: required: true content: application/json: schema: type: object properties: mac: type: string description: 'Must match the regex /^[0-9a-f]{2}(:[0-9a-f]{2}){5}$/i. Must be 17 characters.' example: vgywokhgeaaxkitoe nullable: false name: type: string description: 'Must not be greater than 128 characters.' example: usfmbddiuesgghvue nullable: true x: type: number description: '' example: 25.5 nullable: false 'y': type: number description: '' example: 143330.8546 nullable: false z: type: number description: '' example: 3901.43 nullable: true is_mobile: type: boolean description: '' example: true nullable: true color: type: string description: 'Must match the regex /^#[0-9a-f]{6}$/i. Must be at least 6 characters. Must not be greater than 9 characters.' example: qal nullable: true space: type: object description: '' example: null nullable: true properties: id: type: string description: 'Must be a valid UUID.' example: 2d363916-19b8-3e3e-90e1-42e415195496 nullable: true required: - mac - x - 'y' '/api/v1/beacons/{id}': put: summary: '' operationId: putApiV1BeaconsId description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: beacons:update' properties: message: type: string example: 'User does not have any of permissions: beacons:update' tags: - V1 requestBody: required: true content: application/json: schema: type: object properties: mac: type: string description: 'Must match the regex /^[0-9a-f]{2}(:[0-9a-f]{2}){5}$/i. Must be 17 characters.' example: sqzhmcmdfegyfbgkp nullable: false name: type: string description: 'Must not be greater than 128 characters.' example: ipo nullable: true x: type: number description: '' example: 24030.778303259 nullable: false 'y': type: number description: '' example: 13660438.57728 nullable: false z: type: number description: '' example: 0.0 nullable: true is_mobile: type: boolean description: '' example: true nullable: true color: type: string description: 'Must match the regex /^#[0-9a-f]{6}$/i. Must be at least 6 characters. Must not be greater than 9 characters.' example: ytwuahf nullable: true space: type: object description: '' example: null nullable: true properties: id: type: string description: 'Must be a valid UUID.' example: e6c84ce4-ed06-374a-90b5-ddf6aa8c7357 nullable: true required: - mac - x - 'y' get: summary: '' operationId: getApiV1BeaconsId description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: beacons:list, beacons:show' properties: message: type: string example: 'User does not have any of permissions: beacons:list, beacons:show' tags: - V1 delete: summary: '' operationId: deleteApiV1BeaconsId description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: beacons:delete' properties: message: type: string example: 'User does not have any of permissions: beacons:delete' tags: - V1 parameters: - in: path name: id description: 'Идентификатор (UUID)' example: 2954b67a-b44b-32f9-bed9-f37ddcec3f13 required: true schema: type: uuid '/api/v1/positioning/walls/{id}': get: summary: 'Листинг для фронтенда' operationId: '' description: '' parameters: - in: query name: page description: 'Номер страницы.' example: 1 required: false schema: type: integer description: 'Номер страницы.' example: 1 nullable: false - in: query name: page-size description: 'Количество элементов, возвращаемых на странице. По умолчанию 50.' example: 50 required: false schema: type: integer description: 'Количество элементов, возвращаемых на странице. По умолчанию 50.' example: 50 nullable: false responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: walls:list' properties: message: type: string example: 'User does not have any of permissions: walls:list' tags: - V1 parameters: - in: path name: id description: 'Идентификатор (UUID)' example: 3e2fd214-dce8-3796-a5bb-8acd3be02eab required: true schema: type: uuid '/api/v1/positioning/walls/space/{uuid}': get: summary: 'Получение всех стен помещения' operationId: '' description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: space:list, walls:list' properties: message: type: string example: 'User does not have any of permissions: space:list, walls:list' tags: - V1 parameters: - in: path name: uuid description: '' example: 6d22f802-6937-3761-8033-3743d929cd0e required: true schema: type: string '/api/v1/positioning/walls/wall/{uuid}': get: summary: 'Получение стены помещения' operationId: '' description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthorized properties: message: type: string example: Unauthorized 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: space:list, walls:list' properties: message: type: string example: 'User does not have any of permissions: space:list, walls:list' tags: - V1 delete: summary: 'Удаление стены по id' operationId: Id description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: walls:delete' properties: message: type: string example: 'User does not have any of permissions: walls:delete' tags: - V1 parameters: - in: path name: uuid description: '' example: a800dc9b-3432-32ae-89b3-0f015e104380 required: true schema: type: string /api/v1/positioning/walls: post: summary: 'Создание стены' operationId: '' description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: walls:create' properties: message: type: string example: 'User does not have any of permissions: walls:create' tags: - V1 requestBody: required: true content: application/json: schema: type: object properties: space: type: object description: '' example: [] nullable: false properties: id: type: string description: 'Must be a valid UUID. The id of an existing record in the App\Models\Space table.' example: ba268747-25f2-31eb-ba2e-5c1bf41b0133 nullable: false required: - id lines: type: array description: '' example: - 1086073.6612957 items: type: number isolated: type: string description: '' example: '1' nullable: false enum: - '0' - '1' thickness: type: number description: '' example: 11489975.780302 nullable: false color: type: string description: 'Must match the regex /^#[0-9a-f]{6}$/i. Must be at least 6 characters. Must not be greater than 9 characters.' example: re nullable: true required: - space - lines - isolated - thickness '/api/v1/positioning/walls/{uuid}': put: summary: 'Обновление стены' operationId: '' description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: message: 'User does not have any of permissions: walls:update' properties: message: type: string example: 'User does not have any of permissions: walls:update' tags: - V1 requestBody: required: true content: application/json: schema: type: object properties: segments: type: object description: 'Must have at least 1 items.' example: [] nullable: false properties: { } lines: type: array description: '' example: - 25766.236 items: type: number isolated: type: string description: '' example: '1' nullable: false enum: - '0' - '1' thickness: type: number description: '' example: 649140.0 nullable: false color: type: string description: 'Must match the regex /^#[0-9a-f]{6}$/i. Must be at least 6 characters. Must not be greater than 9 characters.' example: zgauevdgb nullable: true required: - segments - lines - isolated - thickness parameters: - in: path name: uuid description: '' example: 075662df-517c-3e28-b2d3-b4f16f847594 required: true schema: type: string