From 9f8c99c89ce18c02a455788251aefa317a05d712 Mon Sep 17 00:00:00 2001 From: Just Roma Date: Fri, 16 May 2025 09:05:41 +0500 Subject: [PATCH 1/2] fix test gitHub --- src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d365592..c6b25f4 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ logging.level.org.zalando.logbook=TRACE spring.sql.init.mode=always -spring.datasource.url=jdbc:h2:file:./db/filmorate +spring.datasource.url=jdbc:h2:mem:./db/filmorate spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password \ No newline at end of file From a3e9d856cbb87bce69509afeeec993f5026a0c38 Mon Sep 17 00:00:00 2001 From: Just Roma Date: Sat, 17 May 2025 14:54:43 +0500 Subject: [PATCH 2/2] fix review --- .../{model => annotation}/StartDate.java | 2 +- .../StartDateValidator.java | 2 +- .../filmorate/dal/JdbcFilmRepository.java | 3 -- .../filmorate/dal/JdbcReviewRepository.java | 4 --- .../filmorate/exception/ErrorHandler.java | 29 ++++++++++++++++++- .../practicum/filmorate/model/Film.java | 1 + src/main/resources/application.properties | 2 +- 7 files changed, 32 insertions(+), 11 deletions(-) rename src/main/java/ru/yandex/practicum/filmorate/{model => annotation}/StartDate.java (92%) rename src/main/java/ru/yandex/practicum/filmorate/{model => annotation}/StartDateValidator.java (90%) diff --git a/src/main/java/ru/yandex/practicum/filmorate/model/StartDate.java b/src/main/java/ru/yandex/practicum/filmorate/annotation/StartDate.java similarity index 92% rename from src/main/java/ru/yandex/practicum/filmorate/model/StartDate.java rename to src/main/java/ru/yandex/practicum/filmorate/annotation/StartDate.java index 28b94d7..c680e6e 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/model/StartDate.java +++ b/src/main/java/ru/yandex/practicum/filmorate/annotation/StartDate.java @@ -1,4 +1,4 @@ -package ru.yandex.practicum.filmorate.model; +package ru.yandex.practicum.filmorate.annotation; import jakarta.validation.Constraint; import jakarta.validation.Payload; diff --git a/src/main/java/ru/yandex/practicum/filmorate/model/StartDateValidator.java b/src/main/java/ru/yandex/practicum/filmorate/annotation/StartDateValidator.java similarity index 90% rename from src/main/java/ru/yandex/practicum/filmorate/model/StartDateValidator.java rename to src/main/java/ru/yandex/practicum/filmorate/annotation/StartDateValidator.java index 2ed4a1c..61193d6 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/model/StartDateValidator.java +++ b/src/main/java/ru/yandex/practicum/filmorate/annotation/StartDateValidator.java @@ -1,4 +1,4 @@ -package ru.yandex.practicum.filmorate.model; +package ru.yandex.practicum.filmorate.annotation; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; diff --git a/src/main/java/ru/yandex/practicum/filmorate/dal/JdbcFilmRepository.java b/src/main/java/ru/yandex/practicum/filmorate/dal/JdbcFilmRepository.java index 60cd7fd..9dbfff9 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/dal/JdbcFilmRepository.java +++ b/src/main/java/ru/yandex/practicum/filmorate/dal/JdbcFilmRepository.java @@ -8,7 +8,6 @@ import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; import ru.yandex.practicum.filmorate.Enum.EventType; import ru.yandex.practicum.filmorate.Enum.OperationType; import ru.yandex.practicum.filmorate.dal.mappers.DirectorRowMapper; @@ -283,7 +282,6 @@ public void connectDirectors(Collection films) { } } - @Transactional @Override public void addLike(long filmId, long userId) { @@ -302,7 +300,6 @@ public void addLike(long filmId, long userId) { } } - @Transactional @Override public void deleteLike(long filmId, long userId) { GeneratedKeyHolder keyHolder = new GeneratedKeyHolder(); diff --git a/src/main/java/ru/yandex/practicum/filmorate/dal/JdbcReviewRepository.java b/src/main/java/ru/yandex/practicum/filmorate/dal/JdbcReviewRepository.java index 6964c1f..9a08399 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/dal/JdbcReviewRepository.java +++ b/src/main/java/ru/yandex/practicum/filmorate/dal/JdbcReviewRepository.java @@ -5,7 +5,6 @@ import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; import ru.yandex.practicum.filmorate.Enum.EventType; import ru.yandex.practicum.filmorate.Enum.OperationType; import ru.yandex.practicum.filmorate.dal.mappers.ReviewRowMapper; @@ -134,7 +133,6 @@ public List getAllReviewsByFilmId(long filmId, long count) { .collect(Collectors.toList()); } - @Transactional @Override public Review create(Review review) { GeneratedKeyHolder keyHolder = new GeneratedKeyHolder(); @@ -158,7 +156,6 @@ public Review create(Review review) { return review; } - @Transactional @Override public Review update(Review review) { GeneratedKeyHolder keyHolder = new GeneratedKeyHolder(); @@ -180,7 +177,6 @@ public Review update(Review review) { return reviewUpdated; } - @Transactional @Override public void deleteReview(long reviewId) { MapSqlParameterSource params = new MapSqlParameterSource(); diff --git a/src/main/java/ru/yandex/practicum/filmorate/exception/ErrorHandler.java b/src/main/java/ru/yandex/practicum/filmorate/exception/ErrorHandler.java index da47eeb..8d3a617 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/exception/ErrorHandler.java +++ b/src/main/java/ru/yandex/practicum/filmorate/exception/ErrorHandler.java @@ -1,10 +1,13 @@ package ru.yandex.practicum.filmorate.exception; +import jakarta.validation.ConstraintViolationException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; @RestControllerAdvice @Slf4j @@ -38,4 +41,28 @@ public ErrorResponse handleServerError(final InternalServerException e) { e.getMessage() ); } + + @ResponseBody + @ExceptionHandler(ConstraintViolationException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse onConstraintValidationException(ConstraintViolationException e) { + log.error("Параметры не прошли валидацию Spring {}", e.getMessage()); + return new ErrorResponse( + "Объект не прошёл валидацию Spring ", + e.getMessage() + ); + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ResponseBody + public ErrorResponse onMethodArgumentNotValidException(MethodArgumentNotValidException e) { + log.error("Объект не прошёл валидацию Spring {}", e.getMessage()); + return new ErrorResponse( + "Объект не прошёл валидацию Spring ", + e.getMessage() + ); + } + + } diff --git a/src/main/java/ru/yandex/practicum/filmorate/model/Film.java b/src/main/java/ru/yandex/practicum/filmorate/model/Film.java index fd8c6fc..cbcffd8 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/model/Film.java +++ b/src/main/java/ru/yandex/practicum/filmorate/model/Film.java @@ -2,6 +2,7 @@ import jakarta.validation.constraints.*; import lombok.*; +import ru.yandex.practicum.filmorate.annotation.StartDate; import java.time.LocalDate; import java.util.LinkedHashSet; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a71f7b3..9e11135 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ logging.level.org.zalando.logbook=TRACE spring.sql.init.mode=always -spring.datasource.url=jdbc:h2:mem:./db/filmorate +spring.datasource.url=jdbc:h2:file:./db/filmorate-test spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password