diff --git a/src/main/java/com/example/enjoy/controller/FavoriteCourseController.java b/src/main/java/com/example/enjoy/controller/FavoriteCourseController.java index a45067d..5208644 100644 --- a/src/main/java/com/example/enjoy/controller/FavoriteCourseController.java +++ b/src/main/java/com/example/enjoy/controller/FavoriteCourseController.java @@ -17,13 +17,17 @@ public class FavoriteCourseController { private final FavoriteCourseService favoriteCourseService; - @Operation(summary = "즐겨찾는 과목 추가", description = "학생의 즐겨찾는 과목을 추가합니다.") + @Operation(summary = "즐겨찾는 과목 추가", description = "학생의 즐겨찾는 과목을 최대 4개까지 한 번에 추가합니다.") @PostMapping("/add") - public ResponseEntity addFavoriteCourse( - @RequestParam String courseName, + public ResponseEntity addFavoriteCourses( + @RequestParam List courseNames, @RequestParam String studentId) { - favoriteCourseService.addFavoriteCourse(studentId, courseName); + if (courseNames == null || courseNames.isEmpty() || courseNames.size() > 4) { + return ResponseEntity.badRequest().build(); + } + + favoriteCourseService.addFavoriteCourses(studentId, courseNames); return ResponseEntity.ok().build(); } diff --git a/src/main/java/com/example/enjoy/dto/CourseDto.java b/src/main/java/com/example/enjoy/dto/CourseDto.java index b15eedc..ad354fe 100644 --- a/src/main/java/com/example/enjoy/dto/CourseDto.java +++ b/src/main/java/com/example/enjoy/dto/CourseDto.java @@ -14,4 +14,7 @@ public class CourseDto { private String courseName; // 현재 과목명 private String courseAlias; // 과거 과목명 (없으면 null) + private String courseCode; + private String academicYear; + private String academicSemester; } \ No newline at end of file diff --git a/src/main/java/com/example/enjoy/service/FavoriteCourseService.java b/src/main/java/com/example/enjoy/service/FavoriteCourseService.java index 5c47c66..c947651 100644 --- a/src/main/java/com/example/enjoy/service/FavoriteCourseService.java +++ b/src/main/java/com/example/enjoy/service/FavoriteCourseService.java @@ -21,22 +21,22 @@ public class FavoriteCourseService { private final UserRepository userRepository; @Transactional - public void addFavoriteCourse(String studentId, String courseName) { + public void addFavoriteCourses(String studentId, List courseNames) { User user = userRepository.findByStudentId(studentId) .orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다.")); + for (String courseName : courseNames) { + TrackCourse trackCourse = trackCourseRepository.findByCourseName(courseName) + .orElseThrow(() -> new RuntimeException("과목을 찾을 수 없습니다.")); - TrackCourse trackCourse = trackCourseRepository.findByCourseName(courseName) - .orElseThrow(() -> new RuntimeException("과목을 찾을 수 없습니다.")); + boolean alreadyExists = favoriteCourseRepository + .findByUserAndCourseName(user, courseName) + .isPresent(); - // 이미 즐겨찾기한 과목인지 확인 - boolean alreadyExists = favoriteCourseRepository - .findByUserAndCourseName(user, courseName) - .isPresent(); - - if (!alreadyExists) { - FavoriteCourse favoriteCourse = new FavoriteCourse(user, trackCourse.getCourseName()); - favoriteCourseRepository.save(favoriteCourse); + if (!alreadyExists) { + FavoriteCourse favoriteCourse = new FavoriteCourse(user, trackCourse.getCourseName()); + favoriteCourseRepository.save(favoriteCourse); + } } } diff --git a/src/main/java/com/example/enjoy/service/TrackService.java b/src/main/java/com/example/enjoy/service/TrackService.java index 5f3896c..b0e694c 100644 --- a/src/main/java/com/example/enjoy/service/TrackService.java +++ b/src/main/java/com/example/enjoy/service/TrackService.java @@ -1,6 +1,5 @@ package com.example.enjoy.service; -import ch.qos.logback.core.joran.sanity.Pair; import com.example.enjoy.dto.CourseDto; import com.example.enjoy.dto.CourseStatusDto; import com.example.enjoy.dto.TrackDetailDto; @@ -29,7 +28,8 @@ public class TrackService { private final TrackRepository trackRepository; private final StudentCourseRepository studentCourseRepository; - + private final UserRepository userRepository; + private final FavoriteCourseRepository favoriteCourseRepository; //진척률 계산 public List calculateTrackProgress(String studentId) { @@ -44,7 +44,8 @@ public List calculateTrackProgress(String studentId) { List remaining = new ArrayList<>(); for (TrackCourse course : courses) { - CourseDto dto = new CourseDto(course.getCourseName(), course.getCourseAlias()); + CourseDto dto = new CourseDto(course.getCourseName(), course.getCourseAlias(), + course.getCourseCode(), course.getAcademicYear(), course.getAcademicSemester()); if (isCourseCompleted(course, completedCourseNames)) { completed.add(dto); } else { @@ -84,7 +85,6 @@ public TrackDetailDto getTrackDetails(String studentId, String trackName) { // 4. [수정] DTO 객체 생성 및 실제 필드에 맞게 데이터 세팅 CourseStatusDto dto = new CourseStatusDto(); dto.setTitle(trackCourse.getCourseName()); - // (TrackCourse 엔티티에 getCourseCode, getYear, getSemester가 있다고 가정합니다) dto.setCode(trackCourse.getCourseCode()); dto.setYear(trackCourse.getAcademicYear()); dto.setSemester(trackCourse.getAcademicSemester()); @@ -217,4 +217,4 @@ private double calculateFavoriteScore(TrackProgressDto track, Set favori public List getAllTracks() { return trackRepository.findAll(); } -} +} \ No newline at end of file