Технологический стек: Python, Django, DjangoRestFramework, PostgreSQL, Celery, RabbitMQ, Redis, Sentry, YookassaAPI, Unittest, Swagger, Docker, Docker-Compose
Реализован следующий функционал:
1. Создание таблицы Currency с 4 основными валютами: RUR, EUR, USD, CNY. В таблице должны быть следующие столбцы: краткое название валюты, полное название валюты, код валюты, символ валюты. Создана миграция с данными по 4 основным валютам для автоматического заполнения таблицы при развертывании проекта.
2. Регистрация пользователя. При регистрации пользователя автоматически создается 4 счета в валютах RUR, EUR, USD, CNY посредством Django Signals.
3. Система биллинга. Пользователь может пополнять счет банковской картой. Для реализации использовано API сервиса Yookassa.
5.1 Отображение и редактирование личных данных пользователя.
5.2 Отображение всех счетов пользователя с указанием балансов и валют.
5.3 Отображение актуальных курсов валют.
5.4 Перевод средств (на свой счет или счет другого пользователя системы). В случае отправки средств другому пользователю - отправляется смс уведомление(если у получателя включена данная опция) в фоновом режиме посредством Celery. В качестве брокера сообщений использован RabbitMQ.
5.5 Отображение списка операций по счетам с возможностью фильтрации и сортировки. Фильтрацию осуществляется по следующим полям:
- Валюта
- Тип транзакции(списание/зачисление)
- Сумма транзакции
- Диапазон сумм для транзакции
- Дата создания транзакции
- Диапазон дат транзакций
Осуществлена возможность сортировки по дате создания транзакции, по сумме транзакции
5.6 Реализована постраничная пагинацию списка операций.
5.7 Логаут из личного кабинет.
5.8 Создание заявки на пополнение счета банковской картой.
6.1 Вывод списка счетов всех пользователей с возможностью фильтрации и сортировки.
Осуществлена фильтрацию по следующим полям:
- Валюта счета (мультиселект)
- Баланс
- Диапазон сумм на балансе
- Номер счета
- Email пользователя(используется в качестве username)
Осуществлена возможность сортировки по дате создания счета, балансу счета
6.2 Постраничная пагинация списка счетов.
6.3 Вывод списка всех транзакций всех пользователей с возможностью фильтрации и сортировки. Фильтрация осуществляется по следующим полям:
- Валюта операции (мультиселект)
- Тип транзакции
- Сумма транзакции
- Диапазон сумм для транзакции
- Дата создания транзакции
- Диапазон дат транзакций
- Счет отправителя
- Счет получателя
Сортировка осуществляется по датe создания транзакции и сумме транзакции.
6.4 Постраничная пагинация списка транзакций.
6.5 Пополнение баланса конкретного счета
8. Для снижения нагрузки на основную базу используется хранилище Redis(хранения и получения актуальных курсов валют).
9. Ежедневное обновление курсов валют посредством Celery Cron. Для получения актуальных курсов валют используется API внешнего сервиса.
docker-compose --build
docker-compose up
docker-compose run --rm api ./manage.py test