Skip to content

ApostolFet/CurrencyExchange

Repository files navigation

Logo

CurrencyExchange

Checked with mypy Linting: Ruff Roadmap

Проект представляет собой REST API, который обеспечивает работу с данными о валютах и обменных курсах. Пользователи могут просматривать и редактировать данные о валютах, а также проводить расчет конвертации различных сумм между различными валютами.

Описание конечных точек api

Настройка проекта

Доступна настройка параметров запуска сервера:

  • host, port
  • CORS

Вся настройка происходит в config.toml, но если данный файл не создан используются параметры из config.example.toml.

Technical details

При разработке проекта были использована только стандартные библиотеки языка 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.

Для удобного запуска были определены точки входа:

  1. Запуск приложения
currency-exchange-run
  1. Запуск и откат миграций
currency-exchange-migrations-up
currency-exchange-migrations-down

Все команды доступны в консоле при активированном виртуальном окружении

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages