Skip to content

Latest commit

 

History

History
101 lines (69 loc) · 6.16 KB

README.md

File metadata and controls

101 lines (69 loc) · 6.16 KB

Бэкенд для веб-сайта/мобильного приложения обмена валют

Технологический стек: 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.

4. Аутентификация пользователя по почте и паролю c присвоением токена авторизации.

5. Личный кабинет пользователя со следующими возможностями:

5.1 Отображение и редактирование личных данных пользователя.

5.2 Отображение всех счетов пользователя с указанием балансов и валют.

5.3 Отображение актуальных курсов валют.

5.4 Перевод средств (на свой счет или счет другого пользователя системы). В случае отправки средств другому пользователю - отправляется смс уведомление(если у получателя включена данная опция) в фоновом режиме посредством Celery. В качестве брокера сообщений использован RabbitMQ.

5.5 Отображение списка операций по счетам с возможностью фильтрации и сортировки. Фильтрацию осуществляется по следующим полям:

  • Валюта
  • Тип транзакции(списание/зачисление)
  • Сумма транзакции
  • Диапазон сумм для транзакции
  • Дата создания транзакции
  • Диапазон дат транзакций

Осуществлена возможность сортировки по дате создания транзакции, по сумме транзакции

5.6 Реализована постраничная пагинацию списка операций.

5.7 Логаут из личного кабинет.

5.8 Создание заявки на пополнение счета банковской картой.

6. Личный кабинет Администратора со следующими возможностями:

6.1 Вывод списка счетов всех пользователей с возможностью фильтрации и сортировки.
Осуществлена фильтрацию по следующим полям:

  • Валюта счета (мультиселект)
  • Баланс
  • Диапазон сумм на балансе
  • Номер счета
  • Email пользователя(используется в качестве username)

Осуществлена возможность сортировки по дате создания счета, балансу счета

6.2 Постраничная пагинация списка счетов.

6.3 Вывод списка всех транзакций всех пользователей с возможностью фильтрации и сортировки. Фильтрация осуществляется по следующим полям:

  • Валюта операции (мультиселект)
  • Тип транзакции
  • Сумма транзакции
  • Диапазон сумм для транзакции
  • Дата создания транзакции
  • Диапазон дат транзакций
  • Счет отправителя
  • Счет получателя

Сортировка осуществляется по датe создания транзакции и сумме транзакции.

6.4 Постраничная пагинация списка транзакций.

6.5 Пополнение баланса конкретного счета

7. Автоматическое развертывание приложения происходит через Docker-Compose.

8. Для снижения нагрузки на основную базу используется хранилище Redis(хранения и получения актуальных курсов валют).

9. Ежедневное обновление курсов валют посредством Celery Cron. Для получения актуальных курсов валют используется API внешнего сервиса.

10. Логгирование ошибок осуществляется посредством Sentry.

11. В качестве СУБД используется PostgreSQL.

12. Для автодокументирования API используется Swagger.

13. Модульные тесты к приложению (Unittest).

Сборка контейнера docker

docker-compose --build

Запуск приложения через docker-compose

docker-compose up

Запуск тестов в docker-compose

 docker-compose run --rm api ./manage.py test