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