Conversation
dendzim
commented
Dec 19, 2025
Пришлось пересоздать ветку и залить по новой схему БД с промежуточной peer-to-peer проверки. В самом проекте в БД нет поля статус в таблице User_friends и переименованы некоторые поля из-за синтаксиса тестов постмана, остальное осталось неизменным.
По ФЗ12
реализован функционал ФЗ12
Добавлена H2 БД которая записывается в файл в проекте и в память для интеграционных тестов соответственно.
Добавлены интеграционные тесты.
В проекте осталось два рудиментарных класса реализовывающих хранение данных в памяти.
В pom файл добавлен check style плагин.
| private final FilmService filmService; | ||
| private final FilmService service; | ||
|
|
||
| @Autowired |
There was a problem hiding this comment.
@Autowired перед конструктором можно не писать.
Да и весь конструктор с рутинным кодом можно не писать, если воспользоваться библиотекой lombok. Советую ее изучить и применять.
https://habr.com/ru/companies/piter/articles/676394/
There was a problem hiding this comment.
InMemory реализации из проекта нужно убрать, больше не понадобятся.
There was a problem hiding this comment.
InMemory реализации из проекта нужно убрать, больше не понадобятся.
| @ExceptionHandler | ||
| @ResponseStatus(HttpStatus.BAD_REQUEST) | ||
| public ErrorResponse handleValidationException(final ValidationException e) { | ||
| return new ErrorResponse(e.getMessage()); |
There was a problem hiding this comment.
Лучше добавить логирование ошибок log.error(...), это позволит легче с ними разбираться.
| } | ||
|
|
||
| public static final Comparator<Film> comparator = Comparator.comparingInt(Film::getRating).reversed(); | ||
| private void validateFilm(Film film) { |
There was a problem hiding this comment.
Для валидации можно также использовать аннотации валидации на полях классов (@NotNull, @Size и т.д.) и параметрах методов (@Valid, @Validated). Советую применить, т.к. в дальнейшем этот подход будет использоваться часто.
| import java.util.List; | ||
|
|
||
| @Repository | ||
| public abstract class BaseDao<T> { |
There was a problem hiding this comment.
Отлично, что сделал базовый абстрактный класс, @Repository лишний на нем, т.к. экземпляр не будет никогда создаваться.
| } | ||
| private Rating mpa; | ||
| @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||
| private Integer likes = 0; |
There was a problem hiding this comment.
Можно не хранить в поле и соответственно обновлять и удалять кол-во лайков, а рассчитывать с помощью SQL в getPopular
|
|
||
| @Override | ||
| public Film create(Film film) { | ||
| if (ratingStorage.findRatingById(film.getMpa().getId()).isEmpty()) { |
There was a problem hiding this comment.
Проверки на существование рейтинга и жанров можно не делать, т.к. в схеме БД сделаны внешние ключи и выбросится исключение, если вставляемых рейтингов и жанров не будет в БД
| .map(genre -> new Object[]{filmId, genre.getId()}) | ||
| .toList(); | ||
|
|
||
| jdbc.batchUpdate(ADD_GENRE_TO_FILM_QUERY, batchArgs); |
There was a problem hiding this comment.
Отлично, что используешь batchUpdate
VadimZharkov
left a comment
There was a problem hiding this comment.
Хорошая работа в целом, можно улучшить.
|
Внес правки согласно замечаниям: |
|
|
||
| @Getter | ||
| public class ErrorResponse { | ||
| String error; |
src/main/resources/schema.sql
Outdated
| ); | ||
|
|
||
| CREATE TABLE IF NOT EXISTS films_genres ( | ||
| film_id INTEGER, |
src/main/resources/schema.sql
Outdated
|
|
||
| CREATE TABLE IF NOT EXISTS films_genres ( | ||
| film_id INTEGER, | ||
| genre_id INTEGER, |
VadimZharkov
left a comment
There was a problem hiding this comment.
Доработки увидел, все хорошо. Нужно еще пару моментов поправить.
