|
| 1 | +# Стажировка <a href="https://github.com/JavaWebinar/topjava">Topjava</a> |
| 2 | + |
| 3 | +## Открытые курсы: |
| 4 | +- [Spring Boot 3.x + HATEOAS](https://javaops.ru/view/bootjava) |
| 5 | +- [Spring Boot 4, Spring 7.0, JDK 25](https://javaops.ru/view/bootjava4) |
| 6 | + |
| 7 | +## [Патчи занятия](https://drive.google.com/drive/u/1/folders/1sizknxR29Yu7XXjaVIBdS88ffXiVuqiB) |
| 8 | + |
| 9 | +## Миграция на Spring Boot |
| 10 | +За основу кода взят **[финальный код BootJava, ветка patched](https://github.com/JavaOPs/bootjava/tree/patched/src/main/java/ru/javaops/bootjava)** |
| 11 | +Вычекайте в отдельную папку (как отдельный проект) ветку `spring_boot` нашего проекта (так удобнее, не придется постоянно переключаться между ветками): |
| 12 | +``` |
| 13 | +git clone --branch spring_boot --single-branch https://github.com/JavaWebinar/topjava.git topjava_boot |
| 14 | +``` |
| 15 | +Если будете его менять, [настройте `git remote`](https://javaops.ru/view/bootjava/lesson01#project) |
| 16 | +> Если захотите сами накатить патчи, сделайте ветку `spring_boot` от первого `init` и в корне **создайте каталог `src\test`** |
| 17 | +
|
| 18 | +---- |
| 19 | + |
| 20 | +#### Apply 12_1_init_boot_java |
| 21 | +- Для средних и больших проектов более удобна [организация пакетов по функционалу](https://stackoverflow.com/questions/6260302/548473): сначала крупными мазками функционал, внутри него слои. |
| 22 | + Финальный код Spring Boot 3.x (BootJava) разбил по функционалу на `app`, `common` и `user`. |
| 23 | + Процесс творческий, на одном из проектов я попробовал использовать [Spring Modulith](https://spring.io/projects/spring-modulith) и отказался от него, так как очень часто сущности делятся между разным функционалом и строгих границ не провести. "Суббота для человека, а не человек для субботы" в программировании звучит как: "Здравый смысл впереди строгой идеологии и архитектуры". |
| 24 | + Именно поэтому еда, принадлежащая юзеру, попала в пакет `user`. Если будете соблюдать такую структуру в своем выпускном проекте - НЕ МЕЛЬЧИТЕ! |
| 25 | +- Для получения авторизованного пользователя из `AuthUser` выделил отдельный `AuthUtil` класс. |
| 26 | + |
| 27 | + |
| 28 | +#### Apply 12_2_migrate_spring_boot_4 |
| 29 | +- Миграция на Spring Boot 4 в соответствии с [первым занятием Spring Boot 4](https://javaops.ru/view/bootjava4/lesson01) |
| 30 | +- [Дополнительный функционал](https://javaops.ru/view/bootjava4/lesson02) - кэширование при авторизации, |
| 31 | +API Versioning и Maven 4 - совершенно опционален в вашем выпускном, делать по желанию. |
| 32 | + |
| 33 | + |
| 34 | +#### Apply 12_3_add_calories_meals |
| 35 | + |
| 36 | +Добавил из TopJava: |
| 37 | +- Еду, калории |
| 38 | +- Таблицы назвал в единственном числе: `user_role, meal` (кроме `users`, _user_ зарезервированное слово) |
| 39 | +- Общие вещи (пусть небольшие) вынес в сервис : `MealService` |
| 40 | +- Проверку принадлежности еды делаю в `MealRepository.getBelonged` |
| 41 | +- Вместо своих конверторов использую `@DateTimeFormat` |
| 42 | +- Обратите внимание на `UserRepository.getWithMeals` - он [не работает с `@EntityGraph`. Зато работает с обычным `JOIN FETCH`](https://stackoverflow.com/a/46013654/548473) и `DISTINCT` больше не нужен: |
| 43 | + - [forget about DISTINCT](https://vladmihalcea.com/spring-6-migration/#Auto-deduplication) |
| 44 | + - [it is no longer necessary to use distinct in JPQL and HQL](https://docs.jboss.org/hibernate/orm/6.0/migration-guide/migration-guide.html#query-sqm-distinct) |
| 45 | +- Мигрировал все тесты контроллеров. В выпускном проекте столько тестов необязательно! Достаточно нескольких, на основные юзкейсы. |
| 46 | +- Кэширование в выпускном очень желательно. 7 раз подумайте, что будете кэшировать! |
| 47 | +- **Максимально просто, самые частые запросы, которые редко изменяются**. |
| 48 | +- **Добавьте в свой выпускной OpenApi/Swagger - это будет большим плюсом и избавит от необходимости писать документацию**. |
| 49 | + |
| 50 | +### За основу выпускного предлагаю взять этот код миграции, сделав свой выпускной МАКСИМАЛЬНО в этом стиле. |
| 51 | +### Успехов с выпускным проектом и в карьере! |
0 commit comments