Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import ru.yandex.practicum.filmorate.validation.AfterDate;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

@Data
Expand All @@ -30,12 +31,8 @@ public class UpdateFilmRequest {
Integer duration;
MPARatingDto mpa;
List<GenreDto> genres;
List<DirectorDto> directors;

@JsonSetter(nulls = Nulls.AS_EMPTY)
public void setDirectors(List<DirectorDto> directors) {
this.directors = directors;
}
List<DirectorDto> directors = new ArrayList<>();

public boolean hasName() {
return name != null && !name.isEmpty();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,15 @@ public class JdbcFilmRepository implements FilmRepository {
f.release_date,
f.duration_in_minutes,
f.mpa_id,
mr.name AS mpa_name,
GROUP_CONCAT(DISTINCT CONCAT(g.genre_id, ':', g.name) ORDER BY g.genre_id SEPARATOR ';') AS genres,
GROUP_CONCAT(DISTINCT CONCAT(d.director_id, ':', d.name)
ORDER BY d.director_id SEPARATOR ';') AS directors
mr.name AS mpa_name,
(SELECT GROUP_CONCAT(DISTINCT CONCAT(g2.genre_id, ':', g2.name) ORDER BY g2.genre_id SEPARATOR ';')
FROM film_genres fg2
JOIN genres g2 ON g2.genre_id = fg2.genre_id
WHERE fg2.film_id = f.film_id) AS genres,
(SELECT GROUP_CONCAT(DISTINCT CONCAT(d2.director_id, ':', d2.name) ORDER BY d2.director_id SEPARATOR ';')
FROM film_directors fd2
JOIN directors d2 ON d2.director_id = fd2.director_id
WHERE fd2.film_id = f.film_id) AS directors
FROM films f
JOIN mpa_ratings mr ON f.mpa_id = mr.mpa_id
LEFT JOIN film_genres fg ON f.film_id = fg.film_id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ public class JdbcLikesRepository implements LikesRepository {
public void addLike(long userId, long filmId) {
MapSqlParameterSource params = getParameterMap(userId, filmId);
String addLikeToFilmSql = """
INSERT INTO likes (user_id, film_id)
VALUES (:user_id, :film_id)""";
MERGE INTO likes (user_id, film_id)
KEY(user_id, film_id)
VALUES (:user_id, :film_id)
""";

jdbc.update(addLikeToFilmSql, params);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public Optional<Review> findById(long id) {
MapSqlParameterSource params = new MapSqlParameterSource("review_id", id);
List<Review> list = jdbc.query(BASE_SELECT_REVIEW_SQL.concat("""
WHERE r.review_id = :review_id
ORDER BY useful_rating DESC
"""), params, mapper);
return list.isEmpty() ? Optional.empty() : Optional.of(list.getFirst());
}
Expand All @@ -88,6 +89,7 @@ public Collection<Review> findAllByFilm(Long filmId, long count) {
.addValue("count", count);
return jdbc.query(BASE_SELECT_REVIEW_SQL.concat("""
WHERE fr.film_id = COALESCE(:film_id, fr.film_id)
ORDER BY useful_rating DESC
LIMIT :count
"""), params, mapper);
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ spring.sql.init.mode=ALWAYS
spring.datasource.url=jdbc:h2:file:./db/filmorate
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.datasource.password=password
Loading