Skip to content

Commit a5ce0bb

Browse files
committed
add-friends-likes. Ревью. Добавить логирование, перенести лишнюю логику из хранилищ в сервисы.
1 parent e0a8915 commit a5ce0bb

File tree

9 files changed

+68
-86
lines changed

9 files changed

+68
-86
lines changed

src/main/java/ru/yandex/practicum/filmorate/controller/FilmController.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
import jakarta.validation.Valid;
44
import lombok.RequiredArgsConstructor;
5-
import lombok.extern.slf4j.Slf4j;
65
import org.springframework.web.bind.annotation.*;
76
import ru.yandex.practicum.filmorate.model.Film;
87
import ru.yandex.practicum.filmorate.service.FilmService;
98

109
import java.util.List;
1110

12-
@Slf4j
1311
@RestController
1412
@RequestMapping(value = "/films")
1513
@RequiredArgsConstructor

src/main/java/ru/yandex/practicum/filmorate/controller/UserController.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
import jakarta.validation.Valid;
44
import lombok.RequiredArgsConstructor;
5-
import lombok.extern.slf4j.Slf4j;
65
import org.springframework.web.bind.annotation.*;
76
import ru.yandex.practicum.filmorate.model.User;
87
import ru.yandex.practicum.filmorate.service.UserService;
98

109
import java.util.List;
1110

12-
@Slf4j
1311
@RestController
1412
@RequestMapping(value = "/users")
1513
@RequiredArgsConstructor

src/main/java/ru/yandex/practicum/filmorate/exception/ExceptionHandlerClass.java renamed to src/main/java/ru/yandex/practicum/filmorate/exception/ExceptionHandler.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package ru.yandex.practicum.filmorate.exception;
22

33
import org.springframework.http.HttpStatus;
4-
import org.springframework.web.bind.annotation.ExceptionHandler;
54
import org.springframework.web.bind.annotation.ResponseStatus;
65
import org.springframework.web.bind.annotation.RestControllerAdvice;
76

87
@RestControllerAdvice
9-
public class ExceptionHandlerClass {
8+
public class ExceptionHandler {
109

1110

12-
@ExceptionHandler
11+
@org.springframework.web.bind.annotation.ExceptionHandler
1312
@ResponseStatus(HttpStatus.BAD_REQUEST)
1413
public ErrorResponse validateHandler(ValidationException e) {
1514
return new ErrorResponse(
@@ -18,7 +17,7 @@ public ErrorResponse validateHandler(ValidationException e) {
1817
);
1918
}
2019

21-
@ExceptionHandler
20+
@org.springframework.web.bind.annotation.ExceptionHandler
2221
@ResponseStatus(HttpStatus.NOT_FOUND)
2322
public ErrorResponse notFoundHandler(NotFoundException e) {
2423
return new ErrorResponse(
@@ -27,7 +26,7 @@ public ErrorResponse notFoundHandler(NotFoundException e) {
2726
);
2827
}
2928

30-
@ExceptionHandler
29+
@org.springframework.web.bind.annotation.ExceptionHandler
3130
@ResponseStatus(HttpStatus.BAD_REQUEST)
3231
public ErrorResponse alreadyExistHandler(AlreadyExistsException e) {
3332
return new ErrorResponse(
@@ -36,7 +35,7 @@ public ErrorResponse alreadyExistHandler(AlreadyExistsException e) {
3635
);
3736
}
3837

39-
@ExceptionHandler
38+
@org.springframework.web.bind.annotation.ExceptionHandler
4039
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
4140
public ErrorResponse exceptionHandler(RuntimeException e) {
4241
return new ErrorResponse(

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

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,8 @@ public List<Film> getFilms() {
2626
}
2727

2828
public Film getFilmById(Long filmId) {
29-
Film film = filmStorage.getFilmById(filmId);
30-
if (film != null) {
31-
return film;
32-
}
33-
throw new NotFoundException("Фильм не найден с id = " + filmId);
29+
log.info("Получение фильма с id = " + filmId);
30+
return getFilmByIdWithCheck(filmId);
3431
}
3532

3633
public Film create(Film film) {
@@ -49,11 +46,7 @@ public Film update(Film newFilm) {
4946
throw new ValidationException("Не указан Id при обновлении фильма");
5047
}
5148

52-
Film oldFilm = filmStorage.getFilmById(newFilm.getId());
53-
if (oldFilm == null) {
54-
log.debug("Фильм с id = " + newFilm.getId() + " не найден");
55-
throw new NotFoundException("Фильм с id = " + newFilm.getId() + " не найден");
56-
}
49+
Film oldFilm = getFilmByIdWithCheck(newFilm.getId());
5750

5851
checkDate(newFilm);
5952

@@ -67,13 +60,26 @@ public Film update(Film newFilm) {
6760
}
6861

6962
public void addLike(Long filmId, Long userId) {
63+
Film film = getFilmByIdWithCheck(filmId);
7064
userService.getUserById(userId);
71-
filmStorage.addLike(filmId, userId);
65+
filmStorage.addLike(film, userId);
66+
log.info("Лайк добавлен к фильму с id = " + filmId);
7267
}
7368

7469
public void removeLike(Long filmId, Long userId) {
70+
Film film = getFilmByIdWithCheck(filmId);
7571
userService.getUserById(userId);
76-
filmStorage.removeLike(filmId, userId);
72+
filmStorage.removeLike(film, userId);
73+
log.info("Лайк удален с фильма с id = " + filmId);
74+
}
75+
76+
private Film getFilmByIdWithCheck(Long id) {
77+
Film film = filmStorage.getFilmById(id);
78+
if (film == null) {
79+
log.debug("Фильм не найден с id = " + id);
80+
throw new NotFoundException("Фильм не найден с id = " + id);
81+
}
82+
return film;
7783
}
7884

7985
private long getNextId() {
@@ -93,6 +99,10 @@ private void checkDate(Film film) {
9399
}
94100

95101
public List<Film> getPopularFilms(Long count) {
102+
if (count <= 0) {
103+
throw new ValidationException("count должен быть больше 0");
104+
}
105+
log.info("Запрос " + count + " популярных фильмов");
96106
return filmStorage.getPopularFilms(count);
97107
}
98108
}

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

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,8 @@ public List<User> getUsers() {
2525
}
2626

2727
public User getUserById(Long userId) {
28-
User user = userStorage.getUserById(userId);
29-
if (user != null) {
30-
return user;
31-
}
32-
throw new NotFoundException("Пользователь не найден с id = " + userId);
28+
log.info("Получение пользователя с id = " + userId);
29+
return getUserByIdWithCheck(userId);
3330
}
3431

3532
public User createUser(User user) {
@@ -51,12 +48,7 @@ public User updateUser(User newUser) {
5148
throw new ValidationException("Не указан Id при обновлении пользователя");
5249
}
5350

54-
55-
User oldUser = userStorage.getUserById(newUser.getId());
56-
if (oldUser == null) {
57-
log.debug("Пользователь с id = " + newUser.getId() + " не найден");
58-
throw new NotFoundException("Пользователь с id = " + newUser.getId() + " не найден");
59-
}
51+
User oldUser = getUserByIdWithCheck(newUser.getId());
6052

6153
checkEmail(newUser.getEmail());
6254
checkLogin(newUser.getLogin());
@@ -72,21 +64,41 @@ public User updateUser(User newUser) {
7264
}
7365

7466
public List<User> getFriendsByUserId(Long userId) {
75-
return userStorage.getFriends(userId);
67+
User user = getUserByIdWithCheck(userId);
68+
log.info("Получение друзей пользователя с id = " + userId);
69+
return userStorage.getFriends(user);
7670
}
7771

7872
public List<User> getCommonFriends(Long userId, Long otherUserId) {
79-
return userStorage.getCommonFriends(userId, otherUserId);
73+
User user = getUserByIdWithCheck(userId);
74+
User otherUser = getUserByIdWithCheck(otherUserId);
75+
log.info("Получение общих друзей пользователей с id = " + userId + " и " + otherUserId);
76+
return userStorage.getCommonFriends(user, otherUser);
8077
}
8178

8279
public void addFriend(Long userId, Long friendId) {
83-
userStorage.addFriends(userId, friendId);
84-
userStorage.addFriends(friendId, userId);
80+
User user = getUserByIdWithCheck(userId);
81+
User friend = getUserByIdWithCheck(friendId);
82+
userStorage.addFriends(user, friendId);
83+
userStorage.addFriends(friend, userId);
84+
log.info("Пользователи с id = " + userId + " и " + friendId + " теперь друзья");
8585
}
8686

8787
public void removeFriends(Long userId, Long friendId) {
88-
userStorage.removeFriends(userId, friendId);
89-
userStorage.removeFriends(friendId, userId);
88+
User user = getUserByIdWithCheck(userId);
89+
User friend = getUserByIdWithCheck(friendId);
90+
userStorage.removeFriends(user, friendId);
91+
userStorage.removeFriends(friend, userId);
92+
log.info("Пользователи с id = " + userId + " и " + friendId + " перестали быть друзьями");
93+
}
94+
95+
private User getUserByIdWithCheck(Long id) {
96+
User user = userStorage.getUserById(id);
97+
if (user == null) {
98+
log.debug("Пользователь не найден с id = " + id);
99+
throw new NotFoundException("Пользователь не найден с id = " + id);
100+
}
101+
return user;
90102
}
91103

92104
private long getNextId() {

src/main/java/ru/yandex/practicum/filmorate/storage/inmemory/InMemoryFilmStorage.java

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

33
import org.springframework.stereotype.Component;
4-
import ru.yandex.practicum.filmorate.exception.NotFoundException;
54
import ru.yandex.practicum.filmorate.model.Film;
65
import ru.yandex.practicum.filmorate.storage.interfaces.FilmStorage;
76

@@ -31,20 +30,12 @@ public void addOrUpdateFilm(Film film) {
3130
}
3231

3332
@Override
34-
public void addLike(Long filmId, Long userId) {
35-
Film film = getFilmById(filmId);
36-
if (film == null) {
37-
throw new NotFoundException("Фильм с id = " + userId + " не найден");
38-
}
33+
public void addLike(Film film, Long userId) {
3934
film.addLike(userId);
4035
}
4136

4237
@Override
43-
public void removeLike(Long filmId, Long userId) {
44-
Film film = getFilmById(filmId);
45-
if (film == null) {
46-
throw new NotFoundException("Фильм с id = " + userId + " не найден");
47-
}
38+
public void removeLike(Film film, Long userId) {
4839
film.removeLike(userId);
4940
}
5041

src/main/java/ru/yandex/practicum/filmorate/storage/inmemory/InMemoryUserStorage.java

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import lombok.extern.slf4j.Slf4j;
44
import org.springframework.stereotype.Component;
5-
import ru.yandex.practicum.filmorate.exception.NotFoundException;
65
import ru.yandex.practicum.filmorate.model.User;
76
import ru.yandex.practicum.filmorate.storage.interfaces.UserStorage;
87

@@ -33,32 +32,17 @@ public void addOrUpdateUser(User user) {
3332
}
3433

3534
@Override
36-
public void addFriends(Long userId, Long friendId) {
37-
User user = getUserById(userId);
38-
if (user == null) {
39-
log.error("Пользователь с id = " + userId + " не найден");
40-
throw new NotFoundException("Пользователь с id = " + userId + " не найден");
41-
}
35+
public void addFriends(User user, Long friendId) {
4236
user.addFriend(friendId);
4337
}
4438

4539
@Override
46-
public void removeFriends(Long userId, Long friendId) {
47-
User user = getUserById(userId);
48-
if (user == null) {
49-
log.error("Пользователь с id = " + userId + " не найден");
50-
throw new NotFoundException("Пользователь с id = " + userId + " не найден");
51-
}
40+
public void removeFriends(User user, Long friendId) {
5241
user.removeFriend(friendId);
5342
}
5443

5544
@Override
56-
public List<User> getFriends(Long id) {
57-
User user = users.get(id);
58-
if (user == null) {
59-
log.error("Пользователь с id = " + id + " не найден");
60-
throw new NotFoundException("Пользователь с id = " + id + " не найден");
61-
}
45+
public List<User> getFriends(User user) {
6246
List<Long> friendIds = user.getFriends();
6347
List<User> friends = friendIds.stream()
6448
.map(users::get)
@@ -67,17 +51,7 @@ public List<User> getFriends(Long id) {
6751
}
6852

6953
@Override
70-
public List<User> getCommonFriends(Long id, Long otherUserId) {
71-
User user = users.get(id);
72-
if (user == null) {
73-
log.error("Пользователь с id = " + id + " не найден");
74-
throw new NotFoundException("Пользователь с id = " + id + " не найден");
75-
}
76-
User otherUser = users.get(otherUserId);
77-
if (otherUser == null) {
78-
log.error("Пользователь с id = " + id + " не найден");
79-
throw new NotFoundException("Пользователь с id = " + id + " не найден");
80-
}
54+
public List<User> getCommonFriends(User user, User otherUser) {
8155
List<User> commonFriends = user.getFriends().stream()
8256
.filter(otherUser.getFriends()::contains)
8357
.map(users::get)

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ public interface FilmStorage {
1212

1313
void addOrUpdateFilm(Film film);
1414

15-
void addLike(Long filmId, Long userId);
15+
void addLike(Film film, Long userId);
1616

17-
void removeLike(Long filmId, Long userId);
17+
void removeLike(Film film, Long userId);
1818

1919
List<Film> getPopularFilms(Long count);
2020
}

src/main/java/ru/yandex/practicum/filmorate/storage/interfaces/UserStorage.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ public interface UserStorage {
1212

1313
public void addOrUpdateUser(User user);
1414

15-
void addFriends(Long userId, Long friendId);
15+
void addFriends(User user, Long friendId);
1616

17-
void removeFriends(Long userId, Long friendId);
17+
void removeFriends(User user, Long friendId);
1818

19-
List<User> getFriends(Long id);
19+
List<User> getFriends(User user);
2020

21-
List<User> getCommonFriends(Long id, Long otherUserId);
21+
List<User> getCommonFriends(User user, User otherUser);
2222
}

0 commit comments

Comments
 (0)