Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 26 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,19 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
Expand All @@ -37,7 +49,19 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import ru.yandex.practicum.filmorate.exception.FilmNotFoundException;
import ru.yandex.practicum.filmorate.exception.UserNotFoundException;
import ru.yandex.practicum.filmorate.exception.ValidationException;
import ru.yandex.practicum.filmorate.exception.*;
import ru.yandex.practicum.filmorate.model.ErrorResponse;

@RestControllerAdvice
Expand All @@ -21,7 +19,7 @@ public ErrorResponse handleValidationException(final ValidationException e) {
return new ErrorResponse(e.getMessage());
}

@ExceptionHandler({FilmNotFoundException.class, UserNotFoundException.class})
@ExceptionHandler({FilmNotFoundException.class, UserNotFoundException.class, MpaNotFoundException.class, GenreNotFoundException.class,LikeNotFoundException.class})
@ResponseStatus(HttpStatus.NOT_FOUND)
public ErrorResponse handleNotFoundException(final RuntimeException e) {
log.error(e.getMessage(), e);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,80 +1,111 @@
package ru.yandex.practicum.filmorate.controller;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.exception.FilmNotFoundException;
import ru.yandex.practicum.filmorate.model.Film;
import ru.yandex.practicum.filmorate.model.Genre;
import ru.yandex.practicum.filmorate.model.Mpa;
import ru.yandex.practicum.filmorate.service.FilmService;
import ru.yandex.practicum.filmorate.storage.film.FilmStorage;
import ru.yandex.practicum.filmorate.validators.FilmValidator;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@Slf4j
@RequiredArgsConstructor
public class FilmController {

private final FilmStorage inMemoryFilmStorage;
@Autowired
@Qualifier("filmDbStorage")
private final FilmStorage filmStorage;
private final FilmService service;

public FilmController(@Qualifier("filmDbStorage") FilmStorage filmStorage, FilmService service) {
this.filmStorage = filmStorage;
this.service = service;
}

@PostMapping("/films")
public Film addFilm(@RequestBody Film film) {
log.info("Получен запрос POST /film");
if (FilmValidator.validate(film)) {
inMemoryFilmStorage.addFilm(film);
log.info("Запрос успешно обработан");
return film;
}
return film;
FilmValidator.validate(film);
filmStorage.addFilm(film);
log.info("Запрос успешно обработан");
int rate = film.getRate();
Film newFilm = getFilmById(film.getId());
newFilm.setRate(rate);
return newFilm;
}

@PutMapping("/films")
public Film updateFilm(@RequestBody Film film) {
log.info("Получен запрос PUT /films");
if (!inMemoryFilmStorage.isFilmExists(film)) {
log.warn("Такого фильма не существует.");
throw new FilmNotFoundException("Такого фильма не существует.");
List<Film> films = getFilms();
Map<Integer, Film> filmsAndId = new HashMap<>();
for (Film checkFilm: films) {
filmsAndId.put(checkFilm.getId(), checkFilm);
}
if (FilmValidator.validate(film)) {
inMemoryFilmStorage.updateFilm(film);
if (filmsAndId.containsKey(film.getId())) {
FilmValidator.validate(film);
filmStorage.updateFilm(film);
log.info("Запрос успешно обработан");
return film;
return getFilmById(film.getId());
} else {
throw new FilmNotFoundException("Такого фильма не существует.");
}
return film;
}

@GetMapping("/films")
public List<Film> getFilms() {
log.info("Получен запрос GET /films");
return new ArrayList<>(inMemoryFilmStorage.getFilms().values());
return new ArrayList<>(filmStorage.getFilms());
}

@GetMapping("/films/{id}")
public Film getUserById(@PathVariable long id) {
if (!inMemoryFilmStorage.getFilms().containsKey(id)) {
log.warn("Такого фильма не существует.");
throw new FilmNotFoundException("Такого фильма не существует.");
}
public Film getFilmById(@PathVariable int id) {
log.info("Получен запрос GET /films/id");
return inMemoryFilmStorage.getFilms().get(id);
return filmStorage.getFilmById(id);
}

@PutMapping("/films/{id}/like/{userId}")
public void likeFilm(@PathVariable long id, @PathVariable long userId) {
public void likeFilm(@PathVariable int id, @PathVariable int userId) {
log.info("Получен запрос PUT /films/{id}/like/{userId}");
service.addLike(id, userId);
}

@DeleteMapping("/films/{id}/like/{userId}")
public void deleteLike(@PathVariable long id, @PathVariable long userId) {
public void deleteLike(@PathVariable int id, @PathVariable int userId) {
service.deleteLike(id, userId);
}

@GetMapping("/films/popular")
public List<Film> getUserFriends(@RequestParam (value = "count", defaultValue = "10", required = false) Integer count) {
public List<Film> getTop(@RequestParam (value = "count", defaultValue = "10", required = false) Integer count) {
return service.getTop(count);
}

@GetMapping("/mpa")
public List<Mpa> getAllMpa() {
return filmStorage.getAllMpa();
}

@GetMapping("/mpa/{id}")
public Mpa getMpaById(@PathVariable int id) {
return filmStorage.getMpaById(id);
}

@GetMapping("/genres")
public List<Genre> getAllGenres() {
return filmStorage.getAllGenres();
}

@GetMapping("/genres/{id}")
public Genre getGenreById(@PathVariable int id) {
return filmStorage.getGenreById(id);
}
}
Original file line number Diff line number Diff line change
@@ -1,30 +1,39 @@
package ru.yandex.practicum.filmorate.controller;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.exception.UserNotFoundException;
import ru.yandex.practicum.filmorate.model.User;
import ru.yandex.practicum.filmorate.service.UserService;
import ru.yandex.practicum.filmorate.storage.user.InMemoryUserStorage;
import ru.yandex.practicum.filmorate.storage.user.UserStorage;
import ru.yandex.practicum.filmorate.validators.UserValidator;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@Slf4j
@RequiredArgsConstructor
public class UserController {

private final InMemoryUserStorage inMemoryUserStorage;
@Autowired
@Qualifier("userDbStorage")
private final UserStorage userStorage;
private final UserService service;

public UserController(@Qualifier("userDbStorage") UserStorage userStorage, UserService service) {
this.userStorage = userStorage;
this.service = service;
}

@PostMapping("/users")
public User addUser(@RequestBody User user) {
log.info("Получен запрос POST /users");
if (UserValidator.validate(user)) {
inMemoryUserStorage.addUser(user);
userStorage.addUser(user);
log.info("Запрос успешно обработан");
return user;
}
Expand All @@ -34,52 +43,66 @@ public User addUser(@RequestBody User user) {
@PutMapping("/users")
public User updateUser(@RequestBody User user) {
log.info("Получен запрос PUT /users");
if (!inMemoryUserStorage.isUserExists(user)) {
log.warn("Такого пользователя не существует.");
throw new UserNotFoundException("Такого пользователя не существует.");
List<User> users = getUsers();
Map<Integer, User> usersAndId = new HashMap<>();
for (User checkUser: users) {
usersAndId.put(checkUser.getId(), checkUser);
}
if (UserValidator.validate(user)) {
inMemoryUserStorage.updateUser(user);
log.info("Запрос успешно обработан");
if (usersAndId.containsKey(user.getId())) {
if (UserValidator.validate(user)) {
userStorage.updateUser(user);
log.info("Запрос успешно обработан");
return user;
}
return user;
} else {
throw new UserNotFoundException("Такого пользователя не существует.");
}
return user;
}

@GetMapping("/users")
public List<User> getUsers() {
log.info("Получен запрос GET /users");
return new ArrayList<>(inMemoryUserStorage.getUsers().values());
return new ArrayList<>(userStorage.getUsers());
}

@GetMapping("/users/{id}")
public User getUserById(@PathVariable long id) {
if (!inMemoryUserStorage.getUsers().containsKey(id)) {
public User getUserById(@PathVariable int id) {
log.info("Получен запрос GET /users/{id}");
User user = userStorage.getUserById(id);
if (user != null) {
return user;
} else {
log.warn("Такого пользователя не существует.");
throw new UserNotFoundException("Такого пользователя не существует.");
}
log.info("Получен запрос GET /users");
return inMemoryUserStorage.getUsers().get(id);
}

@PutMapping("/users/{id}/friends/{friendId}")
public void addFriend(@PathVariable long id, @PathVariable long friendId) {
public void addFriend(@PathVariable int id, @PathVariable int friendId) {
User user1 = getUserById(id);
User user2 = getUserById(friendId);
service.addFriend(id, friendId);
}

@DeleteMapping("/users/{id}/friends/{friendId}")
public void deleteFriend(@PathVariable long id, @PathVariable long friendId) {
public void deleteFriend(@PathVariable int id, @PathVariable int friendId) {
User user1 = getUserById(id);
User user2 = getUserById(friendId);
service.deleteFriend(id, friendId);
}

@GetMapping("/users/{id}/friends")
public List<User> getUserFriends(@PathVariable long id) {
public List<User> getUserFriends(@PathVariable int id) {
User user1 = getUserById(id);
return service.getUserFriends(id);
}

@GetMapping("/users/{id}/friends/common/{otherId}")
public List<User> getUserCommonFriends(@PathVariable long id, @PathVariable long otherId) {
public List<User> getUserCommonFriends(@PathVariable int id, @PathVariable int otherId) {
log.info("Получен запрос GET /users/{id}/friends/common/{otherId}");
User user1 = getUserById(id);
User user2 = getUserById(otherId);
return service.commonFriends(id, otherId);
}
}
Loading