- Выделил общий код реализации хранения в памяти в
InMemoryBaseRepositoryImpl - Сделал подтверждение для удаления записей
- Обновились видео 7-го занятия. Выложил его как пример занятия, некоторые видео открыты
- Сделали валидации дублирования email через
WebDataBinderиValidator
- Миграция на Servlet API 4.0 / Tomcat 9.x
- Миграция на JDK11
- JUnit5 fix: junit-platform-surefire-provider не нужен
- Рефакторинг тестов:
- в
RootControllerTest.testUsersдля проверки используемAssertionMatcherадаптер - вместо
content().json()отjsonassertдесериализуем json и используем сравнения черезAssertJ
- в
- В javascript место глабальных переменных и одинаковой функции обновления таблицы задаю их в объекте контекст, который передаю в
makeEditable()как параметр - Починил
backв браузере после логина. Кнопки входа и регистрации отображаю только дляisAnonymous()
- Миграция на JUnit 5
- Для измерения времени в тестах использую Spring StopWatch
SimpleJdbcInsertиNamedParameterJdbcTemplateконструируются (и берут настройки) изjdbcTemplateAuthorizedUserзарефакторился вSecurityUtil- В javascript заменил
varнаlet/const. Поддержка 95% браузеров - Подправил UI фильтрации и заголовка страниц, добавилась кнопка
Cancelв профиль - Починил баг в FireFox: пустой ответ по ajax
- Сделал вход в приложение при нажании кнопок
Зайти как ... - Добавил регистрацию пользователя по REST
- Преименовал js файлы согласно javascript filename naming convention
- Сделал проверку startTime/endTime на фильтре времени (после обновления datetimepicker до 2.5.20)
- Миграция на Botstrap 4
- Добавил Responsive behaviors - при уменшении ширины экрана навигация сворачивается в кнопку
- Для отображения цвета еды и выключенного юзера использую data-* атрибуты
- В
inputField.tagпередаю как параметр код для локализации label, а вi18n.jspпередаю как параметрpage. См. JSP include action with parameter example
- Миграция на Spring 5
- обновил версии: Ehcache 3.x, datatables, datetimepicker
- добавил видео решений HW0 с одним проходом
- поправил видео Обзор Spring Framework. Spring Context. Дописал про Constructor injection.
- заменил видео про тетсирование сервисов. Вместо самодельных матчеров стали использовать AssertJ. Видео Тестирование UserService через AssertJ, время 1:53
- сделал видео с jQuery конвертерами и дефолтными группами валидации при сохранении в базу
- сделал видео с новым
DelegatingPasswordEncoderи Json READ/WRITE access - убрал
AccessType.PROPERTYдляAbstractBaseEntity.id(см. fixed HHH-3718) - удалил
PasswordUtil, возвращаю статусNO_CONTENTдля REST delete, убрал группы валидации вUserTo - заменил в jQuery success на done
- вместо
lang.jspсделал общийbodyHeader.jsp
-
добавил
- доп. решение HW1 через одним return и O(N)
- раскрасил лог (Logback layouts coloring)
-
рефакторинг
- починил коммит формы по cancel (
history.back()) в FireFox - заменил неработающий DependencyCi на VersionEye c проверкой зависимостей на uptodate
- починил
CrudUserRepository.getWithMeals()через@EntityGraph. С неколькими ролями (у админа) еда дублируется - починил тесты контроллеров с профилем JDBC (
JpaUtilотсутствует в контексте JDBC) - переименовал
meal.jsp/user.jspвmealForm.jsp/userForm.jsp - в
InMemoryMealRepositoryImpl.save()сделал update атомарным - переименовал методы сервисов
saveвcreate - переименовал и cделал классы
BaseEntityиNamedEntityабстрактными - обновил Noty и API с ним до 3.1.0. Добавил glyphicon в сообщения Noty
- заменил
MATCHER_WITH_EXCEEDна валидацию через JSONassert. - поменял Deprecated валидаторы
org.hibernate.validator.constraintsнаjavax.validation.constraints - убрал пароль из результатов REST через @JsonProperty READ_ONLY / WRITE_ONLY. Тесты на REST пришлось починить добавлением добавлением в JSON пароля как дополнительного параметра (
JsonUtil.writeWithExtraProps) - убрал JSON View и сделал преобразование времени на UI с помощью jQuery converters
- поменял группу валидации по умолчанию при сохранении через JPA. Теперь
все валидаторы в модели работаю по умолчанию (
groupsне требуется). - Добавил в
ErrorInfoтип ошибкиErrorType+ i18n.
- починил коммит формы по cancel (
-
правки
- переименовал
ModelMatcherвBeanMatcherи починил: можно сравнивать только упорядоченные коллекции (List) - поменял зависимость
org.hibernate:hibernate-validatorнаorg.hibernate.validator:hibernate-validator(warning при сборке)
- переименовал
- добавил
- доступ к AuthorizedUser через
@AuthenticationPrincipalи authentication Tag - Обработку 404 NotFound
- локализацию ошибок валидации
- проверки json в тестах через JSONassert и через jsonPath
- логирование от Postgres Driver
- в
.travis.ymlсборку только ветки master - защиту от кэширование ajax запросов в IE
- обработку запрета модификации системный юзеров через универсальный
ApplicationException
- доступ к AuthorizedUser через
- рефакторинг
- сделал
@EntityGraphчерезattributePaths - реализаовал обработку дублирования
user.emailиmeal.dateTimeчерез Controller Based Exception Handling - поменял отключение транзакционности в тестах через
@Transactional(propagation = Propagation.NEVER) - сделал выбор в сервлете через switch
- все логгирование сделал через {} форматирование и поправил его в контроллерах (поле проверки id)
- перешел на конструктор DI
- в
ModelMatcherпереименовалComparator->Equality - заинлайнил все лямбды (компараторы, ModelMatcher.equality)
- поменялась реализация
JdbcUserRepositoryImpl.getAll() - на UI кнопки в таблице заменились на линки, поправил сообщения локализации
- сделал кастомизацию JSON (@JsonView) и валидацию (groups) для данных еды, отдаваемых на UI
- в
JdbcUserRepositoryImplпоменялMapSqlParameterSourceнаBeanPropertySqlParameterSource
- сделал
- удалил
- зависимость
javax.transaction.jta(уже не нужна) ${spring.version}вpom.xmlзависимостях (уже есть вspring-framework-bom)- distinct из запроса Hibernate на пользователей с ролями. Оптимизация запроса distinct: 15.16.2
- лишние
<div>тэги (shadowиview-box)
- зависимость
- добавил
- выбор профиля базы через
ActiveProfilesResolver/AllActiveProfileResolverна основе драйвера базы в classpath - видео Cascade. Auto generate DDL.
- проверку на правильность id в Ajax/Rest контроллерах (treat IDs in REST body)
- тесты на валидацию входных значений контроллеров и зависимость на имплементацию
- Bootstrap Glyphicons
- выбор профиля базы через
- рефакторинг
- переименовал
TimeUtilвDateTimeUtil - переименовал
ExceptionUtilвValidationUtil - заменил валидацию
@NotEmptyна@NotBlank - заменил
CascadeType.REMOVEна@OnDelete - изменил
JdbcUserRepositoryImpl.getAll() - обновил jQuery до 3.x, исключил из зависимостей webjars ненужные jQuery
- cделал загрузку скриптов асинхронной
- фильтр еды сделал в Bootstrap Panels
- вместо
Persistableввел интерфейсHasIdи наследую от него как Entity, так и TO - сделал универсальную обработку исключений дублирования email и dateTime
- переименовал
- добавил:
- защиту от XSS (Cross-Site Scripting)
- интеграцию с Dependency Ci и Travis Ci
- локализацию календаря
- сводку по результатам тестов
- примеры запросов curl в
config/curl.md - DataTables/Bootstrap 3 integration
- тесты на профиль деплоя Heroku (общее количество JUnit тестов стало 102)
- удалил зависимость
jul-to-slf4j - рефакторинг
- переименовал все классы
UserMeal**вMeal**, JSP - переименовал
LoggedUserвAuthorizedUser - починил работа с PK Hibernate в случае ленивой загрузки (баг HHH-3718)
- поменял в
BaseEntityequals/hashCode/implements Persistable - в
InMemoryMealRepositoryImplвыделил методgetAllStream - перенес проверки пердусловий
AssertизInMemoryрепозиториев в сервисы - переименовал классы Proxy* на более адекватные Crud*
- поменял реализацию
JpaMealRepositoryImpl.get, добавил в JPA модель@BatchSize - вместо
@RequestMappingввел Spring 4.3 аннотации@Get/Post/...Mapping - поменял авторизацию в тестах не-REST контроллеров
- перенес вызовы
UserUtil.prepareToSaveизAbstractUserControllerвUserServiceImpl - зарефакторил обработку ошибок (
ExceptionInfoHandler)
- переименовал все классы
- добавил:
- JPA 2.1 EntityGraph
- Jackson @JsonView
- валидацию объектов REST
- i18n в JavaScript
- проверку предусловий и видео Методы улучшения качества кода
- интеграцию с проверкой кода в Codacy
- сравнение вермени исполнения запросов при различных meals индексах
- tomcat7-maven-plugin плагин перключили на Tomcat 8 (cargo-maven2-plugin)
- рефакторинг
- обработка ошибок сделал с array
- матчеров тестирования (сделал автоматические обертки и сравнение на основе передаваемого компаратора)
- вынес форматирование даты в
functions.tld
- добавил
- выпускной проект
- в таблицу meals составной индекс
- константы
Profiles.ACTIVE_DB,Profiles.DB_IMPLEMENTATION - проверки и тесты на
NotFoundдляUserMealService.getWithUserиUserService.getWithMeals - в MockMvc фильтр CharacterEncodingFilter
- защиту от межсайтовой подделки запроса, видео Межсайтовая подделка запроса (CSRF)
- ограничение на диапазон дат для фильтра еды
- рефакторинг
- UserMealsUtil, ProfileRestController, компараторов в репозитоии
LoggedUserотнаследовал отorg.springframework.security.core.userdetails.User- переименовал
DbTestвAbstractServiceTestи перенес сюда@ActiveProfiles - сделал выполнение скриптов в тестах через аннотацию
@Sql - вместо использования id и селектора сделал обработчик
onclick - изменил формат ввода даты в форме без 'T'
- убрал
LoggerWrapper- Dandelion обертку к datatables
- обновил
- Hibernate до 5.x и Hibernate Validator, добавились новые зависимости и
jackson-datatype-hibernate5 - datatables API (1.10)
- Postgres драйвер. Новый драйвер поддерживает Java 8 Time API, разделил реализацию JdbcMealRepositoryImpl на Java8 (Postgresql) и Timestamp (HSQL)
- Hibernate до 5.x и Hibernate Validator, добавились новые зависимости и