Skip to content

Добавлены 8 фич.#11

Open
Deathriot wants to merge 96 commits into
mainfrom
develop
Open

Добавлены 8 фич.#11
Deathriot wants to merge 96 commits into
mainfrom
develop

Conversation

@Deathriot

Copy link
Copy Markdown
Owner

Все тесты пройдены, заливаем все в мейн!

MayFoxes and others added 30 commits April 4, 2024 02:47
Feat: Удаление фильмов и пользователей
1. controller - DirectorController
2. model - Director
3. service - DirectorService и DirectorServiceImpl
4. storage - DirectorStorage и DirectorDbStorage
5. validator - DateValidator и IsAfterDate

Добавлен основной функционал:
1. Создание режиссёра
2. Получение режиссёра по id
3. Вывод списка всех режиссёров
4. Изменение режиссёра
5. Удаление режиссёра

Дополнителный функционал:
1. Добавлена аннотация @IsAfterDate, которая решает часть проблем с тестами, связанными с датой.
2. Добавлены таблицы DIRECTOR и FILM_DIRECTOR в schema.sql, а также немного изменен порядок создания таблиц.
1. controller - DirectorController
2. model - Director
3. service - DirectorService и DirectorServiceImpl
4. storage - DirectorStorage и DirectorDbStorage
5. validator - DateValidator и IsAfterDate

Добавлен основной функционал:
1. Создание режиссёра
2. Получение режиссёра по id
3. Вывод списка всех режиссёров
4. Изменение режиссёра
5. Удаление режиссёра

Дополнителный функционал:
1. Добавлена аннотация @IsAfterDate, которая решает часть проблем с тестами, связанными с датой.
2. Добавлены таблицы DIRECTOR и FILM_DIRECTOR в schema.sql, а также немного изменен порядок создания таблиц.
1. Создание режиссёра
2. Получение режиссёра по id
3. Вывод списка всех режиссёров
4. Изменение режиссёра
5. Удаление режиссёра
6. Возвращает список фильмов режиссера отсортированных по количеству лайков или году выпуска.

Дополнителный функционал:
1. Добавлена аннотация @IsAfterDate, которая решает часть проблем с тестами, связанными с датой.
2. Добавлены таблицы DIRECTOR и FILM_DIRECTOR в schema.sql, а также немного изменен порядок создания таблиц.
1. Создание режиссёра
2. Получение режиссёра по id
3. Вывод списка всех режиссёров
4. Изменение режиссёра
5. Удаление режиссёра
6. Возвращает список фильмов режиссера отсортированных по количеству лайков или году выпуска.

Дополнителный функционал:
1. Добавлена аннотация @IsAfterDate, которая решает часть проблем с тестами, связанными с датой.
2. Добавлены таблицы DIRECTOR и FILM_DIRECTOR в schema.sql, а также немного изменен порядок создания таблиц.
# Conflicts:
#	src/main/java/ru/yandex/practicum/filmorate/controller/ReviewController.java
#	src/main/java/ru/yandex/practicum/filmorate/model/Review.java
#	src/main/java/ru/yandex/practicum/filmorate/service/review/ReviewService.java
#	src/main/java/ru/yandex/practicum/filmorate/storage/review/ReviewStorage.java
#	src/main/java/ru/yandex/practicum/filmorate/storage/review/dao/ReviewDbStorage.java
#	src/test/java/ru/yandex/practicum/filmorate/controller/ReviewDbStorageTest.java
1. Создание режиссёра
2. Получение режиссёра по id
3. Вывод списка всех режиссёров
4. Изменение режиссёра
5. Удаление режиссёра
6. Возвращает список фильмов режиссера отсортированных по количеству лайков или году выпуска.

Дополнителный функционал:
1. Добавлена аннотация @IsAfterDate, которая решает часть проблем с тестами, связанными с датой.
2. Добавлены таблицы DIRECTOR и FILM_DIRECTOR в schema.sql, а также немного изменен порядок создания таблиц.
1. Создание режиссёра
2. Получение режиссёра по id
3. Вывод списка всех режиссёров
4. Изменение режиссёра
5. Удаление режиссёра
6. Возвращает список фильмов режиссера отсортированных по количеству лайков или году выпуска.

Дополнителный функционал:
1. Добавлена аннотация @IsAfterDate, которая решает часть проблем с тестами, связанными с датой.
2. Добавлены таблицы DIRECTOR и FILM_DIRECTOR в schema.sql, а также немного изменен порядок создания таблиц.
Добавление режиссёров в фильмы. add-director
…ода getUserRecommendations. Добавить сам метод getUserRecommendations для получения рекомендаций фильмов для пользователя
…ия рекомендаций фильмов для пользователя
…и создания объектов путем создания копии через билдер.
Deathriot and others added 23 commits April 9, 2024 21:07
# Conflicts:
#	src/main/java/ru/yandex/practicum/filmorate/model/Review.java
#	src/main/resources/schema.sql
fix: восстановить потерянный при мердже эндпоинт getUserRecommendations
Нарисовал обновленную диаграмму БД
Расширен список таблиц, а также примеры запросов к ним
Чето все строчки поплыли, пытаюсь сделать красиво
"Примеры запросов" Теперь пишутся большими жирными буквами :)

@LexLippi LexLippi left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Привет!

Хорошая работа!

Есть некоторое количество замечаний, которые необходимо исправить!

Желаю удачи!


@Data
@Builder
public class Director {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Классам с данными лучше всегда добавлять модификатор final, чтобы ограничивать возможность наследования

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done


@Data
@Builder
public class Review {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Аналогично про модификатор final

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделано


@Data
@Builder
public class Event {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Аналогично про модификатор final

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

public Collection<Film> getPopular(Integer count, Integer genreId, String year) {
if (year == null) {
return filmStorage.getPopularByGenre(count, genreId);
} else if (genreId == null) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

else не нужен, так как везде в ветках ранее происходит return. То есть вот эта запись эквивалентна тому, что написано:

if (year == null) {
    return filmStorage.getPopularByGenre(count, genreId);
}
if (genreId == null) {
    return filmStorage.getPopularByYear(count, year);
}
return filmStorage.getPopularByGenreAndYear(count, genreId, year);

Однако цикломатическая сложность у такого подхода ниже, что повышает читаемость кода

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment on lines +104 to +110
if (sortBy.equals("year")) {
return filmStorage.getByDirectorSortByYear(id);
} else if (sortBy.equals("likes")) {
return filmStorage.getByDirectorSortByLikes(id);
} else {
throw new IllegalArgumentException("Wrong sort format");
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Аналогично можно переписать без else

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

.usingGeneratedKeyColumns("REVIEW_ID");

Integer reviewId = simpleJdbcInsert.executeAndReturnKey(toMap(review)).intValue();
return getReviewById(reviewId);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Точно ли нам при выходе надо делать запрос на получение объекта?
Его можно сконструировать из только что вставленного + того идентификатора, который нам вернул jdbcTemplate, таким образом мы сэкономим на одном запросе к СУБД, иногда это может быть очень важно с точки зрения производительности

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделано

review.getIsPositive(),
review.getReviewId());

return getReviewById(review.getReviewId());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Аналогично тому, что написал выше

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

К сожалению, здесь так не получится. Так или иначе придется выгружать из БД ревью с этим айди, тк не всем полям разрешено обновляться через апдейт (userId, filmId, useful). Так же, нельзя запрещать менять эти поля, так как тесты постмана ждут ответ 200.


@Override
public Collection<Review> getAllReviews(Integer count) {
String sql = "SELECT * FROM REVIEWS ORDER BY USEFUL DESC LIMIT ?;";

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше fetch first ? rows only, так как оператор limit не определен в sql-стандарте и при переходе на другую СУБД запрос может поломаться

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

сделано

@Override
public Collection<Review> getAllReviewsOfFilm(Integer filmId, Integer count) {
filmStorage.checkFilmExist(filmId);
String sql = "SELECT * FROM REVIEWS WHERE FILM_ID=? ORDER BY USEFUL DESC LIMIT ?;";

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Про limit уже писал

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

сделано

String sql = "SELECT IS_POSITIVE FROM USER_REVIEW_RATE WHERE REVIEW_ID=? AND USER_ID=?";
SqlRowSet userRate = jdbcTemplate.queryForRowSet(sql, reviewId, userId);

if (!userRate.next())

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Советую всегда использовать фигурные скобки в соответствии с
Google Java Code Style

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

сделано

@LexLippi

Copy link
Copy Markdown

Привет!

Хорошая работа!

Поздравляю всех с окончанием группового проекта и желаю удачи!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants