Проект "Облачное хранилище файлов"
Многопользовательское облачное хранилище, где можно регистрироваться, создавать папки, загружать, скачивать, искать, перемещать и удалять файлы. Размер одного файла ограничен 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
-
Создайте файл
.envна основе.env.exampleи укажите свои значения для PostgreSQL, Redis, MinIO и CORS:cp .env.example .env
-
В файле
frontend/public/config.jsукажите актуальный адрес backend (для запуска на VPS укажите IP-адрес сервера):baseUrl: "http://localhost:8080" -
Соберите и запустите приложение:
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. Более надежным решением было бы хранить метаданные ресурсов в базе данных, однако я понял это уже на позднем этапе написания проекта. Еще сильнее усложнять архитектуру ради исправления этого недочета не хотелось