Skip to content

Commit 16b0582

Browse files
authored
Merge pull request #16 from enjoy-hack/Daeun
Daeun
2 parents d7e4656 + b24b2f4 commit 16b0582

11 files changed

Lines changed: 150 additions & 25 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.example.enjoy.controller;
2+
3+
import com.example.enjoy.dto.FavoriteCourseDto;
4+
import com.example.enjoy.entity.FavoriteCourse;
5+
import com.example.enjoy.service.FavoriteCourseService;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.*;
10+
11+
import java.util.List;
12+
import java.util.stream.Collectors;
13+
14+
@RestController
15+
@RequestMapping("/api/favorite-courses")
16+
@RequiredArgsConstructor
17+
public class FavoriteCourseController {
18+
private final FavoriteCourseService favoriteCourseService;
19+
20+
@Operation(summary = "즐겨찾는 과목 추가", description = "학생의 즐겨찾는 과목을 추가합니다.")
21+
@PostMapping("/add")
22+
public ResponseEntity<Void> addFavoriteCourse(
23+
@RequestParam String courseName,
24+
@RequestParam String studentId) {
25+
26+
favoriteCourseService.addFavoriteCourse(studentId, courseName);
27+
return ResponseEntity.ok().build();
28+
}
29+
30+
@Operation(summary = "즐겨찾는 과목 조회", description = "학생의 즐겨찾는 과목을 조회합니다.")
31+
@GetMapping("/get")
32+
public ResponseEntity<List<FavoriteCourseDto>> getFavoriteCourse(
33+
@RequestParam String studentId) {
34+
35+
List<FavoriteCourse> favoriteCourses = favoriteCourseService.getFavoriteCourses(studentId);
36+
if (favoriteCourses == null || favoriteCourses.isEmpty()) {
37+
return ResponseEntity.notFound().build();
38+
}
39+
40+
List<FavoriteCourseDto> favoriteDtos = favoriteCourses.stream()
41+
.map(FavoriteCourseDto::from)
42+
.collect(Collectors.toList());
43+
44+
return ResponseEntity.ok(favoriteDtos);
45+
}
46+
}

src/main/java/com/example/enjoy/controller/UserController.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,5 +117,12 @@ public ResponseEntity<Void> updateCourseStatus(
117117
userService.updateCourseStatus(studentId, courseName, newStatus);
118118
return ResponseEntity.ok().build();
119119
}
120+
121+
@Operation(summary = "유저 정보 저장", description = "학생의 정보를 저장합니다.")
122+
@PostMapping("/save")
123+
public ResponseEntity<MemberDto> saveUserInfo(@Valid @RequestBody MemberDto memberDto) {
124+
userService.saveUserInfo(memberDto);
125+
return ResponseEntity.ok().build();
126+
}
120127
}
121128

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.example.enjoy.dto;
2+
3+
import com.example.enjoy.entity.FavoriteCourse;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
7+
@Getter
8+
@AllArgsConstructor
9+
public class FavoriteCourseDto {
10+
private Long id;
11+
private String courseName;
12+
private String studentId;
13+
14+
public static FavoriteCourseDto from(FavoriteCourse favoriteCourse) {
15+
return new FavoriteCourseDto(
16+
favoriteCourse.getId(),
17+
favoriteCourse.getCourseName(),
18+
favoriteCourse.getUser().getStudentId()
19+
);
20+
}
21+
}

src/main/java/com/example/enjoy/dto/loginDto/MemberDto.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ public class MemberDto {
1111
private String studentName;
1212
private String grade;
1313
private String completedSemester;
14-
14+
private boolean hasLoginHistory; // 로그인 이력 여부
1515
}

src/main/java/com/example/enjoy/entity/FavoriteCourse.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
import com.example.enjoy.entity.user.User;
44
import com.example.enjoy.util.BaseEntity;
55
import jakarta.persistence.*;
6+
import lombok.Getter;
67
import lombok.Setter;
78

89
import java.time.LocalDateTime;
910

1011
@Entity
1112
@Setter
13+
@Getter
1214
public class FavoriteCourse extends BaseEntity {
1315
@Id
1416
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -18,8 +20,15 @@ public class FavoriteCourse extends BaseEntity {
1820
@JoinColumn(name = "user_id")
1921
private User user;
2022

21-
@ManyToOne
22-
@JoinColumn(name = "track_course_id")
23-
private TrackCourse trackCourse;
23+
@JoinColumn(name = "course_name")
24+
private String courseName;
25+
26+
public FavoriteCourse() {
27+
28+
}
2429

30+
public FavoriteCourse(User user, String courseName) {
31+
this.user = user;
32+
this.courseName = courseName;
33+
}
2534
}

src/main/java/com/example/enjoy/repository/FavoriteCourseRepository.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
import org.springframework.data.jpa.repository.JpaRepository;
77
import org.springframework.stereotype.Repository;
88

9+
import java.util.List;
910
import java.util.Optional;
1011

1112
@Repository
1213
public interface FavoriteCourseRepository extends JpaRepository<FavoriteCourse, Long> {
13-
Optional<FavoriteCourse> findByUserAndTrackCourse(User user, TrackCourse trackCourse);
14+
Optional<FavoriteCourse> findByUserAndCourseName(User user, String courseName);
15+
List<FavoriteCourse> findAllByUser(User user);
1416
}

src/main/java/com/example/enjoy/repository/TrackCourseRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@
66
import org.springframework.stereotype.Repository;
77

88
import java.util.List;
9+
import java.util.Optional;
10+
911
@Repository
1012
public interface TrackCourseRepository extends JpaRepository<TrackCourse, Long> {
1113

1214
List<TrackCourse> findAllByTrack(Track track);
15+
16+
Optional<TrackCourse> findByCourseName(String courseName);
1317
}

src/main/java/com/example/enjoy/repository/UserRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@
99
@Repository
1010
public interface UserRepository extends JpaRepository<User,Long> {
1111
Optional<User> findByStudentId(String studentId);
12+
boolean existsByStudentId(String studentId);
1213
}

src/main/java/com/example/enjoy/service/FavoriteCourseService.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import lombok.RequiredArgsConstructor;
1111
import org.springframework.stereotype.Service;
1212

13+
import java.util.List;
1314
import java.util.Optional;
1415

1516
@Service
@@ -20,22 +21,29 @@ public class FavoriteCourseService {
2021
private final UserRepository userRepository;
2122

2223
@Transactional
23-
public void toggleFavoriteCourse(Long userId, Long trackCourseId) {
24-
User user = userRepository.findById(userId)
24+
public void addFavoriteCourse(String studentId, String courseName) {
25+
User user = userRepository.findByStudentId(studentId)
2526
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다."));
26-
TrackCourse trackCourse = trackCourseRepository.findById(trackCourseId)
27+
28+
29+
TrackCourse trackCourse = trackCourseRepository.findByCourseName(courseName)
2730
.orElseThrow(() -> new RuntimeException("과목을 찾을 수 없습니다."));
2831

29-
Optional<FavoriteCourse> existingFavorite = favoriteCourseRepository
30-
.findByUserAndTrackCourse(user, trackCourse);
32+
// 이미 즐겨찾기한 과목인지 확인
33+
boolean alreadyExists = favoriteCourseRepository
34+
.findByUserAndCourseName(user, courseName)
35+
.isPresent();
3136

32-
if (existingFavorite.isPresent()) {
33-
favoriteCourseRepository.delete(existingFavorite.get());
34-
} else {
35-
FavoriteCourse favoriteCourse = new FavoriteCourse();
36-
favoriteCourse.setUser(user);
37-
favoriteCourse.setTrackCourse(trackCourse);
37+
if (!alreadyExists) {
38+
FavoriteCourse favoriteCourse = new FavoriteCourse(user, trackCourse.getCourseName());
3839
favoriteCourseRepository.save(favoriteCourse);
3940
}
4041
}
42+
43+
public List<FavoriteCourse> getFavoriteCourses(String studentId) {
44+
User user = userRepository.findByStudentId(studentId)
45+
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다."));
46+
47+
return favoriteCourseRepository.findAllByUser(user);
48+
}
4149
}

src/main/java/com/example/enjoy/service/loginService/SejongLoginService.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,31 @@ public class SejongLoginService {
3434
private final UserRepository userRepository;
3535

3636
public MemberDto login(MemberCommand memberCommand){
37+
boolean hasLoginHistory = userRepository.existsByStudentId(memberCommand.getSejongPortalId());
3738
SejongMemberInfo info = sejongPortalLoginService.getMemberAuthInfos(memberCommand.getSejongPortalId(), memberCommand.getSejongPortalPassword());
38-
updateUserInfo(info.getStudentId(), info.getName(), info.getMajor(), info.getGrade(), info.getCompletedSemester()); //로그인 시 유저 정보 DB에 저장
39+
40+
// 로그인 성공 시 사용자 정보 저장 (첫 로그인인 경우)
41+
if (!hasLoginHistory) {
42+
User newUser = User.builder()
43+
.major(info.getMajor())
44+
.studentId(info.getStudentId())
45+
.username(info.getName())
46+
.grade(info.getGrade())
47+
.completedSemester(info.getCompletedSemester())
48+
.build();
49+
userRepository.save(newUser);
50+
}
51+
3952
return MemberDto.builder()
4053
.major(info.getMajor())
4154
.studentIdString(info.getStudentId())
4255
.studentName(info.getName())
4356
.grade(info.getGrade())
4457
.completedSemester(info.getCompletedSemester())
58+
.hasLoginHistory(hasLoginHistory)
4559
.build();
4660
}
4761

48-
private void updateUserInfo(String studentId, String username, String major, String grade, String completedSemester) {
49-
User user = userRepository.findByStudentId(studentId)
50-
.orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));
51-
52-
user.updateUserInfo(studentId, username, major, grade, completedSemester);
53-
userRepository.save(user);
54-
}
55-
5662
public MemberDto getMemberAuthInfos(MemberCommand memberCommand) throws IOException {
5763
try {
5864
SejongMemberInfo info = sejongPortalLoginService.getMemberAuthInfos(memberCommand.getSejongPortalId(), memberCommand.getSejongPortalPassword());

0 commit comments

Comments
 (0)