|
1 | 1 | # TopJava Release Notes
|
2 | 2 |
|
3 |
| -### Topjava 26 |
| 3 | +### TopJava 26 |
4 | 4 | - починили шаблоны запросов на создание в Swagger хчз [ApiModelProperty](https://www.baeldung.com/spring-swagger-hide-field)
|
5 | 5 | - в новой версии Data JPA `getById`->`getReferenceById`
|
6 | 6 | - мелкие правки
|
7 | 7 |
|
8 |
| -### Topjava 25 |
| 8 | +### TopJava 25 |
9 | 9 | - поправил `NoHtmlValidator`: `Jsoup.clean().equals -> `Jsoup.isValid`
|
10 | 10 | - починил `role VARCHAR NOT NULL`
|
11 | 11 | - добавил нового тестового пользователя `guest`
|
12 | 12 |
|
13 |
| -### Topjava 24 |
| 13 | +### TopJava 24 |
14 | 14 | - migrate to LTS JDK 17
|
15 | 15 | - add `AbstractBaseEntity.id()`
|
16 | 16 | - fix for `User.registered`: `@Column(..., updatable = false)`
|
|
20 | 20 | - rename `MATCHER` to `USER_MATCHER/MEAL_MATCHER`
|
21 | 21 | - treat in `ActiveDbProfileResolver` attribute `profiles`
|
22 | 22 |
|
23 |
| -### Topjava 23 |
| 23 | +### TopJava 23 |
24 | 24 | - migrate to JDK 16
|
25 | 25 | - в новой spring-data-jpa `getOne` заменили на `getById`
|
26 | 26 | - в UserUtil#prepareToSave убрал проверку пароля на `hasText`. На UI поле проверяется на `@NotBlank`
|
|
29 | 29 | - `TestMatcher` переименовал в `MatcherFactory`
|
30 | 30 | - Для Swagger UI пометил `AuthorizedUser` аннотацией `@ApiIgnore`
|
31 | 31 |
|
32 |
| -### Topjava 22 |
| 32 | +### TopJava 22 |
33 | 33 | - очистка пароля `AuthorizedUser#userTo`
|
34 | 34 | - заменил `@SafeHtml`, который удалили из `hibernate.validator` на [Jsoup.clean](https://stackoverflow.com/a/68888601/548473)
|
35 | 35 | - перенес запрет на обновление admin/user в `UserService`
|
36 | 36 | - проверку email на уникальность для update с `id=null` в теле запроса сделал на основе анализа `HttpServletRequest.getRequestURI()`
|
37 | 37 | - проверку класса в `classpath` в `Profiles#getActiveDbProfile` делаю на `org.springframework.util.ClassUtils#isPresent`
|
38 | 38 | - удалил `type="text/javascript"`
|
39 | 39 |
|
40 |
| -### Topjava 21 |
| 40 | +### TopJava 21 |
41 | 41 | - **добавили документирование REST API: Swagger**
|
42 | 42 | - мигрировали на JDK 15 и используем текстовые блоки
|
43 | 43 | - Вынес `produces = MediaType.APPLICATION_JSON_VALUE` на уровень контроллеров
|
|
47 | 47 | - Из тестов сервисов убрал `throws Exception` (в IDEA больше не генерятся по умолчанию)
|
48 | 48 | - **Мигрировали на Spring Boot 2.4.1**
|
49 | 49 |
|
50 |
| -### Topjava 20 |
| 50 | +### TopJava 20 |
51 | 51 | - мигрировали на JDK 14
|
52 | 52 | - в `@SafeHtml` запрещаем весь html (`whitelistType = NONE`)
|
53 | 53 | - в `topjava.common.js` в `makeEditable()` вместо объекта контекст передаю 3 параметра
|
|
57 | 57 | - в API добавили `/users/{id}/with-meals` (см. [двунаправленные отношения](https://www.codeflow.site/ru/article/jackson-bidirectional-relationships-and-infinite-recursion))
|
58 | 58 | - добавил `UserTestData.USER_WITH_MEALS_MATCHER` (проверки пользователя сразу с едой) и константу id `NOT_FOUND`
|
59 | 59 |
|
60 |
| -### Topjava 19 |
| 60 | +### TopJava 19 |
61 | 61 | - Изменилась логика для интервалов времени (исключаем `endTime`)
|
62 | 62 | - Заменил собственный `MessageUtil` велосипед на спринговый `MessageSourceAccessor`
|
63 | 63 | - В ролях убрал префиксы `ROLE_` ([Role and GrantedAuthority](https://stackoverflow.com/a/19542316/548473))
|
|
73 | 73 | - Для `InMemory` тестов подключаю только `inmemory.xml` (добавил туда необходимую конфигурацию из `spring-app.xml`)
|
74 | 74 |
|
75 | 75 |
|
76 |
| -### Topjava 18 |
| 76 | +### TopJava 18 |
77 | 77 |
|
78 | 78 | - В `ErrorType` добавил `HttpStatus status`
|
79 | 79 | - В PostgreSQL обнаружилась бага: граничное значение `0:00` из-за ошибок округления попадает в предыдущий интервал.
|
|
91 | 91 | - В тестах `delete` и `create` проверяю результат напрямую (не через `getAll`)
|
92 | 92 |
|
93 | 93 |
|
94 |
| -### Topjava 17 |
| 94 | +### TopJava 17 |
95 | 95 | - Удалил `Impl` из названий репозиториев
|
96 | 96 | - Удалил интерфейсы к сервисам, использую классы
|
97 | 97 | - Добавил `AdminRestController.enable`, вызов через PATCH метод
|
98 | 98 | - Добавил валидацию для jdbc через Bean Validation API
|
99 | 99 | - Перенес работу в UI с профилем из `RootController` в `ProfileUIController`
|
100 | 100 | - `SLF4JBridgeHandler` инициализирую только в профиле `postgres`
|
101 | 101 |
|
102 |
| -### Topjava 16 |
| 102 | +### TopJava 16 |
103 | 103 | - Выделил общий код реализации хранения в памяти в `InMemoryBaseRepositoryImpl`
|
104 | 104 | - Сделал подтверждение для удаления записей
|
105 | 105 | - Обновились видео 7-го занятия. [Выложил его как пример занятия, некоторые видео открыты](https://github.com/JavaOPs/topjava/blob/master/doc/lesson07.md)
|
106 | 106 | - Сделали валидации дублирования email через `WebDataBinder` и `Validator`
|
107 | 107 |
|
108 |
| -### Topjava 15 |
| 108 | +### TopJava 15 |
109 | 109 | - Миграция на Servlet API 4.0 / Tomcat 9.x
|
110 | 110 | - [Миграция на JDK11](http://javaops.ru/view/resources/jdk8_11)
|
111 | 111 | - JUnit5 fix: <a href="https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven">junit-platform-surefire-provider не нужен</a></h4>
|
|
115 | 115 | - В javascript место глабальных переменных и одинаковой функции обновления таблицы задаю их в объекте контекст, который передаю в `makeEditable()` как параметр
|
116 | 116 | - Починил `back` в браузере после логина. Кнопки входа и регистрации отображаю только для `isAnonymous()`
|
117 | 117 |
|
118 |
| -### Topjava 14 |
| 118 | +### TopJava 14 |
119 | 119 | - [Миграция на JUnit 5](http://javaops.ru/view/resources/junit5)
|
120 | 120 | - Для измерения времени в тестах использую [Spring StopWatch](https://www.logicbig.com/how-to/code-snippets/jcode-spring-framework-stopwatch.html)
|
121 | 121 | - `SimpleJdbcInsert` и `NamedParameterJdbcTemplate` конструируются (и берут настройки) из `jdbcTemplate`
|
|
128 | 128 | - Преименовал js файлы согласно [javascript filename naming convention](https://stackoverflow.com/questions/7273316/what-is-the-javascript-filename-naming-convention)
|
129 | 129 | - Сделал проверку startTime/endTime на фильтре времени (после обновления datetimepicker до 2.5.20)
|
130 | 130 |
|
131 |
| -### Topjava 13 |
| 131 | +### TopJava 13 |
132 | 132 | - [Миграция на Botstrap 4](https://getbootstrap.com/docs/4.1/migration/)
|
133 | 133 | - Добавил [Responsive behaviors](https://getbootstrap.com/docs/4.1/components/navbar/#responsive-behaviors) - при уменшении ширины экрана навигация сворачивается в кнопку
|
134 | 134 | - Для отображения цвета еды и выключенного юзера использую [data-* атрибуты](https://developer.mozilla.org/ru/docs/Web/Guide/HTML/Using_data_attributes)
|
135 | 135 | - В `inputField.tag` передаю как параметр код для локализации label, а в `i18n.jsp` передаю как параметр `page`. См. [JSP include action with parameter example](https://beginnersbook.com/2013/12/jsp-include-with-parameter-example)
|
136 | 136 |
|
137 |
| -### Topjava 12 |
| 137 | +### TopJava 12 |
138 | 138 | - [Миграция на Spring 5](http://javaops.ru/view/resources/spring5)
|
139 | 139 | - обновил версии: Ehcache 3.x, datatables, datetimepicker
|
140 | 140 | - добавил видео решений HW0 с одним проходом
|
|
147 | 147 | - заменил в jQuery [success на done](https://stackoverflow.com/a/22213543/548473)
|
148 | 148 | - вместо `lang.jsp` сделал общий `bodyHeader.jsp`
|
149 | 149 |
|
150 |
| -### Topjava 11 |
| 150 | +### TopJava 11 |
151 | 151 | - добавил
|
152 | 152 | - доп. решение HW1 через одним return и O(N)
|
153 | 153 | - раскрасил лог ([Logback layouts coloring](https://logback.qos.ch/manual/layouts.html#coloring))
|
|
173 | 173 | - переименовал `ModelMatcher` в `BeanMatcher` и починил: можно сравнивать только упорядоченные коллекции (List)
|
174 | 174 | - поменял зависимость `org.hibernate:hibernate-validator` на `org.hibernate.validator:hibernate-validator` (warning при сборке)
|
175 | 175 |
|
176 |
| -### Topjava 10 |
| 176 | +### TopJava 10 |
177 | 177 | - добавил
|
178 | 178 | - доступ к AuthorizedUser через [`@AuthenticationPrincipal`](http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#mvc-authentication-principal) и [authentication Tag](http://docs.spring.io/spring-security/site/docs/current/reference/html/taglibs.html#the-authentication-tag)
|
179 | 179 | - [Обработку 404 NotFound](https://stackoverflow.com/questions/18322279/spring-mvc-spring-security-and-error-handling)
|
|
202 | 202 | - distinct из запроса Hibernate на пользователей с ролями. [Оптимизация запроса distinct: 15.16.2](https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#hql-distinct)
|
203 | 203 | - лишние `<div>` тэги (`shadow` и `view-box`)
|
204 | 204 |
|
205 |
| -### Topjava 9 |
| 205 | +### TopJava 9 |
206 | 206 | - добавил
|
207 | 207 | - выбор профиля базы через `ActiveProfilesResolver`/`AllActiveProfileResolver` на основе драйвера базы в classpath
|
208 | 208 | - видео <a href="https://drive.google.com/file/d/0B9Ye2auQ_NsFVmdpNDJSNXRTWUE">Cascade. Auto generate DDL.</a>
|
|
221 | 221 | - вместо `Persistable` ввел интерфейс `HasId` и наследую от него как Entity, так и TO
|
222 | 222 | - сделал универсальную обработку исключений дублирования email и dateTime
|
223 | 223 |
|
224 |
| -### Topjava 8 |
| 224 | +### TopJava 8 |
225 | 225 | - добавил:
|
226 | 226 | - [защиту от XSS (Cross-Site Scripting)](http://stackoverflow.com/a/40644276/548473)
|
227 | 227 | - интеграцию с <a href="https://dependencyci.com/">Dependency Ci</a> и <a href="https://travis-ci.org/">Travis Ci</a>
|
|
245 | 245 | - перенес вызовы `UserUtil.prepareToSave` из `AbstractUserController` в `UserServiceImpl`
|
246 | 246 | - зарефакторил обработку ошибок (`ExceptionInfoHandler`)
|
247 | 247 |
|
248 |
| -### Topjava 7 |
| 248 | +### TopJava 7 |
249 | 249 | - добавил:
|
250 | 250 | - [JPA 2.1 EntityGraph](https://docs.oracle.com/javaee/7/tutorial/persistence-entitygraphs002.htm)
|
251 | 251 | - [Jackson @JsonView](https://habrahabr.ru/post/307392/)
|
|
260 | 260 | - матчеров тестирования (сделал автоматические обертки и сравнение на основе передаваемого компаратора)
|
261 | 261 | - вынес форматирование даты в `functions.tld`
|
262 | 262 |
|
263 |
| -### Topjava 3-6 |
| 263 | +### TopJava 3-6 |
264 | 264 | - добавил
|
265 | 265 | - [выпускной проект](https://drive.google.com/open?id=0B9Ye2auQ_NsFcG83dEVDVTVMamc)
|
266 | 266 | - в таблицу meals составной индекс
|
|
0 commit comments