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
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
# java-filmorate
Template repository for Filmorate project.

### Database scheme
![database_scheme.png](database_scheme.png)
Binary file added database_scheme.png

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

наличие картинки соответствует тз

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
32 changes: 29 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
Expand All @@ -42,15 +41,42 @@
<artifactId>logbook-spring-boot-starter</artifactId>
<version>3.7.2</version>
</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>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<configLocation>checkstyle.xml</configLocation>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.model.Film;
import ru.yandex.practicum.filmorate.dto.film.FilmDto;
import ru.yandex.practicum.filmorate.dto.film.NewFilmRequest;
import ru.yandex.practicum.filmorate.dto.film.UpdateFilmRequest;
import ru.yandex.practicum.filmorate.service.FilmService;
import java.util.List;

Expand All @@ -23,40 +25,38 @@ public FilmController(FilmService filmService) {
* Возвращает фильм по id
*/
@GetMapping("/{id}")
public ResponseEntity<Film> getFilmById(@PathVariable int id) {
public ResponseEntity<FilmDto> getFilmById(@PathVariable int id) {
return ResponseEntity.ok(filmService.getFilmById(id));
}

/**
* Возвращает все фильмы в виде списка
*/
@GetMapping
public ResponseEntity<List<Film>> getFilms() {
public ResponseEntity<List<FilmDto>> getFilms() {
return ResponseEntity.ok(filmService.getFilms());
}

/**
* Добавляет новый фильм.
*
* @param newFilm объект фильма, который нужно добавить
* @param newFilmDto объект фильма, который нужно добавить
* @return ответ, содержащий созданный фильм с присвоенным ID
*/
@PostMapping
public ResponseEntity<Film> addFilm(@Valid @RequestBody Film newFilm) {
Film createdFilm = filmService.addFilm(newFilm);
return ResponseEntity.status(HttpStatus.CREATED).body(createdFilm);
public ResponseEntity<FilmDto> addFilm(@Valid @RequestBody NewFilmRequest newFilmDto) {
return ResponseEntity.status(HttpStatus.CREATED).body(filmService.addFilm(newFilmDto));
}

/**
* Обновляет фильм.
*
* @param updatedFilm объект фильма, который нужно обновить
* @param updatedFilmDto объект фильма, который нужно обновить
* @return ответ, содержащий обновлённый фильм
*/
@PutMapping
public ResponseEntity<Film> updateFilm(@Valid @RequestBody Film updatedFilm) {
Film savedFilm = filmService.updateFilm(updatedFilm);
return ResponseEntity.ok(savedFilm);
public ResponseEntity<FilmDto> updateFilm(@Valid @RequestBody UpdateFilmRequest updatedFilmDto) {
return ResponseEntity.ok(filmService.updateFilm(updatedFilmDto));
}

/**
Expand Down Expand Up @@ -92,7 +92,7 @@ public ResponseEntity<Void> removeLikeByUser(@PathVariable int id, @PathVariable
* @return список самых популярных фильмов
*/
@GetMapping("/popular")
public ResponseEntity<List<Film>> getMostPopularFilms(
public ResponseEntity<List<FilmDto>> getMostPopularFilms(
@RequestParam(required = false, defaultValue = "10") int count) {
return ResponseEntity.ok(filmService.getMostPopularFilms(count));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package ru.yandex.practicum.filmorate.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import ru.yandex.practicum.filmorate.dto.GenreDto;
import ru.yandex.practicum.filmorate.service.GenreService;

import java.util.List;

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

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

/**
* Возвращает жанр по id
*/
@GetMapping("/{id}")
public ResponseEntity<GenreDto> getGenreById(@PathVariable int id) {
return ResponseEntity.ok(genreService.getGenreById(id));
}

/**
* Возвращает все жанры в виде списка
*/
@GetMapping
public ResponseEntity<List<GenreDto>> getGenres() {
return ResponseEntity.ok(genreService.getGenres());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package ru.yandex.practicum.filmorate.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.dto.MpaDto;
import ru.yandex.practicum.filmorate.service.MpaService;

import java.util.List;

@RestController
@RequestMapping("/mpa")
public class MpaController {
private final MpaService mpaService;

@Autowired
public MpaController(MpaService mpaService) {
this.mpaService = mpaService;
}

/**
* Возвращает рейтинг MPA по id
*/
@GetMapping("/{id}")
public ResponseEntity<MpaDto> getMpaById(@PathVariable int id) {
return ResponseEntity.ok(mpaService.getMpaById(id));
}

/**
* Возвращает все рейтинги MPA
*/
@GetMapping
public ResponseEntity<List<MpaDto>> getMpaList() {
return ResponseEntity.ok(mpaService.getMpaList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.model.User;
import ru.yandex.practicum.filmorate.dto.user.NewUserRequest;
import ru.yandex.practicum.filmorate.dto.user.UpdateUserRequest;
import ru.yandex.practicum.filmorate.dto.user.UserDto;
import ru.yandex.practicum.filmorate.service.UserService;
import java.util.List;

Expand All @@ -23,15 +25,15 @@ public UserController(UserService userService) {
* Возвращает пользователя по id
*/
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable int id) {
public ResponseEntity<UserDto> getUserById(@PathVariable int id) {
return ResponseEntity.ok(userService.getUserById(id));
}

/**
* Возвращает всех пользователей в виде списка
*/
@GetMapping
public ResponseEntity<List<User>> getUsers() {
public ResponseEntity<List<UserDto>> getUsers() {
return ResponseEntity.ok(userService.getUsers());
}

Expand All @@ -42,9 +44,8 @@ public ResponseEntity<List<User>> getUsers() {
* @return ответ, содержащий созданного пользователя с присвоенным ID
*/
@PostMapping
public ResponseEntity<User> addUser(@Valid @RequestBody User newUser) {
User createdUser = userService.addUser(newUser);
return ResponseEntity.status(HttpStatus.CREATED).body(createdUser);
public ResponseEntity<UserDto> addUser(@Valid @RequestBody NewUserRequest newUser) {
return ResponseEntity.status(HttpStatus.CREATED).body(userService.addUser(newUser));
}

/**
Expand All @@ -54,9 +55,8 @@ public ResponseEntity<User> addUser(@Valid @RequestBody User newUser) {
* @return ответ, содержащий обновлённого пользователя
*/
@PutMapping
public ResponseEntity<User> updateUser(@Valid @RequestBody User updatedUser) {
User savedUser = userService.updateUser(updatedUser);
return ResponseEntity.ok(savedUser);
public ResponseEntity<UserDto> updateUser(@Valid @RequestBody UpdateUserRequest updatedUser) {
return ResponseEntity.ok(userService.updateUser(updatedUser));
}

/**
Expand Down Expand Up @@ -92,7 +92,7 @@ public ResponseEntity<Void> removeFriend(@PathVariable int id, @PathVariable int
* @return список друзей-пользователей указанного пользователя.
*/
@GetMapping("/{id}/friends")
public ResponseEntity<List<User>> getAllFriends(@PathVariable int id) {
public ResponseEntity<List<UserDto>> getAllFriends(@PathVariable int id) {
return ResponseEntity.ok(userService.getUserFriendsById(id));
}

Expand All @@ -104,7 +104,7 @@ public ResponseEntity<List<User>> getAllFriends(@PathVariable int id) {
* @return список общих друзей в виде списка пользователей.
*/
@GetMapping("/{id}/friends/common/{otherId}")
public ResponseEntity<List<User>> getCommonFriends(@PathVariable int id, @PathVariable int otherId) {
public ResponseEntity<List<UserDto>> getCommonFriends(@PathVariable int id, @PathVariable int otherId) {
return ResponseEntity.ok(userService.getCommonFriends(id, otherId));
}
}
11 changes: 11 additions & 0 deletions src/main/java/ru/yandex/practicum/filmorate/dto/GenreDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ru.yandex.practicum.filmorate.dto;

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class GenreDto {
private Integer id;
private String name;
}
11 changes: 11 additions & 0 deletions src/main/java/ru/yandex/practicum/filmorate/dto/MpaDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ru.yandex.practicum.filmorate.dto;

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class MpaDto {
private Integer id;
private String name;
}
23 changes: 23 additions & 0 deletions src/main/java/ru/yandex/practicum/filmorate/dto/film/FilmDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package ru.yandex.practicum.filmorate.dto.film;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import ru.yandex.practicum.filmorate.model.Genre;
import ru.yandex.practicum.filmorate.model.Mpa;

import java.time.LocalDate;
import java.util.Set;

@Data
@NoArgsConstructor
public class FilmDto {
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private int id;
private String name;
private String description;
private LocalDate releaseDate;
private Integer duration;
private Set<Genre> genres;
private Mpa mpa;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package ru.yandex.practicum.filmorate.dto.film;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import ru.yandex.practicum.filmorate.model.Genre;
import ru.yandex.practicum.filmorate.model.Mpa;

import java.time.LocalDate;
import java.util.Set;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class NewFilmRequest {
private String name;
private String description;
private LocalDate releaseDate;
private Integer duration;
private Set<Genre> genres;
private Mpa mpa;
}
Loading
Loading