Skip to content

Commit

Permalink
[Refactor] 코스 조회 API 예외 처리 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
0-x-14 committed Jun 7, 2024
1 parent b4043ad commit 3dd0bff
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,30 +28,45 @@ public AnotherUserCourseService(CourseRepository courseRepository, UserRepositor

@Transactional
public FindAnotherUserCoursesReponseDTO getCoursesByAnotherUser(Long userId) {
// 다른 사용자의 코스 조회
try {
// 다른 사용자의 코스 조회
User anotherUser = userRepository.findUserByUserId(userId);
if (anotherUser == null) {
// 사용자를 찾을 수 없는 경우
return FindAnotherUserCoursesReponseDTO.builder()
.user(null)
.courses(new ArrayList<>())
.message("사용자 조회 과정에서 오류가 발생하였습니다").build();
}

User anotherUser = userRepository.findUserByUserId(userId);
List<Course> courses = courseRepository.findCoursesByUserUserId(userId);
List<Course> courses = courseRepository.findCoursesByUserUserId(userId);

if (courses.isEmpty()) {
// 비어 있는 경우, 응답 DTO에 메시지만 설정하여 반환
return FindAnotherUserCoursesReponseDTO.builder()
.user(anotherUser)
.courses(new ArrayList<>()) // 비어있는 list 반환
.message("아직 코스를 만들지 않은 사용자입니다!").build();
} // 조회된 코스가 없는 경우
// 댓글창에서 사용자를 누를 경우, 제작한 코스가 없는 경우도 있을 것이라고 판단해서 추가하였음

List<CourseDTO> coursesDTO = courses.stream()
.map(course -> {
String userNickname = course.getUser().getNickname();
return new CourseDTO(course.getCourseId(), course.getCourseName(), course.getCourseImage(), course.getCourseLike(), course.getTheme(), userNickname);
})
.collect(Collectors.toList());

if (courses.isEmpty()) {
// 비어 있는 경우, 응답 DTO에 메시지만 설정하여 반환
return FindAnotherUserCoursesReponseDTO.builder()
.user(anotherUser)
.courses(new ArrayList<>()) // 비어있는 list 반환
.message("아직 코스를 만들지 않은 사용자입니다!").build();
} // 조회된 코스가 없는 경우
// 댓글창에서 사용자를 누를 경우, 제작한 코스가 없는 경우도 있을 것이라고 판단해서 추가하였음

List<CourseDTO> coursesDTO = courses.stream()
.map(course -> {
String userNickname = course.getUser().getNickname();
return new CourseDTO(course.getCourseId(), course.getCourseName(), course.getCourseImage(), course.getCourseLike(), course.getTheme(), userNickname);
})
.collect(Collectors.toList());

return FindAnotherUserCoursesReponseDTO.builder()
.user(anotherUser)
.courses(coursesDTO)
.message("사용자 코스 조회 성공").build();
.courses(coursesDTO)
.message("사용자 코스 조회 성공").build();
} catch (Exception e) {
// 예외 처리
return FindAnotherUserCoursesReponseDTO.builder()
.user(null)
.courses(new ArrayList<>())
.message("사용자 코스 조회 중 오류가 발생했습니다.: " + e.getMessage()).build();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

Expand All @@ -31,77 +32,98 @@ public CourseService(CourseRepository courseRepository, LikeRepository likeRepos

@Transactional
public FindCoursesResponseDTO getCoursesByTheme(Integer theme) {
// 테마로 코스 조회

List<Course> courses = courseRepository.findCoursesByTheme(theme);

List<CourseDTO> coursesDTO = courses.stream()
.map(course -> {
String userNickname = course.getUser().getNickname();
return new CourseDTO(course.getCourseId(), course.getCourseName(), course.getCourseImage(), course.getCourseLike(), course.getTheme(), userNickname);
})
.collect(Collectors.toList());

return FindCoursesResponseDTO.builder()
.theme(theme)
.courses(coursesDTO)
.message("테마별 코스가 정상적으로 조회되었습니다.").build();
try {
// 테마로 코스 조회
List<Course> courses = courseRepository.findCoursesByTheme(theme);

List<CourseDTO> coursesDTO = courses.stream()
.map(course -> {
String userNickname = course.getUser().getNickname();
return new CourseDTO(course.getCourseId(), course.getCourseName(), course.getCourseImage(), course.getCourseLike(), course.getTheme(), userNickname);
})
.collect(Collectors.toList());

return FindCoursesResponseDTO.builder()
.theme(theme)
.courses(coursesDTO)
.message("테마별 코스가 정상적으로 조회되었습니다.").build();
} catch (Exception e) {
// 예외 처리
return FindCoursesResponseDTO.builder()
.theme(theme)
.courses(Collections.emptyList()) // 비어 있는 리스트 반환
.message("테마별 코스 조회 중 오류가 발생했습니다.: " + e.getMessage()).build();
}
}

@Transactional
public FindMyCoursesResponseDTO getCoursesByUser(Long userId) {
// 나만의 코스 조회
try {
// 나만의 코스 조회

List<Course> courses = courseRepository.findCoursesByUserUserId(userId);

if (courses.isEmpty()) {
// 비어 있는 경우, 응답 DTO에 메시지만 설정하여 반환
return FindMyCoursesResponseDTO.builder()
.userId(userId)
.courses(new ArrayList<>()) // 비어있는 list 반환
.message("나만의 코스 만들기").build();
} // 조회된 코스가 없는 경우

List<CourseDTO> myCoursesDTO = courses.stream()
.map(course -> {
String userNickname = course.getUser().getNickname();
return new CourseDTO(course.getCourseId(), course.getCourseName(), course.getCourseImage(), course.getCourseLike(), course.getTheme(), userNickname);
})
.collect(Collectors.toList());

List<Course> courses = courseRepository.findCoursesByUserUserId(userId);

if (courses.isEmpty()) {
// 비어 있는 경우, 응답 DTO에 메시지만 설정하여 반환
return FindMyCoursesResponseDTO.builder()
.userId(userId)
.courses(new ArrayList<>()) // 비어있는 list 반환
.message("나만의 코스 만들기").build();
} // 조회된 코스가 없는 경우

List<CourseDTO> myCoursesDTO = courses.stream()
.map(course -> {
String userNickname = course.getUser().getNickname();
return new CourseDTO(course.getCourseId(), course.getCourseName(), course.getCourseImage(), course.getCourseLike(), course.getTheme(), userNickname);
})
.collect(Collectors.toList());

return FindMyCoursesResponseDTO.builder()
.userId(userId)
.courses(myCoursesDTO)
.message("나만의 코스가 정상적으로 조회되었습니다.").build();
.courses(myCoursesDTO)
.message("나만의 코스가 정상적으로 조회되었습니다.").build();
} catch (Exception e) {
// 예외 처리
return FindMyCoursesResponseDTO.builder()
.userId(userId)
.courses(new ArrayList<>()) // 비어있는 list로 초기화
.message("나만의 코스 조회 중 오류가 발생했습니다.: " + e.getMessage()).build();
}
}

@Transactional
public FindMyLikedCoursesResponseDTO getLikedCoursesByUser(Long userId) {
// 내가 찜한 코스 조회

List<Like> likes = likeRepository.findLikeByUserId(userId);
try {
// 내가 찜한 코스 조회

List<Like> likes = likeRepository.findLikeByUserId(userId);

if (likes.isEmpty()) {
// 비어 있는 경우, 응답 DTO에 메시지만 설정하여 반환
return FindMyLikedCoursesResponseDTO.builder()
.userId(userId)
.courses(new ArrayList<>()) // 비어있는 list 반환
.message("찜한 코스가 없습니다.").build();
} // 조회된 코스가 없는 경우

List<CourseDTO> likedCoursesDTO = likes.stream()
.map(like -> {
Course course = like.getCourse();
String userNickname = course.getUser().getNickname(); // 해당 course가 참조하는 user의 nickname, 즉 코스를 만든 사람의 닉네임을 가져옴
return new CourseDTO(course.getCourseId(), course.getCourseName(), course.getCourseImage(), course.getCourseLike(), course.getTheme(), userNickname);
})
.collect(Collectors.toList());

if (likes.isEmpty()) {
// 비어 있는 경우, 응답 DTO에 메시지만 설정하여 반환
return FindMyLikedCoursesResponseDTO.builder()
.userId(userId)
.courses(new ArrayList<>()) // 비어있는 list 반환
.message("찜한 코스가 없습니다.").build();
} // 조회된 코스가 없는 경우

List<CourseDTO> likedCoursesDTO = likes.stream()
.map(like -> {
Course course = like.getCourse();
String userNickname = course.getUser().getNickname(); // 해당 course가 참조하는 user의 nickname, 즉 코스를 만든 사람의 닉네임을 가져옴
return new CourseDTO(course.getCourseId(), course.getCourseName(), course.getCourseImage(), course.getCourseLike(), course.getTheme(), userNickname);
})
.collect(Collectors.toList());

return FindMyLikedCoursesResponseDTO.builder()
.userId(userId)
.courses(likedCoursesDTO)
.message("찜한 코스가 정상적으로 조회되었습니다.").build();

// 다른 코스 조회 API들처럼 courses(courses)로 처리할 경우 HttpMessageConversionException 문제가 발생하므로 DTO를 만들어서 처리했음
.courses(likedCoursesDTO)
.message("찜한 코스가 정상적으로 조회되었습니다.").build();
} catch (Exception e) {
// 예외 처리
return FindMyLikedCoursesResponseDTO.builder()
.userId(userId)
.courses(new ArrayList<>()) // 비어있는 list로 초기화
.message("찜한 코스 조회 중 오류가 발생했습니다.: " + e.getMessage()).build();
}
}
}

0 comments on commit 3dd0bff

Please sign in to comment.