From cf6d93a0ffc6f13ae62e6c17d14c1c4286660dec Mon Sep 17 00:00:00 2001 From: DaeunSon <130820902+DaeunSon@users.noreply.github.com> Date: Thu, 26 Jun 2025 06:46:40 +0900 Subject: [PATCH 1/2] Feat --- .../controller/FavoriteCourseController.java | 12 ++++++---- .../enjoy/service/FavoriteCourseService.java | 22 +++++++++---------- .../example/enjoy/service/TrackService.java | 2 ++ 3 files changed, 21 insertions(+), 15 deletions(-) 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/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..bb8d887 100644 --- a/src/main/java/com/example/enjoy/service/TrackService.java +++ b/src/main/java/com/example/enjoy/service/TrackService.java @@ -29,6 +29,8 @@ public class TrackService { private final TrackRepository trackRepository; private final StudentCourseRepository studentCourseRepository; + private final UserRepository userRepository; + private final FavoriteCourseRepository favoriteCourseRepository; //진척률 계산 From c03533895da94d3acff8a3eb2747a179f4579634 Mon Sep 17 00:00:00 2001 From: Jiwoo Date: Thu, 26 Jun 2025 06:41:18 +0900 Subject: [PATCH 2/2] feat: --- # Conflicts: # src/main/java/com/example/enjoy/service/TrackService.java --- src/main/java/com/example/enjoy/dto/CourseDto.java | 3 +++ src/main/java/com/example/enjoy/service/TrackService.java | 8 +++----- 2 files changed, 6 insertions(+), 5 deletions(-) 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/TrackService.java b/src/main/java/com/example/enjoy/service/TrackService.java index bb8d887..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; @@ -32,7 +31,6 @@ public class TrackService { private final UserRepository userRepository; private final FavoriteCourseRepository favoriteCourseRepository; - //진척률 계산 public List calculateTrackProgress(String studentId) { @@ -46,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 { @@ -86,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()); @@ -219,4 +217,4 @@ private double calculateFavoriteScore(TrackProgressDto track, Set favori public List getAllTracks() { return trackRepository.findAll(); } -} +} \ No newline at end of file