|
4 | 4 | import org.springframework.dao.DataAccessException; |
5 | 5 | import org.springframework.jdbc.core.JdbcTemplate; |
6 | 6 | import org.springframework.jdbc.core.RowMapper; |
| 7 | +import org.springframework.jdbc.support.rowset.SqlRowSet; |
7 | 8 | import org.springframework.stereotype.Repository; |
8 | 9 | import ru.yandex.practicum.filmorate.exception.ErrorIsNull; |
9 | 10 | import ru.yandex.practicum.filmorate.exception.NotFoundException; |
|
12 | 13 | import ru.yandex.practicum.filmorate.storage.FilmStorage; |
13 | 14 |
|
14 | 15 | import java.util.*; |
| 16 | +import java.util.stream.Collectors; |
15 | 17 |
|
16 | 18 | import org.slf4j.Logger; |
17 | 19 | import org.slf4j.LoggerFactory; |
@@ -97,11 +99,33 @@ public Film getId(long id) { //получам фильм по id |
97 | 99 | @Override |
98 | 100 | public Collection<Film> getAll() { //получам весь список фильмов |
99 | 101 | 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"; |
101 | 103 | logger.info("возращаем список фильмов"); |
102 | 104 | return findMany(query); |
103 | 105 | } |
104 | 106 |
|
| 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 | + |
105 | 129 | @Override |
106 | 130 | public Collection<Long> getLikeId(long filmId) { // получение списка лайков |
107 | 131 | String query = "SELECT user_id FROM film_likes WHERE film_id=" + filmId; |
|
0 commit comments