Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time

TopJava Release Notes

TopJava 26

  • починили шаблоны запросов на создание в Swagger хчз ApiModelProperty
  • в новой версии Data JPA getById->getReferenceById
  • мелкие правки

TopJava 25

  • поправил NoHtmlValidator: Jsoup.clean().equals -> Jsoup.isValid`
  • починил role VARCHAR NOT NULL
  • добавил нового тестового пользователя guest

TopJava 24

  • migrate to LTS JDK 17
  • add AbstractBaseEntity.id()
  • fix for User.registered: @Column(..., updatable = false)
  • add @QueryHints in CrudUserRepository
  • add loggin in RootController
  • fix @Sql(.., , executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) for controller tests after service tests
  • rename MATCHER to USER_MATCHER/MEAL_MATCHER
  • treat in ActiveDbProfileResolver attribute profiles

TopJava 23

  • migrate to JDK 16
  • в новой spring-data-jpa getOne заменили на getById
  • в UserUtil#prepareToSave убрал проверку пароля на hasText. На UI поле проверяется на @NotBlank
  • ProfileRestController#register делаю по правилам REST (POST без "/register")
  • css стили data-... сделал low-case через дефисы
  • TestMatcher переименовал в MatcherFactory
  • Для Swagger UI пометил AuthorizedUser аннотацией @ApiIgnore

TopJava 22

  • очистка пароля AuthorizedUser#userTo
  • заменил @SafeHtml, который удалили из hibernate.validator на Jsoup.clean
  • перенес запрет на обновление admin/user в UserService
  • проверку email на уникальность для update с id=null в теле запроса сделал на основе анализа HttpServletRequest.getRequestURI()
  • проверку класса в classpath в Profiles#getActiveDbProfile делаю на org.springframework.util.ClassUtils#isPresent
  • удалил type="text/javascript"

TopJava 21

  • добавили документирование REST API: Swagger
  • мигрировали на JDK 15 и используем текстовые блоки
  • Вынес produces = MediaType.APPLICATION_JSON_VALUE на уровень контроллеров
  • Правильно используем глабальные переменные в js
  • Зарефакторил inputField.tag
  • Тестовые переменные переименовал из UPPERCASE в camelCase
  • Из тестов сервисов убрал throws Exception (в IDEA больше не генерятся по умолчанию)
  • Мигрировали на Spring Boot 2.4.1

TopJava 20

  • мигрировали на JDK 14
  • в @SafeHtml запрещаем весь html (whitelistType = NONE)
  • в topjava.common.js в makeEditable() вместо объекта контекст передаю 3 параметра
  • в UI контроллерах убрал префикс ajax
  • из тестов сервисов убрал repository. При проверке через assertThrows он не требуется
  • в TestMatcher сценарии сравнения сделал параметризируемыми (паттерн стратегия)
  • в API добавили /users/{id}/with-meals (см. двунаправленные отношения)
  • добавил UserTestData.USER_WITH_MEALS_MATCHER (проверки пользователя сразу с едой) и константу id NOT_FOUND

TopJava 19

  • Изменилась логика для интервалов времени (исключаем endTime)
  • Заменил собственный MessageUtil велосипед на спринговый MessageSourceAccessor
  • В ролях убрал префиксы ROLE_ (Role and GrantedAuthority)
  • Добавился удобный метод int AbstractBaseEntity.id()
  • Фикс Location в ProfileRestController.register
  • Фикс валидации UniqueMailValidator для REST update без user.id
  • Заменил jdbc.initLocation на полный путь - IDEA не ругается
  • В конфигурации cargo-maven2-plugin сделал индивидуальный контекст приложения
  • Тесты
    • Обновил даты еды на 2020г.
    • Зарефакторил тесты сервисов на удаление - NotFoundException может бросаться при delete()
    • В тестах контроллеров вернулся к реализации без обертки над MockMvcRequestBuilders
    • Для InMemory тестов подключаю только inmemory.xml (добавил туда необходимую конфигурацию из spring-app.xml)

TopJava 18

  • В ErrorType добавил HttpStatus status
  • В PostgreSQL обнаружилась бага: граничное значение 0:00 из-за ошибок округления попадает в предыдущий интервал. Мораль: всегда в тестах проверяйте граничные значения. Добавил этот случай в тестовые данные.
  • Изменил MealRepository.getBetween (принимаю @Nullable LocalDate). Изменились реализации.
  • Выделил метод UserService.prepareAndSave
  • В TO поля сделал final, используем @ConstructorProperties
  • Наконец локализировал описание приложения на страничке входа
  • Для полей ввода дат добавил autocomplete="off"
  • При закрытии модального окна закрываю окно ошибок
  • Тесты:
    • Вместо очистки кэшей перед каждым тестом отключаем кэши для всех тестов
    • Вынес общий код тестирования контроллеров в AbstractControllerTest. Код тестов значительно сократился
    • Сделал типизированный TestMatchers<T> для проверки результатов тестов. В классах UserTestData и MealTestData создаю его инстансы с заданным типом и методикой сравнения.
    • В тестах delete и create проверяю результат напрямую (не через getAll)

TopJava 17

  • Удалил Impl из названий репозиториев
  • Удалил интерфейсы к сервисам, использую классы
  • Добавил AdminRestController.enable, вызов через PATCH метод
  • Добавил валидацию для jdbc через Bean Validation API
  • Перенес работу в UI с профилем из RootController в ProfileUIController
  • SLF4JBridgeHandler инициализирую только в профиле postgres

TopJava 16

TopJava 15

  • Миграция на 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()

TopJava 14

  • Миграция на JUnit 5
  • Для измерения времени в тестах использую Spring StopWatch
  • SimpleJdbcInsert и NamedParameterJdbcTemplate конструируются (и берут настройки) из jdbcTemplate
  • AuthorizedUser зарефакторился в SecurityUtil
  • В javascript заменил var на let/const. Поддержка 95% браузеров
  • Подправил UI фильтрации и заголовка страниц, добавилась кнопка Cancel в профиль
  • Починил баг в FireFox: пустой ответ по ajax
  • Сделал вход в приложение при нажании кнопок Зайти как ...
  • Добавил регистрацию пользователя по REST
  • Преименовал js файлы согласно javascript filename naming convention
  • Сделал проверку startTime/endTime на фильтре времени (после обновления datetimepicker до 2.5.20)

TopJava 13

TopJava 12

TopJava 11

  • добавил

  • рефакторинг

    • починил коммит формы по 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.
  • правки

    • переименовал ModelMatcher в BeanMatcher и починил: можно сравнивать только упорядоченные коллекции (List)
    • поменял зависимость org.hibernate:hibernate-validator на org.hibernate.validator:hibernate-validator (warning при сборке)

TopJava 10

TopJava 9

  • добавил
  • рефакторинг
    • переименовал 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

TopJava 8

  • добавил:
  • удалил зависимость jul-to-slf4j
  • рефакторинг
    • переименовал все классы UserMeal** в Meal**, JSP
    • переименовал LoggedUser в AuthorizedUser
    • починил работа с PK Hibernate в случае ленивой загрузки (баг HHH-3718)
    • поменял в BaseEntity equals/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)

TopJava 7

TopJava 3-6

  • добавил
    • выпускной проект
    • в таблицу 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'
  • убрал
  • обновил
    • Hibernate до 5.x и Hibernate Validator, добавились новые зависимости и jackson-datatype-hibernate5
    • datatables API (1.10)
    • Postgres драйвер. Новый драйвер поддерживает Java 8 Time API, разделил реализацию JdbcMealRepositoryImpl на Java8 (Postgresql) и Timestamp (HSQL)