Skip to content

Repository files navigation

Многопользовательское облачное хранилище, где можно регистрироваться, создавать папки, загружать, скачивать, искать, перемещать и удалять файлы. Размер одного файла ограничен 100 МБ, одновременно можно загрузить до 50 файлов

Стек

  • Java 21
  • Spring Boot, Spring Web, Spring Security, Spring JDBC, Spring Session Data Redis
  • PostgreSQL, MinIO, Redis
  • Liquibase
  • Swagger
  • MapStruct, Lombok
  • Gradle, Docker
  • JUnit, Spring Boot Test, Testcontainers
  • Готовый фронтенд с небольшими правками

Локальный запуск

Требуется наличие Docker

  1. Создайте файл .env на основе .env.example и укажите свои значения для PostgreSQL, Redis, MinIO и CORS:

    cp .env.example .env
  2. В файле frontend/public/config.js укажите актуальный адрес backend (для запуска на VPS укажите IP-адрес сервера):

    baseUrl: "http://localhost:8080"
  3. Соберите и запустите приложение:

    docker compose up -d --build

    После запуска frontend будет доступен по адресу http://localhost, backend по адресу http://localhost:8080, а swagger ui по http://localhost:8080/swagger-ui/index.html

Тестирование

Написаны только интеграционные тесты для регистрации и входа с использованием Testcontainers и MockMVC. Запуск:

./gradlew test

Недочеты реализации

Операции с директориями не поддерживают откат при частичном выполнении. Например, если во время перемещения обнаружится конфликт с уже существующим файлом, ранее скопированные файлы останутся в целевой директории, а исходные файлы не будут удалены

Ограничение связано с выбранной архитектурой хранения: директории представлены явными объектами в MinIO. Более надежным решением было бы хранить метаданные ресурсов в базе данных, однако я понял это уже на позднем этапе написания проекта. Еще сильнее усложнять архитектуру ради исправления этого недочета не хотелось

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages