Skip to content

Latest commit

 

History

History
45 lines (35 loc) · 5.18 KB

File metadata and controls

45 lines (35 loc) · 5.18 KB

Стажировка Topjava

hw Финальные правки:

Один из вариантов сокрытия полей в примерах Swagger - сделать специальный TO класс. Но можно сделать проще через специальные аннотации: Hide a Request Field in Swagger API

  • Скрываем необязательные поле id при POST и PUT запросах через @ApiModelProperty(hidden = true) в примерах запроса Swagger. При этом передавать поле в запросе можно.
  • Meal.user отсутствует в REST API, можно игнорировать: @JsonIgnore
  • User.meals можно было сделать JsonProperty.Access.READ_ONLY, но при этом не пройдут тесты getWithMeals (maels не будет сериализоваться из ответа сервера для сравнения). Скрыл также через @ApiModelProperty(hidden = true)
  • Также можно было скрыть нулевое поле User.meals при выводе через @JsonInclude(JsonInclude.Include.NON_EMPTY). Но при этом поле исчезнет при запросе getWithMeals пользователя с пустым списком еды (например для Guest). Все зависит от бизнес-требований приложения (например насколько API публично и должно быть красивым). Можете попробовать самостоятельно скрыть это поле из вывода для запросов без еды через View (или отдельный TO).

Миграция на Spring Boot

За основу взят финальный код проекта BootJava с миграцией на Spring Boot 3.2, 8-й урок
Вычекайте в отдельную папку (как отдельный проект) ветку spring_boot нашего проекта (так удобнее, не придется постоянно переключаться между ветками):

git clone --branch spring_boot --single-branch https://github.com/JavaWebinar/topjava.git topjava_boot

Если будете его менять, настройте git remote

Если захотите сами накатить патчи, сделайте ветку spring_boot от первого init и в корне создайте каталог src\test


Apply 12_1_init_boot_java

Оставил как в TopJava название приложения Calories Management и имя базы topjava

Apply 12_2_add_calories_meals

Добавил из TopJava:

  • Еду, калории
  • Таблицы назвал в единственном числе: user_role, meal (кроме users, user зарезервированное слово)
  • Общие вещи (пусть небольшие) вынес в сервис : MealService
  • Проверку принадлежности еды делаю в MealRepository.getBelonged
  • Вместо своих конверторов использую @DateTimeFormat
  • Обратите внимание на UserRepository.getWithMeals - он не работает с @EntityGraph. Зато работает с обычным JOIN FETCH и DISTINCT больше не нужен:
  • Мигрировал все тесты контроллеров. В выпускном проекте столько тестов необязательно! Достаточно нескольких, на основные юзкейсы.
  • Кэширование в выпускном желательно. 7 раз подумайте, что будете кэшировать! Максимально просто, самые частые запросы, которые редко изменяются.
  • Добавьте в свой выпускной OpenApi/Swagger - это будет большим плюсом и избавит от необходимости писать документацию.

За основу выпускного предлагаю взять этот код миграции, сделав свой выпускной МАКСИМАЛЬНО в этом стиле.

Успехов с выпускным проектом и в карьере!