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
13 changes: 13 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +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.zalando</groupId>
<artifactId>logbook-spring-boot-starter</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

@SpringBootApplication
public class FilmorateApplication {

public static void main(String[] args) {
SpringApplication.run(FilmorateApplication.class, args);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
import ru.yandex.practicum.filmorate.service.FilmService;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

@Slf4j
@RestController
Expand All @@ -24,6 +22,11 @@ public Collection<Film> getAll() {
return filmService.getAll();
}

@GetMapping("/{id}")
public Film getFilmById(@PathVariable int id) {
return filmService.getFilmById(id);
}

@GetMapping("/popular")
public Collection<Film> getFilmsByLike(@RequestParam(defaultValue = "10") int sizeFilms) {
return filmService.getFilmsByLike(sizeFilms);
Expand All @@ -40,7 +43,7 @@ public Film update(@Valid @RequestBody Film filmUpdate) {
}

@PutMapping("/{filmId}/like/{userId}")
public Map<Film, Set<Integer>> addLike(@PathVariable int filmId, @PathVariable int userId) {
public boolean addLike(@PathVariable int filmId, @PathVariable int userId) {
return filmService.addLike(filmId, userId);
}

Expand All @@ -49,5 +52,4 @@ public void removeLike(@PathVariable int filmId, @PathVariable int userId) {
filmService.removeLike(filmId, userId);
}


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

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import ru.yandex.practicum.filmorate.model.Genre;
import ru.yandex.practicum.filmorate.service.GenreService;

import java.util.Collection;

@Slf4j
@RestController
@RequiredArgsConstructor
public class GenreController {

private final GenreService genreService;

@GetMapping("/genres/{id}")
public Genre getById(@PathVariable Integer id) {
return genreService.getById(id);
}

@GetMapping("/genres")
public Collection<Genre> getAll() {
return genreService.getAll();
}

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

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.MpaRatingService;

import java.util.Collection;

@Slf4j
@RestController
@RequestMapping("/mpa")
@RequiredArgsConstructor
public class MpaRatingController {
private final MpaRatingService mpaRatingService;

@GetMapping("/{id}")
public MpaRating getById(@PathVariable Integer id) {
return mpaRatingService.getById(id);
}

@GetMapping
public Collection<MpaRating> getAll() {
return mpaRatingService.getAll();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,4 @@ public void removeFriend(@PathVariable int userId, @PathVariable int friendsId)
userService.removeFriend(userId, friendsId);
}


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

import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;
import ru.yandex.practicum.filmorate.model.Film;
import ru.yandex.practicum.filmorate.model.Genre;
import ru.yandex.practicum.filmorate.storage.genre.GenreDbStorage;
import ru.yandex.practicum.filmorate.storage.mpa.MpaRatingDbStorage;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

@Component
public class FilmRowMapper implements RowMapper<Film> {
private final GenreDbStorage genreDbStorage;
private final MpaRatingDbStorage mpa;

public FilmRowMapper(GenreDbStorage genreDbStorage, MpaRatingDbStorage mpa) {
this.genreDbStorage = genreDbStorage;
this.mpa = mpa;
}

@Override
public Film mapRow(ResultSet resultSet, int rowNum) throws SQLException {
Timestamp releaseDate = resultSet.getTimestamp("release_date");
String genreIds = resultSet.getString("genre_ids");
List<Genre> genres = new ArrayList<>();
if (!genreIds.isEmpty()) {
String[] genreIdsArray = genreIds.split(",\\s*");
for (String id : genreIdsArray) {
genres.add(genreDbStorage.getById(Integer.parseInt(id)));
}
}

return Film.builder()
.id(resultSet.getInt("film_id"))
.name(resultSet.getString("film_name"))
.description(resultSet.getString("description"))
.releaseDate(releaseDate.toLocalDateTime().toLocalDate())
.duration(resultSet.getInt("duration_minutes"))
.likesCount(resultSet.getInt("likes_count"))
.mpa(mpa.geById(resultSet.getInt("mpa_id")))
.genres(genres)
.build();
}
}
6 changes: 4 additions & 2 deletions src/main/java/ru/yandex/practicum/filmorate/model/Film.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import lombok.Data;

import java.time.LocalDate;
import java.util.List;

@Builder
@Data
Expand All @@ -23,6 +24,7 @@ public class Film {
@Positive
@NotNull
private Integer duration;
private int likes;

private int likesCount;
private List<Genre> genres;
private MpaRating mpa;
}
16 changes: 16 additions & 0 deletions src/main/java/ru/yandex/practicum/filmorate/model/Friendship.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ru.yandex.practicum.filmorate.model;

import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class Friendship {
@NotNull
private Integer firstUserId;
@NotNull
private Integer secondUserId;
@NotNull
private Boolean status;
}
15 changes: 15 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,15 @@
package ru.yandex.practicum.filmorate.model;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class Genre {
private Integer id;
@NotNull
@NotBlank
private String name;
}
15 changes: 15 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,15 @@
package ru.yandex.practicum.filmorate.model;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class MpaRating {
private Integer id;
@NotNull
@NotBlank
private String name;
}
4 changes: 2 additions & 2 deletions src/main/java/ru/yandex/practicum/filmorate/model/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
import lombok.Data;

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

@Builder
@Data
public class User {

private Integer id;
@NotNull
@NotBlank
Expand All @@ -25,5 +25,5 @@ public class User {
@Past
@NotNull
private LocalDate birthday;

private Set<Integer> friends;
}
Original file line number Diff line number Diff line change
@@ -1,42 +1,47 @@
package ru.yandex.practicum.filmorate.service;

import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import ru.yandex.practicum.filmorate.model.Film;
import ru.yandex.practicum.filmorate.storage.film.InMemoryFilmStorage;
import ru.yandex.practicum.filmorate.storage.film.FilmStorage;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

@RequiredArgsConstructor
@Service
public class FilmService {

private final InMemoryFilmStorage inMemoryFilmStorage;
private final FilmStorage filmStorage;

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

public Collection<Film> getAll() {
return inMemoryFilmStorage.getAll();
return filmStorage.getAll();
}

public Film getFilmById(int id) {
return filmStorage.getFilmById(id);
}

public Film create(Film film) {
return inMemoryFilmStorage.create(film);
return filmStorage.create(film);
}

public Film update(Film filmUpdate) {
return inMemoryFilmStorage.update(filmUpdate);
return filmStorage.update(filmUpdate);
}

public Map<Film, Set<Integer>> addLike(int filmId, int userId) {
return inMemoryFilmStorage.addLike(filmId, userId);
public boolean addLike(int filmId, int userId) {
return filmStorage.addLike(filmId, userId);
}

public void removeLike(int filmId, int userId) {
inMemoryFilmStorage.removeLike(filmId, userId);
filmStorage.removeLike(filmId, userId);
}

public Collection<Film> getFilmsByLike(Integer sizeFilms) {
return inMemoryFilmStorage.getFilmsByLike(sizeFilms);
return filmStorage.getFilmsByLike(sizeFilms);
}

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

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import ru.yandex.practicum.filmorate.model.Genre;
import ru.yandex.practicum.filmorate.storage.genre.GenreDbStorage;

import java.util.Collection;

@Service
@RequiredArgsConstructor
public class GenreService {
private final GenreDbStorage genreDbStorage;

public Genre getById(Integer id) {
return genreDbStorage.getById(id);
}

public Collection<Genre> getAll() {
return genreDbStorage.getAll();
}

Choose a reason for hiding this comment

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

Слишком много пустых строк

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

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import ru.yandex.practicum.filmorate.model.MpaRating;
import ru.yandex.practicum.filmorate.storage.mpa.MpaRatingDbStorage;

import java.util.Collection;

@Service
@RequiredArgsConstructor
public class MpaRatingService {
private final MpaRatingDbStorage mpaRatingDbStorage;

public MpaRating getById(Integer id) {
return mpaRatingDbStorage.geById(id);
}

public Collection<MpaRating> getAll() {
return mpaRatingDbStorage.getAll();
}

}
Loading