Skip to content

Commit

Permalink
Merge pull request #9 from DS-UMC-7th/Feat/#8
Browse files Browse the repository at this point in the history
영화 평점순 / 개봉순의 역순으로 영화 응답하기
  • Loading branch information
7beunseo authored Nov 27, 2024
2 parents 7d76f81 + 6af1862 commit bc1d951
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/main/java/umc/moviein/converter/MovieConverter.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package umc.moviein.converter;

import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
import umc.moviein.domain.Movie;
import umc.moviein.domain.Preference;
Expand Down Expand Up @@ -65,4 +66,18 @@ public static MovieResponseDTO.GetMovieListResponseDTO toGetMovieListResponseDTO
.movieList(movieSummaryDTOList)
.build();
}

public static MovieResponseDTO.GetMovieListWithPageResponseDTO toGetMovieListWithPageResponseDTO(Page<Movie> moviePage) {
List<MovieSummaryDTO> movieSummaryDTOList = moviePage.stream()
.map(MovieConverter::toSummaryDTO).toList();

return MovieResponseDTO.GetMovieListWithPageResponseDTO.builder()
.isFirst(moviePage.isFirst())
.isLast(moviePage.isLast())
.totalPage(moviePage.getTotalPages())
.totalElements(moviePage.getTotalElements())
.listSize(movieSummaryDTOList.size())
.movieList(movieSummaryDTOList)
.build();
}
}
9 changes: 9 additions & 0 deletions src/main/java/umc/moviein/repository/MovieRepository.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package umc.moviein.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
Expand All @@ -14,5 +16,12 @@ public interface MovieRepository extends JpaRepository<Movie, Long> {
@Query("SELECT DISTINCT p.movie, p.createdAt FROM Preference p WHERE p.isLike = true ORDER BY p.createdAt DESC")
List<Movie> findMoviesByLatestLikes();

Page<Movie> findAllByOrderByOpenDtDesc(PageRequest of);

@Query("SELECT m FROM Movie m " +
"LEFT JOIN Review r ON m.id = r.movieId " +
"GROUP BY m.id " +
"ORDER BY AVG(r.rating) DESC")
Page<Movie> findMoviesOrderByAverageRatingDesc(Pageable pageable);
}

Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,6 @@ public interface MovieQueryService {
public Map<String, Object> getMoviesWithCursorPagination(Long cursor, int limit);
public MovieDetailDTO getMovieDetailById(Long id);
List<Movie> getMoviesOrderByLikeWithCursor();
Page<Movie> getMovieOrderByOpenDateDesc(int page, int limit);
Page<Movie> getMovieOrderByReviewRate(int page, int size);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
Expand Down Expand Up @@ -217,4 +219,15 @@ public List<Movie> getMoviesOrderByLikeWithCursor() {
LinkedHashMap::new))
.values());
}

@Override
public Page<Movie> getMovieOrderByOpenDateDesc(int page, int size) {
return movieRepository.findAllByOrderByOpenDtDesc(PageRequest.of(page, size));
}

@Override
public Page<Movie> getMovieOrderByReviewRate(int page, int size) {
Pageable pageable = PageRequest.of(page, size);
return movieRepository.findMoviesOrderByAverageRatingDesc(pageable);
}
}
22 changes: 22 additions & 0 deletions src/main/java/umc/moviein/web/controller/MovieController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import umc.moviein.apiPayload.ApiResponse;
import umc.moviein.converter.MovieConverter;
Expand Down Expand Up @@ -58,4 +59,25 @@ public ApiResponse<MovieResponseDTO.GetMovieListResponseDTO> getMoviesOrderByLik
List<Movie> movies = movieQueryService.getMoviesOrderByLikeWithCursor();
return ApiResponse.onSuccess(MovieConverter.toGetMovieListResponseDTO(movies));
}

@GetMapping("/order-open-date")
@Operation(summary = "개봉일 역순 조회",description = "개봉일 역순으로 영화를 조회합니다. page는 가져올 페이지, size는 한번에 가져올 양입니다.")
public ApiResponse<MovieResponseDTO.GetMovieListWithPageResponseDTO> getMovieOrderByOpenDateDesc(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size // 가져올 데이터 개수
) {
Page<Movie> movies = movieQueryService.getMovieOrderByOpenDateDesc(page, size);
return ApiResponse.onSuccess(MovieConverter.toGetMovieListWithPageResponseDTO(movies));

}

@GetMapping("/order-rate")
@Operation(summary = "평점 순 조회",description = "평점이 높은 영화 순으로 조회합니다. page는 가져올 페이지, size는 한번에 가져올 양입니다.")
public ApiResponse<MovieResponseDTO.GetMovieListWithPageResponseDTO> getMovieOrderByReviewRate(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size // 가져올 데이터 개수
) {
Page<Movie> movies = movieQueryService.getMovieOrderByReviewRate(page, size);
return ApiResponse.onSuccess(MovieConverter.toGetMovieListWithPageResponseDTO(movies));
}
}
13 changes: 13 additions & 0 deletions src/main/java/umc/moviein/web/dto/Movie/MovieResponseDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,17 @@ public class MovieResponseDTO {
public static class GetMovieListResponseDTO {
private List<MovieSummaryDTO> movieList;
}

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class GetMovieListWithPageResponseDTO {
List<MovieSummaryDTO> movieList;
Integer listSize;
Integer totalPage;
Long totalElements;
Boolean isFirst;
Boolean isLast;
}
}

0 comments on commit bc1d951

Please sign in to comment.