diff --git a/README.md b/README.md index 3b62c5a..e5e0f74 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # java-filmorate ### Описание (Description) The Filmorate project — это приложение для работы с базой данных фильмов. +А также площадка для общения и взаимодействия пользователей. + ### Основные возможности - Хранение данных о фильмах - Хранение данных о пользователях @@ -8,11 +10,17 @@ The Filmorate project — это приложение для работы с б - Возможность пользователям добавлять друг друга в друзья - Возможность получать рейтинг TOP_N фильмов по количеству лайков - Возможность получать общих с другим пользователем фильмов с сортировкой по их популярности +- Возможность заводить друзей +- Возможность оставлять отзывы о фильмах - Фильмы содержат возрастные ограничения по стандарту MPPA +- Реализован поиск по названию и описанию - Реализована система жанров для фильмов +- Есть лента событий + ### Требования (Environmental Requirements) Для запуска проекта требуется: - Java версии 21 -Приложение работает на порту 8080 +Приложение работает на порту 8080 + ### Установка и запуск (Installation and Running) Откройте терминал в корне проекта и выполните команды для запуска приложения. diff --git a/src/main/java/ru/yandex/practicum/filmorate/dal/database/EventDbStorage.java b/src/main/java/ru/yandex/practicum/filmorate/dal/database/EventDbStorage.java index 757b550..ca56330 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/dal/database/EventDbStorage.java +++ b/src/main/java/ru/yandex/practicum/filmorate/dal/database/EventDbStorage.java @@ -43,7 +43,7 @@ public Event addEvent(Event event) { event.getEventType().name(), event.getOperation().name(), event.getEntityId()); - event.setId(eventId); + event.setEventId(eventId); return event; } } \ No newline at end of file diff --git a/src/main/java/ru/yandex/practicum/filmorate/dal/database/FilmDbStorage.java b/src/main/java/ru/yandex/practicum/filmorate/dal/database/FilmDbStorage.java index 602782b..b7a55e0 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/dal/database/FilmDbStorage.java +++ b/src/main/java/ru/yandex/practicum/filmorate/dal/database/FilmDbStorage.java @@ -108,6 +108,8 @@ public Collection getTopByFilters(Integer top, Integer genreId, String yea return films.stream().peek(film -> { Set genres = getGenreIdsByFilmId(film.getId()); film.setGenreIds(new HashSet<>(genres)); + Set directors = getDirectorIdsByFilmId(film.getId()); + film.setDirectorIds(new HashSet<>(directors)); }).toList(); } diff --git a/src/main/java/ru/yandex/practicum/filmorate/dal/rowmappers/EventRowMapper.java b/src/main/java/ru/yandex/practicum/filmorate/dal/rowmappers/EventRowMapper.java index a339a3b..d22c689 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/dal/rowmappers/EventRowMapper.java +++ b/src/main/java/ru/yandex/practicum/filmorate/dal/rowmappers/EventRowMapper.java @@ -16,7 +16,7 @@ public class EventRowMapper implements RowMapper { @Override public Event mapRow(ResultSet resultSet, int rowNum) throws SQLException { return Event.builder() - .id(resultSet.getLong("id")) + .eventId(resultSet.getLong("id")) .userId(resultSet.getLong("user_id")) .timestamp(resultSet.getTimestamp("created_at").toInstant()) .eventType(EventType.valueOf(resultSet.getString("event_type"))) diff --git a/src/main/java/ru/yandex/practicum/filmorate/dto/EventDto.java b/src/main/java/ru/yandex/practicum/filmorate/dto/EventDto.java index 25e5021..f6af3d1 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/dto/EventDto.java +++ b/src/main/java/ru/yandex/practicum/filmorate/dto/EventDto.java @@ -10,7 +10,7 @@ @Builder public class EventDto { @JsonProperty(access = JsonProperty.Access.READ_ONLY) - private Long id; + private Long eventId; private Long userId; private Long timestamp; private EventType eventType; diff --git a/src/main/java/ru/yandex/practicum/filmorate/dto/request/create/UserCreateRequest.java b/src/main/java/ru/yandex/practicum/filmorate/dto/request/create/UserCreateRequest.java index d8e2a74..1edda74 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/dto/request/create/UserCreateRequest.java +++ b/src/main/java/ru/yandex/practicum/filmorate/dto/request/create/UserCreateRequest.java @@ -8,7 +8,7 @@ @Data public class UserCreateRequest { - @Size(min = 2, max = 50, message = "Длина имени пользователя может быть от 2 до 50 символов.") + @Size(max = 50, message = "Длина имени пользователя не может быть больше 50 символов.") private String name; @NotNull(message = "Логин должен быть указан.") diff --git a/src/main/java/ru/yandex/practicum/filmorate/dto/request/update/UserUpdateRequest.java b/src/main/java/ru/yandex/practicum/filmorate/dto/request/update/UserUpdateRequest.java index 6276e1e..5a211d2 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/dto/request/update/UserUpdateRequest.java +++ b/src/main/java/ru/yandex/practicum/filmorate/dto/request/update/UserUpdateRequest.java @@ -12,7 +12,7 @@ public class UserUpdateRequest { @Positive(message = "Id должен быть положительным числом.") private Long id; - @Size(min = 2, max = 50, message = "Длина имени пользователя может быть от 2 до 50 символов.") + @Size(max = 50, message = "Длина имени пользователя не может быть больше 50 символов.") private String name; @Pattern(regexp = "^[A-Za-z0-9_]+$", message = "Логин может состоять только из этих символов [A-Za-z0-9_].") diff --git a/src/main/java/ru/yandex/practicum/filmorate/mapper/EventMapper.java b/src/main/java/ru/yandex/practicum/filmorate/mapper/EventMapper.java index 9c91c18..b1458ea 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/mapper/EventMapper.java +++ b/src/main/java/ru/yandex/practicum/filmorate/mapper/EventMapper.java @@ -9,7 +9,7 @@ public class EventMapper { public static EventDto mapToEventDto(Event event) { return EventDto.builder() - .id(event.getId()) + .eventId(event.getEventId()) .userId(event.getUserId()) .timestamp(event.getTimestamp().toEpochMilli()) .eventType(event.getEventType()) diff --git a/src/main/java/ru/yandex/practicum/filmorate/model/Event.java b/src/main/java/ru/yandex/practicum/filmorate/model/Event.java index 8064030..0e6b176 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/model/Event.java +++ b/src/main/java/ru/yandex/practicum/filmorate/model/Event.java @@ -12,7 +12,7 @@ @NoArgsConstructor @AllArgsConstructor public class Event { - private Long id; + private Long eventId; private Long userId; private Instant timestamp; private EventType eventType; diff --git a/src/main/java/ru/yandex/practicum/filmorate/servise/UserService.java b/src/main/java/ru/yandex/practicum/filmorate/servise/UserService.java index 76ec5d5..c7d7d20 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/servise/UserService.java +++ b/src/main/java/ru/yandex/practicum/filmorate/servise/UserService.java @@ -90,6 +90,10 @@ public void changeFriends(FriendsAction action, long userId, long friendId) { public UserDto create(UserCreateRequest request) { log.info("Добавление нового пользователя login={}.", request.getLogin()); + if (request.getName().isBlank()) { + request.setName(request.getLogin()); + } + User user = UserMapper.mapToUser(request); try { @@ -103,6 +107,10 @@ public UserDto create(UserCreateRequest request) { public UserDto update(UserUpdateRequest request) { log.info("Обновление данных о пользователе с id={}.", request.getId()); + if (request.getName().isBlank()) { + request.setName(request.getLogin()); + } + User oldUser = findUser(request.getId()); logUserUpdate(request, oldUser); User newUser = UserMapper.updateUserFields(oldUser, request);