diff --git a/src/main/java/tavebalak/OTTify/program/controller/ProgramChoiceController.java b/src/main/java/tavebalak/OTTify/program/controller/ProgramChoiceController.java index a3ca97c5..3e346995 100644 --- a/src/main/java/tavebalak/OTTify/program/controller/ProgramChoiceController.java +++ b/src/main/java/tavebalak/OTTify/program/controller/ProgramChoiceController.java @@ -20,7 +20,7 @@ @RestController @RequiredArgsConstructor -@Api(tags = {"프로그램 좋아요 및 관심없어요 지정"}) +@Api(tags = {"프로그램 좋아요 및 관심없어요 지정 컨트롤러"}) public class ProgramChoiceController { diff --git a/src/main/java/tavebalak/OTTify/program/controller/ProgramDetailsController.java b/src/main/java/tavebalak/OTTify/program/controller/ProgramDetailsController.java index 51dcc44c..09b21ac0 100644 --- a/src/main/java/tavebalak/OTTify/program/controller/ProgramDetailsController.java +++ b/src/main/java/tavebalak/OTTify/program/controller/ProgramDetailsController.java @@ -7,26 +7,52 @@ import org.springframework.http.HttpStatus; 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.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import tavebalak.OTTify.common.BaseResponse; +import tavebalak.OTTify.error.ErrorCode; +import tavebalak.OTTify.error.exception.UnauthorizedException; +import tavebalak.OTTify.oauth.jwt.SecurityUtil; import tavebalak.OTTify.program.dto.programDetails.Response.ProgramResponseDto; +import tavebalak.OTTify.program.dto.response.UserSpecificRatingResponseDto; import tavebalak.OTTify.program.service.ProgramDetailsShowService; +import tavebalak.OTTify.user.entity.User; +import tavebalak.OTTify.user.repository.UserRepository; @RestController @RequiredArgsConstructor +@RequestMapping("/api/v1/program/{programId}") @Api(tags = {"프로그램에 대한 상세정보 컨트롤러"}) public class ProgramDetailsController { private final ProgramDetailsShowService programDetailsShowService; + private final UserRepository userRepository; + @ApiOperation(value = "프로그램에 대한 상세 정보 보기", notes = "프로그램에 대한 상세 정보를 받아옵니다") @ApiImplicitParam(name = "programId", dataType = "long", value = "프로그램 ID", required = true, paramType = "path") - @GetMapping("/api/v1/program/{programId}/details") + @GetMapping("/details") @ResponseStatus(HttpStatus.OK) public BaseResponse getProgramDetails( @PathVariable("programId") Long programId) { return BaseResponse.success(programDetailsShowService.showDetails(programId)); } + + @ApiOperation(value = "자신의 취향에 맞는 사람들의 리뷰의 평균 별점 및 현재 자신의 첫번째 장르 보여주기", notes = "자신의 취향에 맞는 사람들의 리뷰의 평균 별점, 첫번째 장르를 보여줍니다") + @ApiImplicitParam(name = "programId", dataType = "long", value = "현재 프로그램의 ID", required = true, paramType = "path") + @GetMapping("/user/specific/rating") + @ResponseStatus(HttpStatus.OK) + public BaseResponse showUserSpecificReviewRating( + @PathVariable("programId") Long programId) { + User findUser = getUser(); + return BaseResponse.success( + programDetailsShowService.showUserSpecificRating(findUser, programId)); + } + + private User getUser() { + return userRepository.findByEmail(SecurityUtil.getCurrentEmail().get()) + .orElseThrow(() -> new UnauthorizedException(ErrorCode.UNAUTHORIZED)); + } } diff --git a/src/main/java/tavebalak/OTTify/program/dto/response/UserSpecificRatingResponseDto.java b/src/main/java/tavebalak/OTTify/program/dto/response/UserSpecificRatingResponseDto.java new file mode 100644 index 00000000..7ac39011 --- /dev/null +++ b/src/main/java/tavebalak/OTTify/program/dto/response/UserSpecificRatingResponseDto.java @@ -0,0 +1,17 @@ +package tavebalak.OTTify.program.dto.response; + +import lombok.Getter; + +@Getter +public class UserSpecificRatingResponseDto { + + private String usersFirstGenreName; + private String usersFirstGenreProgramRating; + + public UserSpecificRatingResponseDto(String usersFirstGenreName, + double usersFirstGenreProgramRating) { + this.usersFirstGenreName = usersFirstGenreName; + this.usersFirstGenreProgramRating = String.format("%.1f", usersFirstGenreProgramRating); + } + +} diff --git a/src/main/java/tavebalak/OTTify/program/service/ProgramDetailsShowService.java b/src/main/java/tavebalak/OTTify/program/service/ProgramDetailsShowService.java index cb18cfeb..580347db 100644 --- a/src/main/java/tavebalak/OTTify/program/service/ProgramDetailsShowService.java +++ b/src/main/java/tavebalak/OTTify/program/service/ProgramDetailsShowService.java @@ -1,7 +1,12 @@ package tavebalak.OTTify.program.service; import tavebalak.OTTify.program.dto.programDetails.Response.ProgramResponseDto; +import tavebalak.OTTify.program.dto.response.UserSpecificRatingResponseDto; +import tavebalak.OTTify.user.entity.User; public interface ProgramDetailsShowService { - ProgramResponseDto showDetails(Long programId); + + ProgramResponseDto showDetails(Long programId); + + UserSpecificRatingResponseDto showUserSpecificRating(User user, Long programId); } diff --git a/src/main/java/tavebalak/OTTify/program/service/ProgramDetailsShowServiceImpl.java b/src/main/java/tavebalak/OTTify/program/service/ProgramDetailsShowServiceImpl.java index 67b4b629..c331ef93 100644 --- a/src/main/java/tavebalak/OTTify/program/service/ProgramDetailsShowServiceImpl.java +++ b/src/main/java/tavebalak/OTTify/program/service/ProgramDetailsShowServiceImpl.java @@ -13,7 +13,9 @@ import org.springframework.web.reactive.function.client.WebClient.RequestHeadersUriSpec; import tavebalak.OTTify.error.ErrorCode; import tavebalak.OTTify.error.exception.NotFoundException; +import tavebalak.OTTify.genre.entity.Genre; import tavebalak.OTTify.genre.repository.GenreRepository; +import tavebalak.OTTify.genre.repository.UserGenreRepository; import tavebalak.OTTify.program.dto.programDetails.Response.ProgramDetailResponse; import tavebalak.OTTify.program.dto.programDetails.Response.ProgramProviderListResponseDto; import tavebalak.OTTify.program.dto.programDetails.Response.ProgramProviderResponseDto; @@ -25,11 +27,14 @@ import tavebalak.OTTify.program.dto.programDetails.openApiRequest.programDetailRequest.OATvDetailsDto; import tavebalak.OTTify.program.dto.programDetails.openApiRequest.providerDetails.OACountryDetailsDto; import tavebalak.OTTify.program.dto.programDetails.openApiRequest.providerDetails.OAProgramProviderDto; +import tavebalak.OTTify.program.dto.response.UserSpecificRatingResponseDto; import tavebalak.OTTify.program.entity.Ott; import tavebalak.OTTify.program.entity.Program; import tavebalak.OTTify.program.entity.ProgramType; import tavebalak.OTTify.program.repository.OttRepository; import tavebalak.OTTify.program.repository.ProgramRepository; +import tavebalak.OTTify.review.repository.ReviewRepository; +import tavebalak.OTTify.user.entity.User; @Service @Transactional(readOnly = true) @@ -40,6 +45,8 @@ public class ProgramDetailsShowServiceImpl implements ProgramDetailsShowService private final GenreRepository genreRepository; private final ProgramRepository programRepository; private final OttRepository ottRepository; + private final UserGenreRepository userGenreRepository; + private final ReviewRepository reviewRepository; @Override @@ -305,4 +312,29 @@ private ProgramProviderListResponseDto changeOTTtoKoreanAndMakeProviderResponseD .build(); } + + //user 의 first genre 에 맞춘 평점과 User 의 first Genre name을 함꼐 반환합니다. + + @Override + public UserSpecificRatingResponseDto showUserSpecificRating(User user, Long programId) { + Program program = programRepository.findById(programId) + .orElseThrow(() -> new NotFoundException(ErrorCode.PROGRAM_NOT_FOUND)); + + Genre usersFirstGenre = userGenreRepository.find1stGenreByUserIdFetchJoin(user.getId()) + .orElseThrow(() -> new NotFoundException(ErrorCode.USER_FIRST_GENRE_NOT_FOUND)) + .getGenre(); + + int userSpecificGenreCount = reviewRepository.countByGenreName(usersFirstGenre.getName(), + program); + + Double sumRating = reviewRepository.sumReviewRatingByGenreName(usersFirstGenre.getName(), + program); + + double userSpecificReviewRatingSum = (sumRating != null) ? sumRating : 0.0; + + double avg = + userSpecificGenreCount == 0 ? 0 : userSpecificReviewRatingSum / userSpecificGenreCount; + + return new UserSpecificRatingResponseDto(usersFirstGenre.getName(), avg); + } } diff --git a/src/main/java/tavebalak/OTTify/review/controller/ReviewShowProgramDetailController.java b/src/main/java/tavebalak/OTTify/review/controller/ReviewShowProgramDetailController.java index 1349c7a7..5de261e1 100644 --- a/src/main/java/tavebalak/OTTify/review/controller/ReviewShowProgramDetailController.java +++ b/src/main/java/tavebalak/OTTify/review/controller/ReviewShowProgramDetailController.java @@ -19,16 +19,16 @@ import tavebalak.OTTify.error.ErrorCode; import tavebalak.OTTify.error.exception.UnauthorizedException; import tavebalak.OTTify.oauth.jwt.SecurityUtil; +import tavebalak.OTTify.review.dto.reviewresponse.FourReviewResponseWithCounts; import tavebalak.OTTify.review.dto.reviewresponse.ReviewProgramResponseDto; -import tavebalak.OTTify.review.dto.reviewresponse.ReviewResponseDtoList; import tavebalak.OTTify.review.service.ReviewShowProgramDetailService; import tavebalak.OTTify.user.entity.User; import tavebalak.OTTify.user.repository.UserRepository; @RestController @RequiredArgsConstructor -@RequestMapping("/api/v1/{programId}") -@Api(tags = {"프로그램 상세 페이지에서 리뷰 보여주기"}) +@RequestMapping("/api/v1/reviews/{programId}") +@Api(tags = {"프로그램 상세 페이지에서 리뷰 보여주는 컨트롤러"}) public class ReviewShowProgramDetailController { @@ -49,21 +49,21 @@ public BaseResponse showMyReview( @ApiOperation(value = "프로그램 페이지의 초기 리뷰 보여주기", notes = "프로그램 페이지의 처음 4개의 리뷰를 보여줍니다") @ApiImplicitParam(name = "programId", dataType = "long", value = "현재 프로그램의 ID", required = true, paramType = "path") - @GetMapping("/normal/reviews/count/4") + @GetMapping("/normal/count/4") @ResponseStatus(HttpStatus.OK) - public BaseResponse show4ReviewList( + public BaseResponse show4ReviewList( @PathVariable("programId") Long programId) { return BaseResponse.success(reviewShowProgramDetailService.show4Review(programId)); } @ApiOperation(value = "전체 리뷰 리스트를 보여주기", notes = "전체 리뷰 리스트를 보여줍니다") @ApiImplicitParams({ - @ApiImplicitParam(name = "page", dataType = "int", value = "페이지 번호(0부터 시작)", defaultValue = "0", required = false, paramType = "query", example = "1"), - @ApiImplicitParam(name = "direction", dataType = "String", value = "내림차순과 오름차순", required = false, defaultValue = "DESC", paramType = "query", example = "Desc"), - @ApiImplicitParam(name = "sort", dataType = "String", value = "정렬기준(likeCounts,createdAt)", required = false, defaultValue = "likeCounts", paramType = "query", example = "createdAt"), - @ApiImplicitParam(name = "size", dataType = "int", value = "페이지당 아이템 갯수", defaultValue = "10", required = false, paramType = "query", example = "5") + @ApiImplicitParam(name = "page", dataType = "int", value = "페이지 번호(0부터 시작)", paramType = "query"), + @ApiImplicitParam(name = "direction", dataType = "String", value = "내림차순과 오름차순", paramType = "query"), + @ApiImplicitParam(name = "sort", dataType = "String", value = "정렬기준(likeCounts,createdAt)", paramType = "query"), + @ApiImplicitParam(name = "size", dataType = "int", value = "페이지당 아이템 갯수", paramType = "query") }) - @GetMapping("/normal/reviews") + @GetMapping("/normals") @ResponseStatus(HttpStatus.OK) public BaseResponse> showReviewListALL( @PathVariable("programId") Long programId, @@ -75,11 +75,11 @@ public BaseResponse> showReviewListALL( reviewShowProgramDetailService.showReviewList(programId, pageable)); } - @ApiOperation(value = "프로그램 페이지의 자신의 취향에 맞는 장르 보여주기", notes = "자신의 취향에 맞는 좋아요 순 처음 4개의 리뷰를 보여줍니다") + @ApiOperation(value = "프로그램 페이지의 자신의 취향에 맞는 리뷰 4개 보여주기", notes = "자신의 취향에 맞는 좋아요 순 처음 4개의 리뷰를 보여줍니다") @ApiImplicitParam(name = "programId", dataType = "long", value = "현재 프로그램의 ID", required = true, paramType = "path", example = "1") - @GetMapping("/user/specific/reviews/count/4") + @GetMapping("/user/specific/count/4") @ResponseStatus(HttpStatus.OK) - public BaseResponse show4UserSpecificReviewList( + public BaseResponse show4UserSpecificReviewList( @PathVariable("programId") Long programId) { User findUser = getUser(); return BaseResponse.success( @@ -87,14 +87,14 @@ public BaseResponse show4UserSpecificReviewList( } - @ApiOperation(value = "사용자의 취향에 맞는 전체 장르 리스트를 보여주기", notes = "전체 장르 리스트를 보여줍니다") + @ApiOperation(value = "사용자의 취향에 맞는 전체 리뷰 리스트를 보여주기", notes = "자신의 취향에 맞는 리뷰 리스트를 보여줍니다") @ApiImplicitParams({ - @ApiImplicitParam(name = "page", dataType = "int", value = "페이지 번호(0부터 시작)", defaultValue = "0", required = false, paramType = "query", example = "1"), - @ApiImplicitParam(name = "direction", dataType = "String", value = "내림차순과 오름차순", required = false, defaultValue = "DESC", paramType = "query", example = "Desc"), - @ApiImplicitParam(name = "sort", dataType = "String", value = "정렬기준(likeCounts,createdAt)", required = false, defaultValue = "likeCounts", paramType = "query", example = "createdAt"), - @ApiImplicitParam(name = "size", dataType = "int", value = "페이지당 아이템 갯수", defaultValue = "10", required = false, paramType = "query", example = "5") + @ApiImplicitParam(name = "page", dataType = "int", value = "페이지 번호(0부터 시작)", paramType = "query"), + @ApiImplicitParam(name = "direction", dataType = "String", value = "내림차순과 오름차순", paramType = "query"), + @ApiImplicitParam(name = "sort", dataType = "String", value = "정렬기준(likeCounts,createdAt)", paramType = "query"), + @ApiImplicitParam(name = "size", dataType = "int", value = "페이지당 아이템 갯수", paramType = "query") }) - @GetMapping("/user/specific/reviews") + @GetMapping("/user/specifics") @ResponseStatus(HttpStatus.OK) public BaseResponse> showUserSpecificReviewListALL( @PathVariable("programId") Long programId, @@ -109,17 +109,6 @@ public BaseResponse> showUserSpecificReviewListA } - @ApiOperation(value = "자신의 취향에 맞는 사람들의 리뷰의 평균 별점 보여주기", notes = "자신의 취향에 맞는 사람들의 리뷰의 평균 별점 보여줍니다") - @ApiImplicitParam(name = "programId", dataType = "long", value = "현재 프로그램의 ID", required = true, paramType = "path") - @GetMapping("/user/specific/review/rating") - @ResponseStatus(HttpStatus.OK) - public BaseResponse showUserSpecificReviewRating( - @PathVariable("programId") Long programId) { - User findUser = getUser(); - return BaseResponse.success( - reviewShowProgramDetailService.showUserSpecificRating(findUser, programId)); - } - private User getUser() { return userRepository.findByEmail(SecurityUtil.getCurrentEmail().get()) .orElseThrow(() -> new UnauthorizedException(ErrorCode.UNAUTHORIZED)); diff --git a/src/main/java/tavebalak/OTTify/review/dto/reviewresponse/FourReviewResponseWithCounts.java b/src/main/java/tavebalak/OTTify/review/dto/reviewresponse/FourReviewResponseWithCounts.java new file mode 100644 index 00000000..dd9e6f69 --- /dev/null +++ b/src/main/java/tavebalak/OTTify/review/dto/reviewresponse/FourReviewResponseWithCounts.java @@ -0,0 +1,16 @@ +package tavebalak.OTTify.review.dto.reviewresponse; + +import lombok.Getter; + +@Getter +public class FourReviewResponseWithCounts { + + private ReviewResponseDtoList reviewResponseDtoList; + private int leftReviewCounts; + + public FourReviewResponseWithCounts(ReviewResponseDtoList reviewResponseDtoList, + int leftReviewCounts) { + this.reviewResponseDtoList = reviewResponseDtoList; + this.leftReviewCounts = leftReviewCounts; + } +} diff --git a/src/main/java/tavebalak/OTTify/review/repository/ReviewRepository.java b/src/main/java/tavebalak/OTTify/review/repository/ReviewRepository.java index 5940f682..30dbf4cd 100644 --- a/src/main/java/tavebalak/OTTify/review/repository/ReviewRepository.java +++ b/src/main/java/tavebalak/OTTify/review/repository/ReviewRepository.java @@ -13,6 +13,7 @@ import tavebalak.OTTify.user.entity.User; public interface ReviewRepository extends JpaRepository { + Slice findByUserIdOrderByCreatedAt(Long userId, Pageable pageable); boolean existsByProgramAndUser(Program program, User user); @@ -36,7 +37,7 @@ Slice findUserSpecificByProgramAndGenre(@Param("program") Program progra @Param("genre") String genre, Pageable pageable); @Query("select count(r) from Review r where r.genre=:genre and r.program=:program") - long countByMyGenreName(@Param("genre") String genre, @Param("program") Program program); + int countByGenreName(@Param("genre") String genre, @Param("program") Program program); @Query("select sum(r.rating) from Review r where r.genre=:genre and r.program=:program") Double sumReviewRatingByGenreName(@Param("genre") String genreName, diff --git a/src/main/java/tavebalak/OTTify/review/service/ReviewShowProgramDetailService.java b/src/main/java/tavebalak/OTTify/review/service/ReviewShowProgramDetailService.java index 02378170..520e0c92 100644 --- a/src/main/java/tavebalak/OTTify/review/service/ReviewShowProgramDetailService.java +++ b/src/main/java/tavebalak/OTTify/review/service/ReviewShowProgramDetailService.java @@ -2,24 +2,22 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; +import tavebalak.OTTify.review.dto.reviewresponse.FourReviewResponseWithCounts; import tavebalak.OTTify.review.dto.reviewresponse.ReviewProgramResponseDto; -import tavebalak.OTTify.review.dto.reviewresponse.ReviewResponseDtoList; import tavebalak.OTTify.user.entity.User; public interface ReviewShowProgramDetailService { ReviewProgramResponseDto showMyReview(User user, Long programId); - ReviewResponseDtoList show4Review(Long programId); + FourReviewResponseWithCounts show4Review(Long programId); Slice showReviewList(Long programId, Pageable pageable); - ReviewResponseDtoList show4UserSpecificReviewList(User user, Long programId); + FourReviewResponseWithCounts show4UserSpecificReviewList(User user, Long programId); Slice showUserSpecificReviewList(User user, Long programId, Pageable pageable); - String showUserSpecificRating(User user, Long programId); - } diff --git a/src/main/java/tavebalak/OTTify/review/service/ReviewShowProgramDetailServiceImpl.java b/src/main/java/tavebalak/OTTify/review/service/ReviewShowProgramDetailServiceImpl.java index 0ed84248..fb9b45b0 100644 --- a/src/main/java/tavebalak/OTTify/review/service/ReviewShowProgramDetailServiceImpl.java +++ b/src/main/java/tavebalak/OTTify/review/service/ReviewShowProgramDetailServiceImpl.java @@ -15,6 +15,7 @@ import tavebalak.OTTify.genre.repository.UserGenreRepository; import tavebalak.OTTify.program.entity.Program; import tavebalak.OTTify.program.repository.ProgramRepository; +import tavebalak.OTTify.review.dto.reviewresponse.FourReviewResponseWithCounts; import tavebalak.OTTify.review.dto.reviewresponse.ReviewProgramResponseDto; import tavebalak.OTTify.review.dto.reviewresponse.ReviewResponseDtoList; import tavebalak.OTTify.review.entity.Review; @@ -47,7 +48,7 @@ public ReviewProgramResponseDto showMyReview(User user, Long programId) { //상세페이지에서 4개의 장르 상관없는 좋아요 순 리뷰를 보여줍니다 @Override - public ReviewResponseDtoList show4Review(Long programId) { + public FourReviewResponseWithCounts show4Review(Long programId) { Program program = programRepository.findById(programId) .orElseThrow(() -> new NotFoundException(ErrorCode.PROGRAM_NOT_FOUND)); @@ -56,7 +57,10 @@ public ReviewResponseDtoList show4Review(Long programId) { program).stream().map(this::makeReviewDto).collect( Collectors.toList()); - return new ReviewResponseDtoList(reviewProgramResponseDtoList); + int leftReviewCounts = program.getReviewCount() - 4 > 0 ? program.getReviewCount() - 4 : 0; + + return new FourReviewResponseWithCounts( + new ReviewResponseDtoList(reviewProgramResponseDtoList), leftReviewCounts); } //모든 장르 상관 없는 리뷰 리스트를 Slice로 보여줍니다. @@ -75,7 +79,7 @@ public Slice showReviewList(Long programId, Pageable p @Override - public ReviewResponseDtoList show4UserSpecificReviewList(User user, Long programId) { + public FourReviewResponseWithCounts show4UserSpecificReviewList(User user, Long programId) { Program program = programRepository.findById(programId) .orElseThrow(() -> new NotFoundException(ErrorCode.PROGRAM_NOT_FOUND)); @@ -88,7 +92,13 @@ public ReviewResponseDtoList show4UserSpecificReviewList(User user, Long program program, usersFirstGenre.getName(), PageRequest.of(0, 4)).stream() .map(r -> makeReviewDto(r)).collect(Collectors.toList()); - return new ReviewResponseDtoList(reviewProgramResponseDtoList); + int userSpecificGenreCount = reviewRepository.countByGenreName(usersFirstGenre.getName(), + program); + + int leftCount = userSpecificGenreCount - 4 > 0 ? userSpecificGenreCount - 4 : 0; + + return new FourReviewResponseWithCounts( + new ReviewResponseDtoList(reviewProgramResponseDtoList), leftCount); } @@ -112,38 +122,6 @@ public Slice showUserSpecificReviewList(User user, Lon } - //user 의 first genre 에 맞춘 평점을 보여줍니다. 지금 현재는 컨트롤러에서 사용하고 있지만 나중에 프로그램 상세 페이지에서 같이 넣으려고 합니다 - - @Override - public String showUserSpecificRating(User user, Long programId) { - Program program = programRepository.findById(programId) - .orElseThrow(() -> new NotFoundException(ErrorCode.PROGRAM_NOT_FOUND)); - - Genre usersFirstGenre = userGenreRepository.findByUserAndIsFirst(user, true) - .orElseThrow(() -> new NotFoundException(ErrorCode.USER_FIRST_GENRE_NOT_FOUND)) - .getGenre(); - - long userSpecificGenreCount = reviewRepository.countByMyGenreName(usersFirstGenre.getName(), - program); - - Double sumRating = reviewRepository.sumReviewRatingByGenreName(usersFirstGenre.getName(), - program); - - double userSpecificReviewRatingSum = (sumRating != null) ? sumRating : 0.0; - - double avg; - - if (userSpecificGenreCount == 0) { - avg = 0; - } else { - avg = userSpecificReviewRatingSum / userSpecificGenreCount; - } - - String avgString = String.format("%.2f", avg); - - return avgString; - } - //리뷰를 이용해 리뷰 DTO를 만듭니다 private ReviewProgramResponseDto makeReviewDto(Review review) { diff --git a/src/test/java/tavebalak/OTTify/review/ReviewShowProgramDetailServiceImplTest.java b/src/test/java/tavebalak/OTTify/review/ReviewShowProgramDetailServiceImplTest.java index 196363b7..743cbb1e 100644 --- a/src/test/java/tavebalak/OTTify/review/ReviewShowProgramDetailServiceImplTest.java +++ b/src/test/java/tavebalak/OTTify/review/ReviewShowProgramDetailServiceImplTest.java @@ -10,9 +10,11 @@ import org.springframework.transaction.annotation.Transactional; import tavebalak.OTTify.genre.entity.Genre; import tavebalak.OTTify.genre.repository.GenreRepository; +import tavebalak.OTTify.program.dto.response.UserSpecificRatingResponseDto; import tavebalak.OTTify.program.entity.Program; import tavebalak.OTTify.program.entity.ProgramType; import tavebalak.OTTify.program.repository.ProgramRepository; +import tavebalak.OTTify.program.service.ProgramDetailsShowService; import tavebalak.OTTify.review.dto.reviewrequest.ReviewSaveDto; import tavebalak.OTTify.review.entity.Review; import tavebalak.OTTify.review.repository.ReviewRepository; @@ -54,11 +56,14 @@ class ReviewShowProgramDetailServiceImplTest { @Autowired ReviewShowProgramDetailService reviewShowProgramDetailService; + @Autowired + ProgramDetailsShowService programDetailsShowService; + //프로그램 별 장르 별점의 변화와 전체 장르 별점의 변화를 테스트하고 //user 의 평균 별점 변화를 테스트 합니다. @Test - @Rollback(value = false) + @Rollback(value = true) @Transactional void saveReview() { User user = makeUser(); @@ -134,8 +139,10 @@ void saveReview() { Assertions.assertThat(findReview3.getLikeCounts()).isEqualTo(1); - String avg = reviewShowProgramDetailService.showUserSpecificRating(user, program.getId()); - Assertions.assertThat(avg).isEqualTo("4.00"); + UserSpecificRatingResponseDto userSpecificRatingResponseDto = programDetailsShowService.showUserSpecificRating( + user, program.getId()); + Assertions.assertThat(userSpecificRatingResponseDto.getUsersFirstGenreProgramRating()) + .isEqualTo("4.0"); }