Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hw5 #200

Open
wants to merge 55 commits into
base: master
Choose a base branch
from
Open

Hw5 #200

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
aee185c
HW0
xzer122 Oct 2, 2023
eae8770
HW0
xzer122 Oct 13, 2023
1320cfc
HW0
xzer122 Oct 13, 2023
59f1e3f
preparing to web
xzer122 Oct 16, 2023
0ad313c
HW1 patch
Oct 25, 2023
539fde2
second week
Oct 28, 2023
8109ecc
add spring context
Nov 1, 2023
5a4fe41
dependency injection
Nov 1, 2023
b28b9b3
annotation processing
Nov 16, 2023
bf426cc
repositories
Dec 13, 2023
032db3a
HW2_repo_filters
Dec 13, 2023
3a51eed
meal_layers
Dec 13, 2023
e38d62f
refactor repositories
Dec 14, 2023
49abdf0
optional MealServlet
Dec 14, 2023
4014725
optional filter
Dec 14, 2023
287f16b
optional select user
Dec 14, 2023
66c95da
bean life cycle
Dec 14, 2023
efca2fc
add junit
Dec 14, 2023
0b11457
add spring test
Dec 14, 2023
18b6386
add postgresql
Dec 14, 2023
affffc9
db implementation
Dec 17, 2023
89b205a
test UserService
Dec 17, 2023
5a95b79
test logging
Dec 17, 2023
d7f06bd
fix servlet
Dec 17, 2023
be83188
fix servlet
Dec 17, 2023
a3fab4a
lessons
Feb 3, 2024
82dfaf9
ignore lessons
Feb 14, 2024
c5c2975
HW_4_1
Feb 14, 2024
b52012b
HW_4_2
Feb 14, 2024
f8c7d6d
HW_4_3
Feb 14, 2024
cde4dc0
HW_4_4_fix_logging
Feb 14, 2024
cb2d69c
HW_4_5_improve_code
Feb 14, 2024
e2c6a01
4_6_init_and_populate_db
Feb 14, 2024
331dc24
4_7_create_inmemory_test_ctx
Feb 19, 2024
ed42b71
4_8_add_jpa
Feb 19, 2024
fbb2a84
4_9_named_query_and_transaction
Feb 19, 2024
5c30ab4
4_10_add_hsqldb
Feb 19, 2024
0ef3eea
5_1_jdk_21
Mar 3, 2024
aea3166
5_2_HW4
Mar 6, 2024
0b72fe1
5_3_fix_hibernate_issue
Mar 6, 2024
557f02b
5_4_HW4_optional
Mar 6, 2024
8a3ad2a
5_5_profiles_connection_pool
Mar 6, 2024
cd01cdd
5_6_profile_resolver
Mar 6, 2024
6ae8b57
5_7_spring_data_jpa
Mar 6, 2024
0305ecb
5_8_spring_cache
Mar 6, 2024
819b206
Revert "fix servlet"
Mar 8, 2024
d6dd8c5
Separate spring profiles
Mar 14, 2024
2851d15
everything until HW05.7
Apr 3, 2024
f36b345
hw5 fix
Apr 4, 2024
a8e00c0
master fix
May 30, 2024
19f4823
HW5
May 30, 2024
432adc1
make a common base class
May 30, 2024
0ffbee9
make a common base class pt.2
May 30, 2024
64d9c5c
save logic change
May 30, 2024
de8ef2e
fix "No session"
Jun 3, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,4 @@ out
target
*.iml
log
*.patch


*.patch
393 changes: 145 additions & 248 deletions README.md

Large diffs are not rendered by default.

45 changes: 45 additions & 0 deletions lessons/Lesson_11/lesson12.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Стажировка <a href="https://github.com/JavaWebinar/topjava">Topjava</a>

## [Патчи занятия](https://drive.google.com/drive/u/1/folders/1sizknxR29Yu7XXjaVIBdS88ffXiVuqiB)

## ![hw](https://cloud.githubusercontent.com/assets/13649199/13672719/09593080-e6e7-11e5-81d1-5cb629c438ca.png) Финальные правки:

Один из вариантов сокрытия полей в примерах Swagger - сделать специальный TO класс. Но можно сделать проще через специальные аннотации: [Hide a Request Field in Swagger API](https://www.baeldung.com/spring-swagger-hide-field)
- Скрываем необязательные поле `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).

#### Apply [11_16_HW_fix_swagger.patch](https://drive.google.com/file/d/1A76XXvZdZCKxeKnVjZ2VkrWAHEQ1iof2)

## Миграция на Spring Boot
За основу взят **[финальный код проекта BootJava с миграцией на Spring Boot 3.2, 8-й урок](https://javaops.ru/view/bootjava/lesson08)**
Вычекайте в отдельную папку (как отдельный проект) ветку `spring_boot` нашего проекта (так удобнее, не придется постоянно переключаться между ветками):
```
git clone --branch spring_boot --single-branch https://github.com/JavaWebinar/topjava.git topjava_boot
```
Если будете его менять, [настройте `git remote`](https://javaops.ru/view/bootjava/lesson01#project)
> Если захотите сами накатить патчи, сделайте ветку `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` больше не нужен:
- [forget about DISTINCT](https://vladmihalcea.com/spring-6-migration/#Auto-deduplication)
- [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)
- Мигрировал все тесты контроллеров. В выпускном проекте столько тестов необязательно! Достаточно нескольких, на основные юзкейсы.
- Кэширование в выпускном желательно. 7 раз подумайте, что будете кэшировать! **Максимально просто, самые частые запросы, которые редко изменяются**.
- **Добавьте в свой выпускной OpenApi/Swagger - это будет большим плюсом и избавит от необходимости писать документацию**.

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