Спроектировал и разработал реализацию Карманов И.О. в качестве тестового задания в компанию DMD. Использованные инструменты:
- FastAPI
- OpenAPI (Swagger UI)
- SQLAlchemy
- Poetry
- Pytest
- Vue.js 3
- Bootstrap 5
- Docker
Приложение можно легко запустить с помощью Docker. Для этого необходимо:
- Клонировать репозиторий
- В файле compose.yml поменять адрес сайта
task-manager.karmanow.ru
на ваш домен, либо IP-адрес, либоlocalhost
для запуска на локальной машине - После этого необходимо выполнить команду
docker compose up -d
и приложение соберётся в образы, которые будут совместно запущены в необходимых кофигурациях - Последний шаг - развёртывание миграций. Для этого необходимо:
- Открыть консоль внутри контейнера
backend
командойdocker exec -w /backend/ -it backend bash
- Установить текстовый редактор, к примеру
nano
командойapt update && apt install nano
- Затем выполнить команду
alembic init migrations
для инициализации миграций - После этого отредактировать файл
alembic.ini
, вставив в полеsqlalchemy.url
валидную строку доступа к БД, по умолчанию это будетpostgresql+psycopg://ivan:secret123@postgres/test
- Далее отредактировать файл
migrations/env.py
, в полеtarget_metadata
вставить ссылку на объектmetadata
, по умолчанию
- Открыть консоль внутри контейнера
from app.db.sqlalchemy import Base
target_metadata = Base.metadata
- Последним шагом станет создание миграции и её применение, для этого выполните команды
alembic revision -m "Initial" --autogenerate
alembic upgrade head
На этом процесс развёртывания приложения завершён, оно станет доступно на 80 порту вашего IP-адреса/домена/localhost'а
Бэкенд данного проекта написан на фреймворке FastAPI, с использованием SQLAlchemy ORM и миграций Alembic. Для валидации входных и выходных данных использован фреймворк Pydantic. Я старался придерживаться хорошего стиля кода и архитектурных решений, таких как разделение приложения на слои и вынесение бизнес-логики в независимые компоненты.
Все эндпоинты API задокументированы с помощью OpenAPI, а также протестированы библиотекой pytest
Тесты вы можете запустить командой docker exec -w /backend/app/ -it backend pytest
, документацию к API можно посмотреть по ссылке http://localhost/api/docs.
В качестве фронтенд-части проекта (веб-интерфейс) используется приложение, написанное на Vue.js 3. Даннй фреймворк был абсолютно новым для меня, как и сама концепция реактивности, поэтому качество кода оставляет желать лучшего, однако я постарался разделить интерфейс на компоненты и организовать их взаимодействие в одном стиле. Для стилизации элементов интерфейса использован CSS-фреймворк Bootstrap 5.
Для развёртывания всего проекта целиком использованы возможности инструмента Docker, а также его чатси - Docker Compose. Благодаря этому проект относительно легко разворачивается на любом компьютере, как локально, так и на сервере.