Skip to content

Instantly share code, notes, and snippets.

@Asenim
Created July 22, 2024 11:04
Show Gist options
  • Save Asenim/7209eb8846aef46d4efe8d0d009d1030 to your computer and use it in GitHub Desktop.
Save Asenim/7209eb8846aef46d4efe8d0d009d1030 to your computer and use it in GitHub Desktop.

https://github.com/Mich4107/cloud-file-storage
Ревью от Ивана

Docker и docker-compose:

  1. Как будто бы хочется мультистейдж билд, чтобы шаги кэшировать и лишнее не тянуть. Используй jre образ вместо jdk, чтоб затраты ресурсов на джаву. https://github.com/Mich4107/cloud-file-storage/blob/0d66e5eced70645f7b4841468dec56cf87331084/Dockerfile#L1

  2. Было бы круто пуллить образы из докерхаба. Можно даже автоматизировать через github-actions, а продовый энв как раз можно спрятать в github-secrets https://github.com/Mich4107/cloud-file-storage/blob/0d66e5eced70645f7b4841468dec56cf87331084/docker-compose.yml#L4

  3. Как ты мог заметить, depends_on не работает, потому что ты не прописал rediness (health) для сервисов. https://github.com/Mich4107/cloud-file-storage/blob/0d66e5eced70645f7b4841468dec56cf87331084/docker-compose.yml#L16

  4. Маппинг наружу для портов постгреса и редиса тут видимо забыл убрать) https://github.com/Mich4107/cloud-file-storage/blob/0d66e5eced70645f7b4841468dec56cf87331084/docker-compose.yml#L28

Domain entities:

  1. User::login - не вижу unique констреинта. https://github.com/Mich4107/cloud-file-storage/blob/0d66e5eced70645f7b4841468dec56cf87331084/src/main/java/ru/yuubi/cloud_file_storage/entity/User.java#L17

  2. Приложение называется - cloud file storage, но ни одной модели, связанной с файлами/директориями я не вижу

Services:

  1. Создание нового юзера - ансейф, при том констреинта на уникальность логина нету https://github.com/Mich4107/cloud-file-storage/blob/0d66e5eced70645f7b4841468dec56cf87331084/src/main/java/ru/yuubi/cloud_file_storage/service/AuthService.java#L22

  2. Дальше идет что-то непонятное для меня (инфраструктура security в сервисе). SecurityContext обычно проставляют на этапе фильтрации реквеста (SecurityFilterChain) В общем security должно быть вынесено из сервисов https://github.com/Mich4107/cloud-file-storage/blob/0d66e5eced70645f7b4841468dec56cf87331084/src/main/java/ru/yuubi/cloud_file_storage/service/AuthService.java#L32

  3. За такой MinioService я бы поставил тебе request-changes, там явно не хватает декомпозиции и очень много низкоуровневой логики, которая следует из использования минио в качестве стора. Напрямую используешь сдкашные объекты, потому что моделек для файлов и директорий нету. Так можно было бы обернуть клиент минио, а в сервисе работать со своими модельками. Нет никаких валидаций на уникальность объектов в сторе (старые просто перезаписываются). Очень много копипаста логики по наименованию объектов в минио (буквально в каждом методе она повторяется) В итоге все приложение содержится в этом сервисе. https://github.com/Mich4107/cloud-file-storage/blob/0d66e5eced70645f7b4841468dec56cf87331084/src/main/java/ru/yuubi/cloud_file_storage/service/MinioService.java#L37

Config:

  1. Таймауты для минио клиента не проставлены, а файл в 15000MB аплоадить ты будешь явно дольше, чем длится дефолтный таймаут

Controllers:

  1. Не увидел обработки эксепшенов => любой эксепшен приводит к рестарту контейнера. Логи не аппендятся в волюм, поэтому искать и фиксить баги в твоем приложении будет тяжело. Можно добавить хотя-бы keep-alive в конфиг спринга.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment