Проект представляет собой REST API, который обеспечивает работу с данными о валютах и обменных курсах. Пользователи могут просматривать и редактировать данные о валютах, а также проводить расчет конвертации различных сумм между различными валютами.
Доступна настройка параметров запуска сервера:
- host, port
- CORS
Вся настройка происходит в config.toml
, но если данный файл не создан используются параметры из config.example.toml
.
При разработке проекта были использована только стандартные библиотеки языка Python. Для удобной работы были разработаны два вспомагательных модуля:
- simple_server - надстройка поверх стандартного http.server, выполняет функции роутинга, добавления функциональности с помощью middleware, парсинг запросов/параметров, сериализация ответов.
- simple_di - библиотечка для внедрения зависимостей (DI). Создает и передает зависимости в хендлеры запросов, после работы хендлера выполняет финализацию зависимостей.
Данные библиотеки реализуют необходимое подмножество функций для реализации данного проекта.
Проект разработан с применением принципов из Чистой Архитектуры. И разделен на следующие слои:
- domain - основная логика обмены валют, валдация кодов, курсов.
- application - сценарии использования приложения и интерфейсы (абстракции).
- infrastructure - реализация интерфейсов слоя application, логика работы с хранилищем (хранилище слов, данных валют).
- presentation - хендлеры запросов, взаимодействие с фреймворком simple di, подготовка данных, вызов слоя application, передача данных пользователю, обработка ошибок.
- main - слой собирающий вместе всё приложение. Исходя из конфигурации, компонует объекты и запускает приложение.
Для проверки качества кода использовались проверки типов mypy и линтер ruff. Были написаны юнит тесты на основную логику приложения и интеграционные тесты для проверки работы с базой данных.
В проекте используется src-layout и приложение устанавливается в виртуальное окружение как пакет. Добавлены опциональные зависимости для:
- для запуска тестов: test
- для запуска mypy и ruff: dev
Вся конфигурация инструментов и пакета определена в файле pyproject.toml Для работы с проектом используется - pip.
Для удобного запуска были определены точки входа:
- Запуск приложения
currency-exchange-run
- Запуск и откат миграций
currency-exchange-migrations-up
currency-exchange-migrations-down
Все команды доступны в консоле при активированном виртуальном окружении