Skip to content
Merged
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
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@
<version>3.3.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.zalando</groupId>
<artifactId>logbook-spring-boot-starter</artifactId>
<version>3.7.2</version>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ru.yandex.practicum.filmorate;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,72 +1,84 @@
package ru.yandex.practicum.filmorate.controller;

import jakarta.validation.Valid;
import jakarta.validation.ValidationException;
import jakarta.validation.constraints.Positive;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.model.Film;
import ru.yandex.practicum.filmorate.service.FilmService;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

@Validated
@RestController
@RequestMapping("/films")
public class FilmController {

private final ValidateController validateController = new ValidateController();
private final Map<Long, Film> films = new HashMap<>();
private final Logger log = LoggerFactory.getLogger(FilmController.class);
private final Logger logger = LoggerFactory.getLogger(FilmController.class);
private final FilmService filmService;

@Autowired
public FilmController(FilmService filmService) {
this.filmService = filmService;
}

@GetMapping("/{id}")
@ResponseStatus(HttpStatus.OK)

public Film getFilmId(@Positive(message = "неверное значение") @PathVariable long id) {
logger.info("вывод фильма по ID");
return filmService.getFilmId(id);
}

@GetMapping
public ResponseEntity<Collection<Film>> filmAll() {
log.info("вывод списка фильмов");
return ResponseEntity.ok(films.values());
@ResponseStatus(HttpStatus.OK)
public Collection<Film> getFilmAll() {
logger.info("вывод списка фильмов");
return filmService.getAll();
}

@PostMapping
public ResponseEntity<?> create(@Valid @RequestBody Film film) {
validateController.validateFilm(film);
film.setId(getNextId());
films.put(film.getId(), film);
log.info("фильм добавлен id: " + film.getId());
return ResponseEntity.status(HttpStatus.CREATED).body(film);
@ResponseStatus(HttpStatus.CREATED)
public Film create(@Valid @RequestBody Film film) {
logger.info("Фильм добавлен");
return filmService.create(film);
}

@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.OK)
public void delete(@Positive(message = "неверное значение") @PathVariable long id) {
logger.info("Удаление id=" + id);
filmService.delete(id);
}

@PutMapping
public ResponseEntity<?> update(@Valid @RequestBody Film newFilm) {
if (newFilm.getId() == null) {
log.warn("ID пустой");
throw new ValidationException("пользователь с таким ID не найден");
// изначально сделал чтоб в теле была ошибка, но не прошло тесты в Postman
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("ID пустой");
}
if (!films.containsKey(newFilm.getId())) {
log.warn("пользователь с таким ID не найден");
// изначально сделал чтоб в теле была ошибка, но не прошло тесты в Postman
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("пользователь с таким ID не найден");
throw new ValidationException("пользователь с таким ID не найден");
}
validateController.validateFilm(newFilm);
Film oldFilm = films.get(newFilm.getId());
oldFilm.setName(newFilm.getName());
oldFilm.setDescription(newFilm.getDescription());
oldFilm.setReleaseDate(newFilm.getReleaseDate());
oldFilm.setDuration(newFilm.getDuration());
log.info("запись фильма обновлена");
return ResponseEntity.ok(oldFilm);
@ResponseStatus(HttpStatus.OK)
public Film update(@RequestBody Film newFilm) {
logger.info("запись фильма обновлена");
return filmService.update(newFilm);
}

private long getNextId() {
long currentMaxId = films.keySet()
.stream()
.mapToLong(id -> id)
.max()
.orElse(0);
return ++currentMaxId;
@PutMapping("/{id}/like/{userId}")
@ResponseStatus(HttpStatus.OK)
public Collection<Long> likeAdd(@Positive(message = "неверное значение") @PathVariable long id,
@Positive(message = "неверное значение") @PathVariable long userId) {
return filmService.likeAdd(id, userId);
}

@DeleteMapping("/{id}/like/{userId}")
@ResponseStatus(HttpStatus.OK)
public Collection<Long> likeDelete(@Positive(message = "неверное значение") @PathVariable long id,
@Positive(message = "неверное значение") @PathVariable long userId) {
return filmService.likeDelete(id, userId);
}

@GetMapping("/popular")
@ResponseStatus(HttpStatus.OK)
public Collection<Film> getPopular(@Positive(message = "неверное значение") @RequestParam(defaultValue = "10") int count) {
return filmService.getPopular(count);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,80 +2,95 @@

import jakarta.validation.Valid;

import jakarta.validation.ValidationException;
import jakarta.validation.constraints.Positive;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.model.User;
import ru.yandex.practicum.filmorate.service.UserService;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

@Validated
@RestController
@RequestMapping("/users")
public class UserController {

private final ValidateController validate = new ValidateController();
private final Map<Long, User> users = new HashMap<>();
private final UserService userService;

private final Logger logger = LoggerFactory.getLogger(UserController.class);

@Autowired
public UserController(UserService userService) {
this.userService = userService;
}

private final Logger log = LoggerFactory.getLogger(UserController.class);
@GetMapping("/{id}")
@ResponseStatus(HttpStatus.OK)
public User getUserId(@Positive(message = "неверное значение") @PathVariable long id) {
logger.info("вывод пользователя по ID");
return userService.getUserId(id);
}

@GetMapping //запрос всех пользователей
public ResponseEntity<Collection<User>> usersAll() {
@GetMapping
@ResponseStatus(HttpStatus.OK)
public Collection<User> userAll() {
logger.info("вывод списка пользователей");
return userService.getAll();
}

log.info("вывод списка пользователей");
return ResponseEntity.ok(users.values());
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public User create(@Valid @RequestBody User user) {
logger.info("Пользователь добавлен");
return userService.create(user);
}

@PostMapping //добавление нового пользователя
public ResponseEntity<?> create(@Valid @RequestBody User user) {
validate.validateUser(user);

if (users.containsValue(user)) {
log.warn("ошибка добавления пользователя, такой пользователь уже есть");
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("ошибка добавления пользователя, такой пользователь уже есть");
}
user.setId(getNextId());
users.put(user.getId(), user);
log.info("пользователь создан id: " + user.getId());
return ResponseEntity.status(HttpStatus.CREATED).body(user); //отрпавляем ответ с статусом и телом
@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.OK)
public void delete(@Positive(message = "неверное значение") @PathVariable long id) {
logger.info("Удаление id=" + id);
userService.delete(id);
}

@PutMapping //обновление пользователя
public ResponseEntity<?> update(@Valid @RequestBody User newUser) {
if (newUser.getId() == null) {
log.warn("ID пустой");
throw new ValidationException(" ID пустой");
// изначально сделал чтоб в теле была ошибка, но не прошло тесты в Postman
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("ID пустой");
}
if (!users.containsKey(newUser.getId())) {
log.warn("пользователь с таким ID не найден");
throw new ValidationException("пользователь с таким ID не найден");
// изначально сделал чтоб в теле была ошибка, но не прошло тесты в Postman
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("пользователь с таким ID не найден");
}
validate.validateUser(newUser);
User oldUser = users.get(newUser.getId());
oldUser.setEmail(newUser.getEmail());
oldUser.setLogin(newUser.getLogin());
oldUser.setBirthday(newUser.getBirthday());
oldUser.setName(newUser.getName());
log.info("пользователь изменен");
return ResponseEntity.ok(oldUser);
@PutMapping
@ResponseStatus(HttpStatus.OK)
public User update(@RequestBody User newUser) {
logger.info("запись пользователя обновлена");
return userService.update(newUser);
}

private long getNextId() {
long currentMaxId = users.keySet()
.stream()
.mapToLong(id -> id)
.max()
.orElse(0);
return ++currentMaxId;
@PutMapping("/{id}/friends/{friendsId}")
@ResponseStatus(HttpStatus.OK)
public Collection<Long> friendsAdd(@Positive(message = "неверное значение") @PathVariable long id,
@Positive(message = "неверное значение") @PathVariable long friendsId) {
logger.info("добавили в друзья");
return userService.friendsAdd(id, friendsId);
}

@DeleteMapping("/{id}/friends/{friendsId}")
@ResponseStatus(HttpStatus.OK)
public Collection<Long> friendsDelete(@Positive(message = "неверное значение") @PathVariable long id,
@Positive(message = "неверное значение") @PathVariable long friendsId) {
logger.info("удалили из друзей");
return userService.friendsDelete(id, friendsId);
}

@GetMapping("/{id}/friends")
@ResponseStatus(HttpStatus.OK)
public Collection<User> friendsGetList(@Positive(message = "неверное значение") @PathVariable long id) {
logger.info("показывает список друзей");
return userService.friendsGetList(id);
}

@GetMapping("/{id}/friends/common/{otherId}")
@ResponseStatus(HttpStatus.OK)
public Collection<User> friendsGetCommonList(@Positive(message = "неверное значение") @PathVariable long id,
@Positive(message = "неверное значение") @PathVariable long otherId) {
logger.info("показывает список друзей");
return userService.friendsGetCommonList(id, otherId);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import ru.yandex.practicum.filmorate.exception.ValidationException;
import ru.yandex.practicum.filmorate.exception.ValidationNullException;
import ru.yandex.practicum.filmorate.model.Film;
import ru.yandex.practicum.filmorate.model.User;

import java.time.LocalDate;

@Component
public class ValidateController {

private final Logger log = LoggerFactory.getLogger(ValidateController.class);
Expand Down Expand Up @@ -96,7 +98,6 @@ public void validateUser(User user) {
log.warn("введена дата из будущего");
throw new ValidationException("введена дата из будущего");
}

}
}

Expand Down
Loading