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
9 changes: 9 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,15 @@
<version>23.0.0</version>
<scope>compile</scope>
</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>
</dependencies>

<build>
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.exceptions.FilmNotFoundException;
import ru.yandex.practicum.exceptions.UserNotFoundException;
import ru.yandex.practicum.exceptions.ValidationException;
import ru.yandex.practicum.exceptions.*;

import javax.validation.ConstraintViolationException;

Expand All @@ -26,7 +24,8 @@ public String handleAnnotationValidationException(final RuntimeException runtime
return runtimeException.getMessage();
}

@ExceptionHandler({FilmNotFoundException.class, UserNotFoundException.class})
@ExceptionHandler({FilmNotFoundException.class, UserNotFoundException.class, FriendStatusNotFoundException.class,
GenreNotFoundException.class, RatingMPANotFoundException.class})
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleFilmUserNotFoundException(final RuntimeException runtimeException) {
return runtimeException.getMessage();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public Film updateFilm(@Valid @RequestBody Film film) { // обновление
}

@DeleteMapping("/{filmId}")
public Film deleteFilmById(@PathVariable long filmId) { // удаление фильма по id
public boolean deleteFilmById(@PathVariable long filmId) { // удаление фильма по id
return filmService.deleteFilmById(filmId);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package ru.yandex.practicum.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.models.FriendStatus;
import ru.yandex.practicum.services.FriendStatusService;

import javax.validation.Valid;
import java.util.Collection;

@RestController
@Validated
@RequestMapping("/friendStatus")
public class FriendStatusController {
private final FriendStatusService friendStatusService;

@Autowired
public FriendStatusController(FriendStatusService friendStatusService) {
this.friendStatusService = friendStatusService;
}

@GetMapping
public Collection<FriendStatus> findAllFriendStatus() {
return friendStatusService.findAllFriendStatus();
}

@GetMapping("/{friendStatusId}")
public FriendStatus findFriendStatusById(@PathVariable int friendStatusId) {
return friendStatusService.findFriendStatusById(friendStatusId);
}

@PostMapping
public FriendStatus createFriendStatus(@Valid @RequestBody FriendStatus friendStatus) {
return friendStatusService.createFriendStatus(friendStatus);
}

@PutMapping
public FriendStatus updateFriendStatus(@Valid @RequestBody FriendStatus friendStatus) {
return friendStatusService.updateFriendStatus(friendStatus);
}

@DeleteMapping("/{friendStatusId}")
public boolean deleteFriendStatusById(@PathVariable int friendStatusId) {
return friendStatusService.deleteFriendStatusById(friendStatusId);
}
}
47 changes: 47 additions & 0 deletions src/main/java/ru/yandex/practicum/controllers/GenreController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package ru.yandex.practicum.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.models.Genre;
import ru.yandex.practicum.services.GenreService;

import javax.validation.Valid;
import java.util.Collection;

@RestController
@Validated
@RequestMapping("/genres")
public class GenreController {
private final GenreService genreService;

@Autowired
public GenreController(GenreService genreService) {
this.genreService = genreService;
}

@GetMapping
public Collection<Genre> findAllGenres() {
return genreService.findAllGenres();
}

@GetMapping("/{id}")
public Genre findGenreById(@PathVariable int id) {
return genreService.findGenreById(id);
}

@PostMapping
public Genre createGenre(@Valid @RequestBody Genre genre) {
return genreService.createGenre(genre);
}

@PutMapping
public Genre updateGenre(@Valid @RequestBody Genre genre) {
return genreService.updateGenre(genre);
}

@DeleteMapping("/{id}")
public boolean deleteGenreById(@PathVariable int id) {
return genreService.deleteGenreById(id);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package ru.yandex.practicum.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.models.RatingMPA;
import ru.yandex.practicum.services.RatingMPAService;

import javax.validation.Valid;
import java.util.Collection;

@RestController
@Validated
@RequestMapping("/mpa")
public class RatingMpaController {
private final RatingMPAService ratingMPAService;

@Autowired
public RatingMpaController(RatingMPAService ratingMPAService) {
this.ratingMPAService = ratingMPAService;
}

@GetMapping
public Collection<RatingMPA> findAllRatingsMPA() {
return ratingMPAService.findAllRatingsMPA();
}

@GetMapping("/{id}")
public RatingMPA findRatingMPAById(@PathVariable int id) {
return ratingMPAService.findRatingMPAById(id);
}

@PostMapping
public RatingMPA createRatingMPA(@Valid @RequestBody RatingMPA ratingMPA) {
return ratingMPAService.createRatingMPA(ratingMPA);
}

@PutMapping
public RatingMPA updateRatingMPA(@Valid @RequestBody RatingMPA ratingMPA) {
return ratingMPAService.updateRatingMPA(ratingMPA);
}

@DeleteMapping("/{id}")
public boolean deleteRatingMPAById(@PathVariable int id) {
return ratingMPAService.deleteRatingMPAById(id);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public User updateUser(@Valid @RequestBody User user) { // обновление
}

@DeleteMapping("/{userId}")
public User deleteUserById(@PathVariable long userId) { // удаление пользователя по id
public boolean deleteUserById(@PathVariable long userId) { // удаление пользователя по id
return userService.deleteUserById(userId);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.yandex.practicum.exceptions;

public class FriendStatusNotFoundException extends RuntimeException {
public FriendStatusNotFoundException(int id) {
super("FriendStatus с id=" + id + " не существует.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.yandex.practicum.exceptions;

public class GenreNotFoundException extends RuntimeException {
public GenreNotFoundException(int id) {
super("Жанр с id=" + id + " не существует.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.yandex.practicum.exceptions;

public class RatingMPANotFoundException extends RuntimeException {
public RatingMPANotFoundException(int id) {
super("RatingMPA с id=" + id + " не существует.");
}
}
22 changes: 15 additions & 7 deletions src/main/java/ru/yandex/practicum/models/Film.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,37 @@

import lombok.Data;

import javax.validation.constraints.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import javax.validation.constraints.Size;
import java.time.LocalDate;
import java.util.HashSet;
import java.util.Set;

@Data
public class Film {
@Positive
private final int duration;
private int duration;
@NotBlank
private final String name;
private String name;
@NotNull
private final LocalDate releaseDate;
private LocalDate releaseDate;
private final Set<Long> likes = new HashSet<>();
private final Set<Genre> genres = new HashSet<>();
@NotNull
private RatingMPA mpa;
private long id;
@NotBlank
@Size(max = 200)
private String description;

public Film(int duration, String name, LocalDate releaseDate, String description) {
this.duration = duration;
public Film(long id, String name, String description, int duration, LocalDate releaseDate, RatingMPA mpa) {
this.id = id;
this.name = name;
this.releaseDate = releaseDate;
this.description = description;
this.duration = duration;
this.releaseDate = releaseDate;
this.mpa = mpa;
}
}
17 changes: 17 additions & 0 deletions src/main/java/ru/yandex/practicum/models/FriendStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.yandex.practicum.models;

import lombok.Data;

import javax.validation.constraints.NotBlank;

@Data
public class FriendStatus {
private int id;
@NotBlank
private String name;

public FriendStatus(int id, String name) {
this.id = id;
this.name = name;
}
}
25 changes: 25 additions & 0 deletions src/main/java/ru/yandex/practicum/models/Genre.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ru.yandex.practicum.models;

import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;

@Data
@EqualsAndHashCode(of="id")
public class Genre {
private int id;
@NotBlank
private String name;

public Genre(int id, String name) {
this.id = id;
this.name = name;
}

@JsonCreator
public Genre(int id) {
this.id = id;
}
}
25 changes: 25 additions & 0 deletions src/main/java/ru/yandex/practicum/models/RatingMPA.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ru.yandex.practicum.models;

import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Data;

import javax.validation.constraints.NotBlank;

@Data
public class RatingMPA {
private int id;
@NotBlank
private String name;

public RatingMPA(int id, String name) {
this.id = id;
this.name = name;
}

@JsonCreator
public RatingMPA(int id) {
this.id = id;
}

public RatingMPA() {}
}
18 changes: 11 additions & 7 deletions src/main/java/ru/yandex/practicum/models/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,19 @@

import lombok.Data;

import javax.validation.constraints.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.PastOrPresent;
import java.time.LocalDate;
import java.util.HashSet;
import java.util.Set;

@Data
public class User {
@NotNull
@Past
private final LocalDate birthday;
@PastOrPresent
private LocalDate birthday;
private final Set<Long> friends = new HashSet<>();
private long id;
@Email
Expand All @@ -20,10 +23,11 @@ public class User {
private String login;
private String name;

public User(LocalDate birthday, String email, String login, String name) {
this.birthday = birthday;
this.email = email;
this.login = login;
public User(long id, String name, String login, String email, LocalDate birthday) {
this.id = id;
this.name = name;
this.login = login;
this.email = email;
this.birthday = birthday;
}
}
Loading