Для внутренних нужд отдела разработки требуется подготовить решение, которое позволяет :
- хранить информацию о состоянии счета абонента
- производить операции с счетом абонента
- по запросу выдавать текущие параметры счета абонента
- Python3.8
- Django + Django REST Framework
- PostgreSQL 13
- RabbitMQ
- Celery
- Docker + docker-compose
Заполнить файл
.env
данными для подключения к БД и к RabbitMQ.
$ docker-compose up --build
Заполнить файл
.env.prod
данными для подключения к БД и к RabbitMQ.
$ ./start_service.sh
Сервис отвечает на запросы с заголовком Accept: application/json
в виде json
, при запросе с другим заголовком сервис отвечает в html
.
{
"status": "<http_status>",
"result": "<bool:operation_status>",
"addition": {},
"description": {}
}
Проверка работоспособности сервиса.
{
"status": 200,
"result": true,
"addition": {
"status": "pong"
},
"description": {}
}
Список всех счетов абонентов.
{
"status": 200,
"result": true,
"addition": [
{
"uuid": "26c940a1-7228-4ea2-a3bc-e6460b172040",
"fio": "Петров Иван Сергеевич",
"balance": 1700,
"hold": 300,
"status": true
},
...
],
"description": {}
}
Вывод информации по выбранному счету.
Запрос на /api/v1/status/867f0924-a917-4711-939b-90b179a96392/
{
"status": 200,
"result": true,
"addition": {
"balance": 1000000,
"status": false
},
"description": {}
}
Пополнение баланса абонента.
{
"balance": 100
}
Запрос на /api/v1/add/26c940a1-7228-4ea2-a3bc-e6460b172040/
{
"status": 200,
"result": true,
"addition": {
"balance": 1800
},
"description": {}
}
Уменьшение баланса абонента.
{
"hold": 100
}
Запрос на /api/v1/subtract/867f0924-a917-4711-939b-90b179a96392/
{
"status": 200,
"result": true,
"addition": {
"hold": 101
},
"description": {}
}
При уменьшении баланса пользователя сумма вычета добавляется к значению холда
. После обращения к контроллеру в celery
создается задача, которая обнуляет холд
абонента.