diff --git a/src/main/java/khu/bigdata/infou/business/LectureConverter.java b/src/main/java/khu/bigdata/infou/business/LectureConverter.java index 55206b2..9200bab 100644 --- a/src/main/java/khu/bigdata/infou/business/LectureConverter.java +++ b/src/main/java/khu/bigdata/infou/business/LectureConverter.java @@ -86,8 +86,8 @@ public static LectureResponseDTO.LectureDetailDto toLectureDetailDto(LectureUdem public static LectureResponseDTO.OtherStudentsListInfo toOtherStudentInfo(PlatformStudent student) { return LectureResponseDTO.OtherStudentsListInfo.builder() - .inflearnUserId(Long.valueOf(student.getInflearnUserId())) - .udemyUserId(Long.valueOf(student.getUdemyUserId())) + .inflearnUserId(student.getInflearnUserId() != null ? student.getInflearnUserId() : null) + .udemyUserId(student.getUdemyUserId() != null ? student.getUdemyUserId() : null) .name(student.getName()) .topword1(student.getTopword1()) .topword2(student.getTopword2()) diff --git a/src/main/java/khu/bigdata/infou/implement/LectureService.java b/src/main/java/khu/bigdata/infou/implement/LectureService.java index d087aae..688da6e 100644 --- a/src/main/java/khu/bigdata/infou/implement/LectureService.java +++ b/src/main/java/khu/bigdata/infou/implement/LectureService.java @@ -2,6 +2,7 @@ import khu.bigdata.infou.business.LectureConverter; import khu.bigdata.infou.domain.LectureDetail; +import khu.bigdata.infou.domain.LectureInflearn; import khu.bigdata.infou.domain.LectureUdemy; import khu.bigdata.infou.domain.PlatformStudent; import khu.bigdata.infou.repository.LectureDetailRepository; @@ -11,11 +12,8 @@ import khu.bigdata.infou.web.dto.LectureResponseDTO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -37,11 +35,37 @@ public class LectureService { public LectureResponseDTO.CategoryRecommendLectureDto findRecommendedLectureByCategory(String category) { if (category == null) { - // 카테고리 프로그래밍 언어로 고정해서 가져와라 + // default category(udemy) category = "Programming Languages"; } + + //inflearn 강좌 조회 추가 + + // default category(inflearn) + String categoryInflearn = "프로그래밍 언어"; + + String firstCategory = null; + String secondCategory = null; + + categoryInflearn = switch (category) { + case "Programming Languages" -> "프로그래밍 언어"; + case "Web Development" -> "웹 개발"; + case "Game Development" -> "게임 개발"; + case "Mobile Development" -> "모바일 개발"; + case "Data Science" -> "데이터 사이언스"; + default -> categoryInflearn; + }; + + String[] parts = categoryInflearn.split(" "); + if (parts.length == 2) { + firstCategory = parts[0]; + secondCategory = parts[1]; + } + List lectureUdemyList = lectureUdemyRepository.findAllBySubcategory(category); + List lectureInflearnList = lectureInflearnRepository.findAllByFirstCategoryAndSecondCategory(firstCategory, secondCategory); + // 일단 가져오고 상위 값 추출 List sortedList = lectureUdemyList.stream() .sorted(Comparator.comparingDouble((LectureUdemy lecture) -> lecture.getAvgRating() * lecture.getNumReviews()).reversed()) @@ -96,26 +120,12 @@ public LectureResponseDTO.LectureDetailDto findLectureDetail(Integer lectureId) */ public LectureResponseDTO.OtherStudentsDto findOtherStudents() { - Pageable pageable = PageRequest.of(0, 1000); - - // 쿼리 실행 - List topStudents = platformStudentRepository.findTopStudents(pageable); - - // 조회된 데이터를 List로 변환 - List studentList = new ArrayList<>(); - for (Object[] result : topStudents) { - Integer userId = (Integer) result[0]; - List students; - if (userId != null) { - students = platformStudentRepository.findByInflearnUserId(userId); - if (students.isEmpty()) { - students = platformStudentRepository.findByUdemyUserId(userId); - } - } else { - students = new ArrayList<>(); - } - studentList.addAll(students); - } + List platformStudents = platformStudentRepository.findAllWithUdemyUserId(); + + // 가져온 데이터를 List로 변환 + List studentList = platformStudents.stream() + .limit(1000) // 상위 1000개로 제한 + .collect(Collectors.toList()); return LectureConverter.toOtherStudentsDto(studentList); } diff --git a/src/main/java/khu/bigdata/infou/repository/LectureInflearnRepository.java b/src/main/java/khu/bigdata/infou/repository/LectureInflearnRepository.java index fd4353f..ba99333 100644 --- a/src/main/java/khu/bigdata/infou/repository/LectureInflearnRepository.java +++ b/src/main/java/khu/bigdata/infou/repository/LectureInflearnRepository.java @@ -3,9 +3,12 @@ import khu.bigdata.infou.domain.LectureInflearn; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.Optional; public interface LectureInflearnRepository extends JpaRepository { Optional findByLectureId(Integer lectureId); + + List findAllByFirstCategoryAndSecondCategory(String firstCategory, String secondCategory); } diff --git a/src/main/java/khu/bigdata/infou/repository/PlatformStudentRepository.java b/src/main/java/khu/bigdata/infou/repository/PlatformStudentRepository.java index 392eef6..5999329 100644 --- a/src/main/java/khu/bigdata/infou/repository/PlatformStudentRepository.java +++ b/src/main/java/khu/bigdata/infou/repository/PlatformStudentRepository.java @@ -1,22 +1,13 @@ package khu.bigdata.infou.repository; import khu.bigdata.infou.domain.PlatformStudent; -import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import java.util.List; public interface PlatformStudentRepository extends JpaRepository { - - @Query("SELECT p.inflearnUserId AS userId, COUNT(p) AS cnt FROM PlatformStudent p WHERE p.inflearnUserId IS NOT NULL GROUP BY p.inflearnUserId " + - "UNION " + - "SELECT p.udemyUserId AS userId, COUNT(p) AS cnt FROM PlatformStudent p WHERE p.udemyUserId IS NOT NULL GROUP BY p.udemyUserId " + - "ORDER BY cnt DESC") - List findTopStudents(Pageable pageable); - - List findByInflearnUserId(Integer userId); - - List findByUdemyUserId(Integer userId); + @Query("SELECT p FROM PlatformStudent p WHERE p.udemyUserId IS NOT NULL") + List findAllWithUdemyUserId(); } diff --git a/src/main/java/khu/bigdata/infou/web/dto/LectureResponseDTO.java b/src/main/java/khu/bigdata/infou/web/dto/LectureResponseDTO.java index a5513e0..526f5cb 100644 --- a/src/main/java/khu/bigdata/infou/web/dto/LectureResponseDTO.java +++ b/src/main/java/khu/bigdata/infou/web/dto/LectureResponseDTO.java @@ -105,8 +105,8 @@ public static class LectureDetailDto { @AllArgsConstructor public static class OtherStudentsListInfo { - private Long inflearnUserId; - private Long udemyUserId; + private Integer inflearnUserId; + private Integer udemyUserId; private String name; private String topword1;