Skip to content

Commit 0df5e9c

Browse files
committed
ТЗ 12 доработал рекомендации
1 parent 26d9871 commit 0df5e9c

4 files changed

Lines changed: 32 additions & 8 deletions

File tree

src/main/java/ru/yandex/practicum/filmorate/model/Film.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class Film extends DataModel implements Comparable<Film> {
3030
@Min(1)
3131
private int duration;
3232

33-
private Set<Long> likesId;
33+
private Set<Long> likesId = new HashSet<>();
3434

3535
private Set<Genre> genres = new HashSet<>();
3636

src/main/java/ru/yandex/practicum/filmorate/service/FilmService.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,11 @@ public Collection<Film> getAll() {
6161
if (returnAllFilm.isEmpty()) {
6262
throw new ErrorIsNull("список пуст");
6363
}
64-
return returnAllFilm.stream()
65-
.peek(film -> {
66-
film.setGenres(filmStorage.getGenre(film.getId()));
67-
film.setLikesId(new HashSet<>(filmStorage.getLikeId(film.getId())));
68-
})
69-
.collect(Collectors.toList());
64+
filmStorage.getAllFullGenreLike(returnAllFilm);
65+
return returnAllFilm;
7066
}
7167

68+
7269
public void delete(long id) {
7370

7471
Film delFilm = filmStorage.delete(id);

src/main/java/ru/yandex/practicum/filmorate/storage/FilmStorage.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ru.yandex.practicum.filmorate.storage;
22

33
import ru.yandex.practicum.filmorate.model.DataModel;
4+
import ru.yandex.practicum.filmorate.model.Film;
45
import ru.yandex.practicum.filmorate.model.Genre;
56

67
import java.util.Collection;
@@ -32,4 +33,6 @@ public interface FilmStorage<T extends DataModel> {
3233

3334
Set<Genre> getGenre(long filmId);
3435

36+
void getAllFullGenreLike (Collection<Film> films);
37+
3538
}

src/main/java/ru/yandex/practicum/filmorate/storage/dao/FilmDbStore.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.springframework.dao.DataAccessException;
55
import org.springframework.jdbc.core.JdbcTemplate;
66
import org.springframework.jdbc.core.RowMapper;
7+
import org.springframework.jdbc.support.rowset.SqlRowSet;
78
import org.springframework.stereotype.Repository;
89
import ru.yandex.practicum.filmorate.exception.ErrorIsNull;
910
import ru.yandex.practicum.filmorate.exception.NotFoundException;
@@ -12,6 +13,7 @@
1213
import ru.yandex.practicum.filmorate.storage.FilmStorage;
1314

1415
import java.util.*;
16+
import java.util.stream.Collectors;
1517

1618
import org.slf4j.Logger;
1719
import org.slf4j.LoggerFactory;
@@ -97,11 +99,33 @@ public Film getId(long id) { //получам фильм по id
9799
@Override
98100
public Collection<Film> getAll() { //получам весь список фильмов
99101
String query = "SELECT f.id, f.name, f.description, f.release_date, f.duration, f.mpa_rating_id, mpa_r.name AS mpa_name " +
100-
"FROM films AS f LEFT OUTER JOIN MPA_RATING AS mpa_r ON f.MPA_RATING_ID = mpa_r.id ORDER BY f.id ASC";
102+
"FROM films AS f LEFT OUTER JOIN MPA_RATING AS mpa_r ON f.MPA_RATING_ID = mpa_r.id";
101103
logger.info("возращаем список фильмов");
102104
return findMany(query);
103105
}
104106

107+
public void getAllFullGenreLike(Collection<Film> films) {
108+
List<String> filmsId = films.stream().map(film -> String.valueOf(film.getId())).collect(Collectors.toList()); //создам список id фильмов из переданной коллекции
109+
Map<Long, Film> filmMap = films.stream().collect(Collectors.toMap(Film::getId, film -> film)); //создаем мапу id фильмом и самим фильмом)
110+
111+
String queryGenre = "SELECT g.film_id, gs.id AS id, gs.name" +
112+
" FROM GENRE AS g LEFT OUTER JOIN GENRES AS gs ON g.GENRE_ID = gs.ID WHERE film_id IN (%s)";
113+
String queryLikes = "SELECT film_id, user_id FROM film_likes WHERE film_id IN (%s)";
114+
115+
SqlRowSet rsGenre = jdbc.queryForRowSet(String.format(queryGenre, String.join(",", filmsId)));
116+
while (rsGenre.next()) {
117+
Genre genre = new Genre();
118+
genre.setId(rsGenre.getLong("id"));
119+
genre.setName(rsGenre.getString("name"));
120+
filmMap.get(rsGenre.getLong("film_id")).getGenres().add(genre);
121+
}
122+
123+
SqlRowSet rsLike = jdbc.queryForRowSet(String.format(queryLikes, String.join(",", filmsId)));
124+
while (rsLike.next()) {
125+
filmMap.get(rsLike.getLong("film_id")).getLikesId().add(rsLike.getLong("user_id"));
126+
}
127+
}
128+
105129
@Override
106130
public Collection<Long> getLikeId(long filmId) { // получение списка лайков
107131
String query = "SELECT user_id FROM film_likes WHERE film_id=" + filmId;

0 commit comments

Comments
 (0)