From 0cf8d17cca655e310936a14a289446343b6ee2bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=91=D0=B0=D0=BA=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D1=81=D0=BA=D0=B0=D1=8F?= Date: Fri, 21 Jun 2024 00:36:24 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B0=D0=BE=D0=B0=D0=BE=20=D0=B0=D0=BE?= =?UTF-8?q?=20=D0=B0=D0=BE=20=D0=BE=20=D0=B0=20=D0=BE=20=D0=B0=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B5=20=D0=B2=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=BD=D0=BD=D0=BE=D0=B5=20=D0=BD=D0=B5=D1=83?= =?UTF-8?q?=D0=B6=D0=B5=D0=BB=D0=B8=20=D0=B0=D0=B0=D0=B0=D0=BE=D0=B0=D0=BE?= =?UTF-8?q?=D0=B0=D0=BE=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/backend/BackendApplication.java | 6 +- .../repository/FavoriteRepository.java | 5 +- .../favorites/service/FavoriteService.java | 5 + .../movies/api/MovieUserController.java | 112 ++++++++++++++---- .../backend/movies/api/MovieUserDTO.java | 39 ++++++ .../backend/movies/service/MovieService.java | 6 +- .../src/main/resources/templates/movies.html | 70 ++--------- data.mv.db | Bin 274432 -> 385024 bytes 8 files changed, 157 insertions(+), 86 deletions(-) create mode 100644 backend/src/main/java/com/example/backend/movies/api/MovieUserDTO.java diff --git a/backend/src/main/java/com/example/backend/BackendApplication.java b/backend/src/main/java/com/example/backend/BackendApplication.java index 183ad5a..b6af0e5 100644 --- a/backend/src/main/java/com/example/backend/BackendApplication.java +++ b/backend/src/main/java/com/example/backend/BackendApplication.java @@ -89,13 +89,15 @@ public class BackendApplication implements CommandLineRunner { // categorieService.create(cat4); // categorieService.create(cat5); // movieService.create(mov1); - favoriyService.create(new FavoriteEntity(null, userService.get(2), movieService.get(98))); + // movieService.get(98)); // for (var fav : favoriyService.getAll(2)) { // favoriyService.delete(fav.getId()); // } + // favoriyService.create(new FavoriteEntity(null, userService.get(2), + // movieService.get(98))); - _logger.info("The program is started"); + _logger.info("The program is started, coun favs is " + favoriyService.getAll(2).size()); } } diff --git a/backend/src/main/java/com/example/backend/favorites/repository/FavoriteRepository.java b/backend/src/main/java/com/example/backend/favorites/repository/FavoriteRepository.java index 81c27fe..897c8c9 100644 --- a/backend/src/main/java/com/example/backend/favorites/repository/FavoriteRepository.java +++ b/backend/src/main/java/com/example/backend/favorites/repository/FavoriteRepository.java @@ -10,7 +10,10 @@ public interface FavoriteRepository extends CrudRepository findByUserId(Integer userId); - List findByUserIdAndMovieId(Integer userId, Integer movieId); + FavoriteEntity findByUserIdAndMovieId(Integer userId, Integer movieId); Optional findOneByUserIdAndId(Integer userId, Integer id); + + Optional deleteByMovieId(Integer movieId); + } diff --git a/backend/src/main/java/com/example/backend/favorites/service/FavoriteService.java b/backend/src/main/java/com/example/backend/favorites/service/FavoriteService.java index 7849d62..7ba916f 100644 --- a/backend/src/main/java/com/example/backend/favorites/service/FavoriteService.java +++ b/backend/src/main/java/com/example/backend/favorites/service/FavoriteService.java @@ -31,6 +31,11 @@ public class FavoriteService { return repository.findById(id).orElseThrow(() -> new NotFoundException(FavoriteEntity.class, id)); } + @Transactional + public FavoriteEntity findByUserIdAndMovieId(Integer uId, Integer mId) { + return repository.findByUserIdAndMovieId(uId, mId); + } + // @Transactional(readOnly = true) // public List getForAddToFavorite(Integer userId, Integer // movieId) { diff --git a/backend/src/main/java/com/example/backend/movies/api/MovieUserController.java b/backend/src/main/java/com/example/backend/movies/api/MovieUserController.java index c4ae309..4ae84a2 100644 --- a/backend/src/main/java/com/example/backend/movies/api/MovieUserController.java +++ b/backend/src/main/java/com/example/backend/movies/api/MovieUserController.java @@ -1,6 +1,7 @@ package com.example.backend.movies.api; import java.util.List; +import java.util.ArrayList; import org.modelmapper.ModelMapper; import org.springframework.web.bind.annotation.RequestMapping; @@ -12,7 +13,10 @@ import com.example.backend.favorites.model.FavoriteEntity; import com.example.backend.favorites.service.FavoriteService; import com.example.backend.movies.model.MovieEntity; import com.example.backend.movies.service.MovieService; +import com.example.backend.users.model.UserEntity; import com.example.backend.users.service.UserService; +import com.example.backend.viewed.model.ViewedEntity; +import com.example.backend.viewed.service.ViewedService; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; @@ -38,11 +42,13 @@ public class MovieUserController { private static final String PAGE_ATTRIBUTE = "page"; private static final String MOVIE_ATTRIBUTE = "movie"; private static final String CATEGORIEID_ATTRIBUTE = "categorieId"; + private static final String MOVEID_ATTRIBUTE = "movieId"; private final MovieService movieService; private final CategorieService categorieService; private final UserService userService; private final FavoriteService favoriteService; + private final ViewedService viewedServise; private final ModelMapper modelMapper; @@ -50,12 +56,14 @@ public class MovieUserController { CategorieService categorieService, ModelMapper modelMapper, UserService userService, - FavoriteService favoriteService) { + FavoriteService favoriteService, + ViewedService viewedServise) { this.modelMapper = modelMapper; this.categorieService = categorieService; this.movieService = movieService; this.userService = userService; this.favoriteService = favoriteService; + this.viewedServise = viewedServise; } private MovieDTO toDto(MovieEntity entity) { @@ -68,23 +76,53 @@ public class MovieUserController { return entity; } - @GetMapping() - public String getAll(@RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, - Model model) { - model.addAttribute("movies", - movieService.getAll(0, page, Constants.DEFUALT_PAGE_SIZE) - .stream() - .map(this::toDto) - .toList()); - model.addAttribute(CATEGORIEID_ATTRIBUTE, model); - model.addAttribute("categories", categorieService.getAll()); + private List getListMovieUserDTOs(Integer categorieId, int page) { + List movies = movieService.getAll(categorieId, page, Constants.DEFUALT_PAGE_SIZE) + .stream() + .map(this::toDto) + .toList(); + List muDTO = new ArrayList(); Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Integer currentUserId = userService.getCurrentUserId(authentication.getName()); List favs = favoriteService.getAll(currentUserId); + List viewes = viewedServise.getAll(currentUserId); - model.addAttribute("favorites", favs); + for (MovieDTO movieDTO : movies) { + MovieUserDTO newMovDto = new MovieUserDTO(); + newMovDto.setMovieDTO(movieDTO); + + for (FavoriteEntity favoriteEntity : favs) { + if ((int) favoriteEntity.getMovie().getId() == (int) movieDTO.getId()) { + newMovDto.setFavorite(true); + break; + } + newMovDto.setFavorite(false); + } + + for (ViewedEntity viewedEntity : viewes) { + if ((int) viewedEntity.getMovie().getId() == (int) movieDTO.getId()) { + newMovDto.setViewed(true); + break; + } + newMovDto.setViewed(false); + } + + muDTO.add(newMovDto); + } + return muDTO; + } + + @GetMapping() + public String getAll(@RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + Model model) { + List muDTO = getListMovieUserDTOs(0, page); + model.addAttribute("movies", muDTO); + model.addAttribute(CATEGORIEID_ATTRIBUTE, model); + model.addAttribute("categories", categorieService.getAll()); + + model.addAttribute(PAGE_ATTRIBUTE, page); model.addAttribute(CATEGORIEID_ATTRIBUTE, 0); return MOVIE_VIEW; } @@ -93,27 +131,53 @@ public class MovieUserController { public String getAll(@PathVariable(name = "id") Integer categorieId, @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, Model model) { - model.addAttribute("movies", - movieService.getAll(categorieId, page, Constants.DEFUALT_PAGE_SIZE) - .stream() - .map(this::toDto) - .toList()); + List muDTO = getListMovieUserDTOs(categorieId, page); + model.addAttribute("movies", muDTO); model.addAttribute("categories", categorieService.getAll()); + model.addAttribute(PAGE_ATTRIBUTE, page); + model.addAttribute(CATEGORIEID_ATTRIBUTE, categorieId); + + return MOVIE_VIEW; + } + + @PostMapping("/changeFavStatus/{id}") + public String changeFavStatus(@PathVariable(name = "id") Integer movieId, + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + Model model) { + + boolean isFavorite = false; + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Integer currentUserId = userService.getCurrentUserId(authentication.getName()); - List favs = favoriteService.getAll(currentUserId); + FavoriteEntity fav = favoriteService.findByUserIdAndMovieId(currentUserId, movieId); + + if (fav == null) { + isFavorite = false; + } else { + isFavorite = true; + } + + if (isFavorite == false) { + + UserEntity user = userService.get(currentUserId); + MovieEntity movie = movieService.get(movieId); + + FavoriteEntity newFav = new FavoriteEntity(null, user, movie); + + favoriteService.create(newFav); + + } else { + + FavoriteEntity delFav = favoriteService.findByUserIdAndMovieId(currentUserId, movieId); + + favoriteService.delete(delFav.getId()); + } - model.addAttribute("favorites", favs); model.addAttribute(PAGE_ATTRIBUTE, page); - model.addAttribute(CATEGORIEID_ATTRIBUTE, categorieId); - return MOVIE_VIEW; - } - @GetMapping("/addToFavorite/{id}") - public String changeStatusForFavorite() { return Constants.REDIRECT_VIEW + URL; } diff --git a/backend/src/main/java/com/example/backend/movies/api/MovieUserDTO.java b/backend/src/main/java/com/example/backend/movies/api/MovieUserDTO.java new file mode 100644 index 0000000..ac1f403 --- /dev/null +++ b/backend/src/main/java/com/example/backend/movies/api/MovieUserDTO.java @@ -0,0 +1,39 @@ +package com.example.backend.movies.api; + +import jakarta.validation.constraints.NotBlank; + +public class MovieUserDTO { + + MovieDTO movieDTO; + + @NotBlank + private boolean isFavorite; + + @NotBlank + private boolean isViewed; + + public MovieDTO getMovieDTO() { + return movieDTO; + } + + public void setMovieDTO(MovieDTO movieDTO) { + this.movieDTO = movieDTO; + } + + public boolean isFavorite() { + return isFavorite; + } + + public void setFavorite(boolean isFavorite) { + this.isFavorite = isFavorite; + } + + public boolean isViewed() { + return isViewed; + } + + public void setViewed(boolean isViewed) { + this.isViewed = isViewed; + } + +} diff --git a/backend/src/main/java/com/example/backend/movies/service/MovieService.java b/backend/src/main/java/com/example/backend/movies/service/MovieService.java index 163cfd1..1789034 100644 --- a/backend/src/main/java/com/example/backend/movies/service/MovieService.java +++ b/backend/src/main/java/com/example/backend/movies/service/MovieService.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.example.backend.core.errors.NotFoundException; +import com.example.backend.favorites.repository.FavoriteRepository; import com.example.backend.movies.model.MovieEntity; import com.example.backend.movies.repository.MovieRepository; @@ -14,9 +15,11 @@ import com.example.backend.movies.repository.MovieRepository; public class MovieService { private final MovieRepository repository; + private final FavoriteRepository favoriteRepository; - public MovieService(MovieRepository repository) { + public MovieService(MovieRepository repository, FavoriteRepository favoriteRepository) { this.repository = repository; + this.favoriteRepository = favoriteRepository; } private void checkName(String name) { @@ -67,6 +70,7 @@ public class MovieService { @Transactional public MovieEntity delete(Integer id) { final MovieEntity exisEntity = get(id); + favoriteRepository.deleteByMovieId(exisEntity.getId()); repository.delete(exisEntity); return exisEntity; } diff --git a/backend/src/main/resources/templates/movies.html b/backend/src/main/resources/templates/movies.html index 8495ce5..9e63504 100644 --- a/backend/src/main/resources/templates/movies.html +++ b/backend/src/main/resources/templates/movies.html @@ -91,83 +91,37 @@

Данные отсутствуют

- - - -
+
-
+
-
- -

- д етить колотить -

+
+ + +
- -
- - - - -
-
-
+
+
- - - - - -