Для внесения изменений на продакшен нужно отредактировать файл docker-compose.yml
:
Для редактирования переменнных окружения с конфигурацией и секретами необходимо создать файл ansible/.vault_pass
в который нужно положить пароль.
Узнать пароль можно у владельца репозитория.
Установить ansible
и выполнить следующую команду:
cd ansible
ansible-vault edit services/platform/secrets
Установить docker
и выполнить следующие команды:
docker run -it --rm -v $(pwd)/ansible:/ansible sr2020/ansible ansible-vault edit services/platform/secrets
Закоммитеть изменения в файлах docker-compose.yml
и ansible/services/platform/secrets
. Файл ansible/.vault_pass
находится в .gitignore
.
При пуше в любую ветку репозитория изменения применятся к проду.
Для локальной установки и тестирования нужно выполнить:
make install
make up
make test
Команда test может пройти не сразу, так как приложение запускается в асинхронном режиме. Нужно будет подождать 1-2 минуты и запустить команду make test
еще раз.
Регистрация осуществляется через POST запрос на http://gateway.evarun.ru/api/v1/auth/register
Тело запроса:
{
"email": "example@example.com",
"password": "hunter2",
"name": "John Doe"
}
Тело ответа:
{
"id": 1,
"api_key": "MmVDellSdUpKa0h5MFBDdjN1QnlVbEVC"
}
Пример:
curl -X POST "http://gateway.evarun.ru/api/v1/auth/register" -H "Content-Type: application/json" -d "{\"email\":\"example@example.com\",\"password\":\"hunter2\",\"name\":\"John Doe\"}"
Авторизация осуществляется через POST запрос на http://gateway.evarun.ru/api/v1/auth/login
Тело запроса:
{
"email": "example@example.com",
"password": "hunter2"
}
Тело ответа:
{
"id": 1,
"api_key": "MmVDDllSdUpKa0h5MFBDdjN1QnlVbEVC"
}
Пример:
curl -X POST "http://gateway.evarun.ru/api/v1/auth/login" -H "Content-Type: application/json" -d "{\"email\":\"example@example.com\",\"password\":\"hunter2\"}"
Авторизационный токен api_key
необходим для работы с API.
В каждый момент для конкретного пользователя валиден только один токен (полученный при последнем логине или сразу после регистрации).
К каждому запросу, требующему авторизацию должен добавляться заголовок Authorization
формата Bearer Token:
Authorization: Bearer <api_key>
Авторизационный токен пользователя не являющегося администратором позволяет выполнять действия связанные только с изменением его профиля.
Все действия для получения общей информации не требуют использования авторизационного токена.
Получение информации о текущем пользователе осуществляется через GET запрос на http://gateway.evarun.ru/api/v1/auth/profile с авторизационным токеном api_key
.
Этот кейс может быть полезен, когда нужно получить информацию только по одному конкретному авторизованному пользователю, вместо того, чтобы грузить весь список пользователей.
Так же данные в этом роуте не кэшируются.
Тело ответа:
{
"id": 1,
"admin": true,
"name": "Api Tim Cook",
"status": "free",
"created_at": "2019-03-24 21:08:00",
"updated_at": "2019-03-24 21:08:30"
}
Пример:
curl -X GET "http://gateway.evarun.ru/api/v1/auth/profile" -H "Authorization: Bearer MmVDDllSdUpKa0h5MFBDdjN1QnlVbEVC"
Редактирование информации о текущем пользователе осуществляется через PUT запрос на http://gateway.evarun.ru/api/v1/auth/profile с авторизационным токеном api_key
Тело запроса:
{
"email": "api-test@email.com",
"password": "secret",
"name": "Api Tim Cook",
"status": "free"
}
Тело ответа:
{
"id": 1,
"admin": true,
"name": "Api Tim Cook",
"status": "free",
"created_at": "2019-03-24 21:08:00",
"updated_at": "2019-03-24 21:08:30"
}
Пример:
curl -X PUT "http://gateway.evarun.ru/api/v1/auth/profile" -H "Authorization: Bearer MmVDDllSdUpKa0h5MFBDdjN1QnlVbEVC" -H "Content-Type: application/json" -d "{\"email\":\"api-test@email.com\",\"password\":\"secret\",\"name\":\"Api Tim Cook\",\"status\":\"free\"}"```
Получение информации о статусах всех пользователей осуществляется через GET запрос на http://gateway.evarun.ru/api/v1/users
Данные в этом списке кэшируются на 1 секунду методом автоматического прогревания кэша крон-скриптом.
Полезные поля которые можно отобразить:
name
(имя указанное при регистрации)status
(статус выбранный пользователем)created_at
(время когда пользователь зарегистрировался в системе)updated_at
(время когда пользователь в последний раз обновлял свой профиль)
Тело ответа:
[
{
"id": 1,
"admin": true,
"name": "Api Tim Cook",
"status": "free",
"created_at": "2019-03-24 21:08:00",
"updated_at": "2019-03-24 21:08:30"
},
...
]
Пример:
curl -X GET "http://gateway.evarun.ru/api/v1/users"
Отправка уровня слышимости маячков осуществляется через POST запрос на http://gateway.evarun.ru/api/v1/position/positions
Тело запроса:
{
"beacons": [
{
"ssid": "beacon1",
"bssid": "b0:0a:95:9d:00:0a",
"level": -50
}
]
}
Тело ответа:
{
"id":1001,
"user_id":1
"location_id":2,
"created_at":"2019-10-23 19:46:11"
}
Пример:
curl -X POST "http://gateway.evarun.ru/api/v1/position/positions" -H "Authorization: Bearer MmVDDllSdUpKa0h5MFBDdjN1QnlVbEVC" -H "Content-Type: application/json" -d "{\"beacons\":[{\"ssid\":\"beacon1\",\"bssid\":\"b0:0a:95:9d:00:0a\",\"level\":-50}]}"
Получение списка событий осуществляется через GET запрос на http://gateway.evarun.ru/api/v1/position/positions
Можно использовать сортировку по полю, указать список необходимых полей для вывода и выставить фильтр, например, по конкретному пользователю.
Так же можно указать параметры limit
и offset
.
Пример:
http://gateway.evarun.ru/api/v1/position/positions?sort=-id&select=user_id,beacons&filter[user_id]=1&limit=10&offset=100
Получение состояния баланса осуществляется через GET запрос на http://gateway.evarun.ru/api/v1/billing/balance
Пример:
curl -H "Authorization: Bearer MmVDDllSdUpKa0h5MFBDdjN1QnlVbEVC" "http://gateway.evarun.ru/api/v1/billing/balance"
Получение списка трансферов осуществляется через GET запрос на http://gateway.evarun.ru/api/v1/billing/transfers
Пример:
curl -H "Authorization: Bearer MmVDDllSdUpKa0h5MFBDdjN1QnlVbEVC" "http://gateway.evarun.ru/api/v1/billing/transfers"
Создание трансфера осуществляется через POST запрос на http://gateway.evarun.ru/api/v1/billing/transfer
Тело запроса:
{
"sin_to": 131,
"amount": 90,
"comment": "Test transfer"
}
Пример:
curl -X POST -H "Authorization: Bearer MmVDDllSdUpKa0h5MFBDdjN1QnlVbEVC" -H "Content-Type: application/json" "http://gateway.evarun.ru/api/v1/billing/transfer" -d "{\"sin_to\":131,\"amount\":90,\"comment\":\"Test transfer\"}"