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

![](img.png)
Binary file added img.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,15 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</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 @@ -3,14 +3,13 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.exception.ValidationException;
import ru.yandex.practicum.filmorate.model.Film;
import ru.yandex.practicum.filmorate.service.FilmService;
import ru.yandex.practicum.filmorate.service.UserService;
import ru.yandex.practicum.filmorate.sortage.FilmStorage;
import ru.yandex.practicum.filmorate.exception.ValidationException;

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

@Slf4j
@RestController
Expand All @@ -26,7 +25,7 @@ public FilmController(FilmService filmService, UserService userService) {
}

@GetMapping
public Collection<Film> findAll() {
public List<Film> findAll() {
return filmService.findAll();
}

Expand All @@ -42,8 +41,8 @@ public Collection<Film> findAll() {

@PutMapping("{id}/like/{userId}")
public void addLike(@PathVariable Integer id,
@PathVariable Integer userId) throws ValidationException {
filmService.addLike(filmService.findById(id), userService.findById(userId));
@PathVariable Integer userId) {
filmService.addLike(id, userId);
}

@DeleteMapping("{id}/like/{userId}")
Expand All @@ -53,10 +52,10 @@ public void deleteLike(@PathVariable Integer id,
}

@GetMapping("/popular")
public Collection<Film> getPopularFilms(
public List<Film> getPopularFilms(
@RequestParam(defaultValue = "10",required = false) Integer count
) {
return filmService.getPopularFilms(filmService.findAll(), count);
return filmService.getPopularFilms(count);
}

@GetMapping("{id}")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package ru.yandex.practicum.filmorate.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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.model.Genre;
import ru.yandex.practicum.filmorate.service.GenreService;

import javax.validation.constraints.NotNull;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/genres")
public class GenreController {

@Autowired
GenreService genreService;

@GetMapping("{id}")
public Genre findById(@NotNull @PathVariable Integer id){
return genreService.findById(id);
}

@GetMapping
public List<Genre> findAll() {
return genreService.findAll();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package ru.yandex.practicum.filmorate.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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.model.MpaRating;
import ru.yandex.practicum.filmorate.service.MpaService;

import javax.validation.constraints.NotNull;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/mpa")
public class MpaController {

@Autowired
MpaService mpaService;

@GetMapping("{id}")
public MpaRating findById(@NotNull @PathVariable Integer id) {
return mpaService.findById(id);
}

@GetMapping()
public List<MpaRating> findAll() {
return mpaService.findAll();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import ru.yandex.practicum.filmorate.model.User;
import ru.yandex.practicum.filmorate.service.UserService;
import ru.yandex.practicum.filmorate.exception.ValidationException;
import ru.yandex.practicum.filmorate.sortage.UserStorage;
import ru.yandex.practicum.filmorate.service.UserService;

import javax.validation.Valid;
import java.util.Collection;
Expand Down Expand Up @@ -75,7 +74,7 @@ public List<User> commonFriends(@PathVariable Integer id,

@DeleteMapping
public @Valid void delete(@Valid @RequestBody User user) throws ValidationException {
userService.deleteUser(user);
userService.deleteUser(user.getUserId());
}

}
39 changes: 30 additions & 9 deletions src/main/java/ru/yandex/practicum/filmorate/model/Film.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
package ru.yandex.practicum.filmorate.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.validation.annotation.Validated;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.time.Duration;
import java.time.LocalDate;
import java.util.HashSet;
import java.util.Set;
import java.util.List;
import javax.validation.constraints.*;


@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Film {
private int id;
@JsonProperty("id")
private int filmId;
@NotBlank(message = "Имя не может быть пустым!")
private String name;
@NotBlank(message = "Описание не может быть пустым!")
Expand All @@ -21,14 +26,30 @@ public class Film {
@Past(message = "Некорректная дата релиза")
private LocalDate releaseDate;
private long duration;
private Set<Integer> likes;
//private Set<Integer> likes;
private int rate;
private long likes;
@JsonProperty("genres")
private List<Genre> genre;
@NotNull
@JsonProperty("mpa")
private MpaRating mpa;

public Film(int id, String name, String description, LocalDate releaseDate, long duration) {
this.id = id;
public Film(int filmId, String name, String description, LocalDate releaseDate, long duration, int rate, MpaRating mpa) {
this.filmId = filmId;
this.name = name;
this.description = description;
this.releaseDate = releaseDate;
this.duration = duration;
this.rate = rate;
this.mpa = mpa;
}

public Film(int filmId, String name, String description, LocalDate releaseDate, long duration, int rate) {
this.filmId = filmId;
this.name = name;
this.description = description;
this.releaseDate = releaseDate;
this.duration = duration;
this.likes = new HashSet<>();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package ru.yandex.practicum.filmorate.model;

public enum FriendshipStatus {
CONFIRMED,
UNCONFIRMED
}
13 changes: 13 additions & 0 deletions src/main/java/ru/yandex/practicum/filmorate/model/Genre.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ru.yandex.practicum.filmorate.model;

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

@Data
public class Genre {
@JsonProperty("id")
private Integer id;

@JsonProperty("name")
private String name;
}
30 changes: 30 additions & 0 deletions src/main/java/ru/yandex/practicum/filmorate/model/GenreEnum.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ru.yandex.practicum.filmorate.model;

public enum GenreEnum {
COMEDY(1, "Комедия"),
DRAMA(2,"Драма"),
CARTOON(3,"Мультфильм"),
THRILLER(4,"Триллер"),
DOCUMENTARY(5,"Документальный"),
ACTION(6,"Экшн");

private int id;

private String name;

GenreEnum(int aId, String aName) {
id = aId;
name = aName;
}

public static String getNameById(int id) {
for (GenreEnum o : GenreEnum.values()) {
if (o.id == id) {
return o.name;
}
}
return "";
}
}


15 changes: 15 additions & 0 deletions src/main/java/ru/yandex/practicum/filmorate/model/LikeFilms.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ru.yandex.practicum.filmorate.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class LikeFilms {

private Integer filmId;
}
16 changes: 16 additions & 0 deletions src/main/java/ru/yandex/practicum/filmorate/model/MpaRating.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ru.yandex.practicum.filmorate.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

@Data
public class MpaRating {
@JsonProperty("id")
private int id;

@JsonProperty("name")
@JsonIgnore
private String name;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package ru.yandex.practicum.filmorate.model;

public enum MpaRatingEnum {
G(1, "G"),
PG(2, "PG"),
PG13(3, "PG-13"),
R(4, "R"),
NC17(5, "NC-17");

private int id;

private String name;

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

public static String getNameById(int id) {
for (MpaRatingEnum e : MpaRatingEnum.values()) {
if (e.id == id) {
return e.name;
}
}
return null;
}
}
24 changes: 20 additions & 4 deletions src/main/java/ru/yandex/practicum/filmorate/model/User.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package ru.yandex.practicum.filmorate.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.validation.annotation.Validated;
import lombok.NoArgsConstructor;

import javax.validation.constraints.*;
import java.time.LocalDate;
Expand All @@ -11,8 +15,11 @@

@Data
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
@JsonProperty("id")
private int userId;
@NotBlank
@Email(message = "Некоррктный email!")
private String email;
Expand All @@ -23,14 +30,23 @@ public class User {
@Past(message = "Дата рождения не может быть в будущем!")
private LocalDate birthday;
private Set<Integer> friends;
private FriendshipStatus friendshipStatus;

public User(int id, String email, String login, String name, LocalDate birthday) {
this.id = id;
public User(int userId, String email, String login, String name, LocalDate birthday, FriendshipStatus friendshipStatus) {
this.userId = userId;
this.email = email;
this.login = login;
this.name = name;
this.birthday = birthday;
this.friends = new HashSet<>();
this.friendshipStatus = friendshipStatus;
}

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