Вводные:
- Здесь представлен MVP проект файлообменника. Он позволяет загружать файлы, проверяет их на подозрительный контент и отправляет алерты;
- Репозиторий содержит в себе бэкенд и фронтенд части;
- В обоих частях присутствуют баги, неоптимизированный код, неудачные архитектурные решения.
Задачи:
- Проведите рефакторинг бэкенда, не ломая бизнес-логики: предложите свое видение архитектуры и реализуйте его;
- (Дополнительно) На бэкенде есть возможность неочевидной оптимизации - выполните ее;
- (Дополнительно) Разбейте логику фронтенда на слои;
Для запуска необходимы Docker и Docker Compose.
Перед запуском проверьте файл .env.dev в корне проекта:
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=test
POSTGRES_HOST=backend-db
PGPORT=5432
CELERY_BROKER_URL=redis://backend-redis:6379/0Соберите и запустите все сервисы:
docker compose -f docker-compose.dev.yml up --build -dПримените миграции базы данных:
docker compose -f docker-compose.dev.yml exec backend alembic upgrade headПосле запуска доступны:
- frontend — http://localhost:3000/test;
- Swagger UI — http://localhost:8000/docs.
Бэкенд организован как сервис file_service в стиле Clean Architecture и DDD:
domain/file— агрегат файла, алерт, статусы, инварианты и доменные правила;application/file/commandsиqueries— отдельные обработчики use case;application/common/interfaces— контракты хранилища и очереди;infrastructure— конфигурация, SQLAlchemy, PostgreSQL, файловая система и Celery;presentation/api— контроллеры, HTTP-схемы и обработчики ошибок;presentation/main.py— создание и настройка FastAPI-приложения;bootstrap/container.py— Dishka providers и регистрация command/query handlers.