Skip to content

Commit

Permalink
feat: 영화 JPA 인터페이스 및 영화 인터페이스 JPA 구현체 추가
Browse files Browse the repository at this point in the history
Related to: #139
Ref: #136
  • Loading branch information
hgh1472 committed Oct 20, 2024
1 parent 6edc29a commit ac98539
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package core.application.movies.repositories.movie.jpa;

import java.util.List;
import java.util.Optional;

import org.springframework.context.annotation.Profile;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Repository;

import core.application.movies.models.entities.CachedMovieEntity;
import core.application.movies.repositories.movie.CachedMovieRepository;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Repository
@Profile("jpa")
public class CachedMovieRepositoryJPAImpl implements CachedMovieRepository {

private final JpaCachedMovieRepository jpaCachedMovieRepository;

@Override
public CachedMovieEntity saveNewMovie(CachedMovieEntity movie) {
return jpaCachedMovieRepository.save(movie);
}

@Override
public Optional<CachedMovieEntity> findByMovieId(String movieId) {
return jpaCachedMovieRepository.findById(movieId);
}

@Override
public List<CachedMovieEntity> selectOnDibOrderDescend() {
return jpaCachedMovieRepository.findAllOrderBy(Sort.by(Sort.Direction.DESC, "dibCount"));
}

@Override
public List<CachedMovieEntity> selectOnDibOrderDescend(int num) {
return jpaCachedMovieRepository.findOrderBy(PageRequest.of(0, num, Sort.by(Sort.Direction.DESC, "dibCount")));
}

@Override
public List<CachedMovieEntity> selectOnAVGRatingDescend() {
return jpaCachedMovieRepository.findAllOrderByAvgRating();
}

@Override
public List<CachedMovieEntity> selectOnAVGRatingDescend(int num) {
return jpaCachedMovieRepository.findTopXOrderByAvgRating(PageRequest.of(0, num));
}

@Override
public List<CachedMovieEntity> selectOnReviewCountDescend(int num) {
return jpaCachedMovieRepository.findOrderBy(PageRequest.of(0, num, Sort.by(Sort.Direction.DESC, "reviewCount")));
}

@Override
public List<CachedMovieEntity> findMoviesOnRatingDescendWithGenre(int offset, String genre) {
return List.of();
}

@Override
public Page<CachedMovieEntity> findMoviesLikeGenreOrderByAvgRating(int page, String genre) {
return jpaCachedMovieRepository.findByGenreOrderByAvgRating(genre, PageRequest.of(page, 10));
}

/**
* Mybatis 구현체 사용 메서드이므로 JPA 구현체의 경우 구현 X
*/
@Override
public int countGenreMovie(String genre) {
return 0;
}

@Override
public CachedMovieEntity editMovie(String movieId, CachedMovieEntity replacement) {
return jpaCachedMovieRepository.save(replacement);
}

@Override
public void deleteMovie(String movieId) {
jpaCachedMovieRepository.deleteById(movieId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package core.application.movies.repositories.movie.jpa;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import core.application.movies.models.entities.CachedMovieEntity;

public interface JpaCachedMovieRepository extends JpaRepository<CachedMovieEntity, String> {

List<CachedMovieEntity> findAllOrderBy(Sort sort);

List<CachedMovieEntity> findOrderBy(Pageable pageable);

@Query("select m from CachedMovieEntity m order by (m.sumOfRating / m.commentCount) desc")
List<CachedMovieEntity> findAllOrderByAvgRating();

@Query("select m from CachedMovieEntity m order by (m.sumOfRating / m.commentCount) desc")
List<CachedMovieEntity> findTopXOrderByAvgRating(Pageable pageable);

@Query("select m from CachedMovieEntity m where m.genre like %:genre% order by (m.sumOfRating / m.commentCount) desc")
Page<CachedMovieEntity> findByGenreOrderByAvgRating(String genre, Pageable pageable);
}

0 comments on commit ac98539

Please sign in to comment.