Skip to content
 
 

Latest commit

 

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание на позицию Fullstack разработчика (Python + React)

Вводные:

  1. Здесь представлен MVP проект файлообменника. Он позволяет загружать файлы, проверяет их на подозрительный контент и отправляет алерты;
  2. Репозиторий содержит в себе бэкенд и фронтенд части;
  3. В обоих частях присутствуют баги, неоптимизированный код, неудачные архитектурные решения.

Задачи:

  1. Проведите рефакторинг бэкенда, не ломая бизнес-логики: предложите свое видение архитектуры и реализуйте его;
  2. (Дополнительно) На бэкенде есть возможность неочевидной оптимизации - выполните ее;
  3. (Дополнительно) Разбейте логику фронтенда на слои;

Примечания по реализации

Проект эволюционировал от простого прототипа на FastAPI до более структурированного сервиса обработки файлов.

Ключевые решения по реализации:

  • Асинхронный уровень API FastAPI

    • Сессии базы данных вводятся с помощью зависимостей FastAPI.
    • Операции с файловой системой переносятся в фоновые потоки (to_thread), чтобы избежать блокировки цикла событий.
  • Безопасная загрузка файлов

    • Загруженные файлы записываются с использованием потоковой передачи частями вместо загрузки всего файла в память.
    • Создание файла разделено на этапы сохранения в файловой системе и сохранения в базе данных.
    • Сохраненные файлы удаляются в случае сбоя валидации или сбоя при сохранении в базе данных.
  • Улучшения базы данных

    • Переход с моделей SQLAlchemy на модели SQLModel.
    • Добавлены соответствующие типы перечислений (enum) для processing_state, scan_state, и alert_level.
    • Драйвер базы данных сменён с asyncpg на psycopg. Это позволяет использовать один и тот же драйвер как для синхронного так и для асинхронного доступа к базе данных.
    • В качестве идентификаторов файлов используются UUID.
  • Фоновая обработка

    • Рабочий процесс (worker) использует синхронные сессии SQLAlchemy, что позволяет избежать ненужного управления асинхронным циклом событий (event loop) в фоновых задачах.
    • Использууются цепи (chain) из Celery Canvas вместо вызова задач одной из другой.
  • Организация кода

    • Конфигурация базы данных была отделена от сервизного слоя.
    • Повторяющаяся логика была объединена.
    • Были усовершенствованы очистка ресурсов и обработка транзакций с неявным откатом.

Запуск:

  1. docker compose -f docker-compose.dev.yml up
  2. docker exec -it backend alembic upgrade head

Открыть фронт: http://localhost:3000/test

Открыть бэк: http://localhost:8000/docs

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages