Skip to content

Commit d7e4656

Browse files
authored
Merge pull request #15 from enjoy-hack/Daeun
Update : 유저 정보 저장 및 cors 설정 변경
2 parents a389939 + bb7d5e0 commit d7e4656

8 files changed

Lines changed: 118 additions & 8 deletions

File tree

src/main/java/com/example/enjoy/config/SecurityConfig.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
3232
@Bean
3333
public CorsConfigurationSource corsConfigurationSource() {
3434
CorsConfiguration configuration = new CorsConfiguration();
35-
configuration.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
35+
configuration.setAllowedOrigins(Arrays.asList(
36+
"http://localhost:3000",
37+
"http://localhost:5173" // 추가된 부분
38+
));
3639
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
3740
configuration.setAllowedHeaders(Arrays.asList("*"));
3841
configuration.setAllowCredentials(true);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.example.enjoy.entity;
2+
3+
import com.example.enjoy.entity.user.User;
4+
import com.example.enjoy.util.BaseEntity;
5+
import jakarta.persistence.*;
6+
import lombok.Setter;
7+
8+
import java.time.LocalDateTime;
9+
10+
@Entity
11+
@Setter
12+
public class FavoriteCourse extends BaseEntity {
13+
@Id
14+
@GeneratedValue(strategy = GenerationType.IDENTITY)
15+
private Long id;
16+
17+
@ManyToOne
18+
@JoinColumn(name = "user_id")
19+
private User user;
20+
21+
@ManyToOne
22+
@JoinColumn(name = "track_course_id")
23+
private TrackCourse trackCourse;
24+
25+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class TrackCourse {
1616
private String academicYear; // 이수 추천 학년 (DTO의 'year'에 해당)
1717
private String academicSemester; // 이수 추천 학기 (DTO의 'semester'에 해당)
1818

19+
1920
@ManyToOne
2021
@JoinColumn(name = "track_id")
2122
private Track track;

src/main/java/com/example/enjoy/entity/user/User.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,27 @@ public class User extends BaseTimeEntity {
1616
@GeneratedValue(strategy = GenerationType.IDENTITY)
1717
private Long id;
1818

19-
@Column(nullable = false, unique = true)
20-
private String username;
21-
22-
private String password; // local 로그인 사용자만 저장
19+
@Column(nullable = false)
20+
private String studentId;
2321

2422
@Column(nullable = false, unique = true)
25-
private String email;
23+
private String username;
2624

27-
private String loginType; //로그인 타입
25+
@Column(nullable = false)
26+
private String major;
2827

29-
private String providerId; //소셜 로그인 시 제공자 ID
28+
@Column(nullable = false)
29+
private String grade;
3030

31+
@Column(nullable = false)
32+
private String completedSemester;
3133

34+
public void updateUserInfo(String studentId, String username, String major, String grade, String completedSemester) {
35+
this.studentId = studentId;
36+
this.username = username;
37+
this.major = major;
38+
this.grade = grade;
39+
this.completedSemester = completedSemester;
40+
}
3241

3342
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.example.enjoy.repository;
2+
3+
import com.example.enjoy.entity.FavoriteCourse;
4+
import com.example.enjoy.entity.TrackCourse;
5+
import com.example.enjoy.entity.user.User;
6+
import org.springframework.data.jpa.repository.JpaRepository;
7+
import org.springframework.stereotype.Repository;
8+
9+
import java.util.Optional;
10+
11+
@Repository
12+
public interface FavoriteCourseRepository extends JpaRepository<FavoriteCourse, Long> {
13+
Optional<FavoriteCourse> findByUserAndTrackCourse(User user, TrackCourse trackCourse);
14+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import org.springframework.data.jpa.repository.JpaRepository;
55
import org.springframework.stereotype.Repository;
66

7+
import java.util.Optional;
8+
79
@Repository
810
public interface UserRepository extends JpaRepository<User,Long> {
11+
Optional<User> findByStudentId(String studentId);
912
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.example.enjoy.service;
2+
3+
import com.example.enjoy.entity.FavoriteCourse;
4+
import com.example.enjoy.entity.TrackCourse;
5+
import com.example.enjoy.entity.user.User;
6+
import com.example.enjoy.repository.FavoriteCourseRepository;
7+
import com.example.enjoy.repository.TrackCourseRepository;
8+
import com.example.enjoy.repository.UserRepository;
9+
import jakarta.transaction.Transactional;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.stereotype.Service;
12+
13+
import java.util.Optional;
14+
15+
@Service
16+
@RequiredArgsConstructor
17+
public class FavoriteCourseService {
18+
private final FavoriteCourseRepository favoriteCourseRepository;
19+
private final TrackCourseRepository trackCourseRepository;
20+
private final UserRepository userRepository;
21+
22+
@Transactional
23+
public void toggleFavoriteCourse(Long userId, Long trackCourseId) {
24+
User user = userRepository.findById(userId)
25+
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다."));
26+
TrackCourse trackCourse = trackCourseRepository.findById(trackCourseId)
27+
.orElseThrow(() -> new RuntimeException("과목을 찾을 수 없습니다."));
28+
29+
Optional<FavoriteCourse> existingFavorite = favoriteCourseRepository
30+
.findByUserAndTrackCourse(user, trackCourse);
31+
32+
if (existingFavorite.isPresent()) {
33+
favoriteCourseRepository.delete(existingFavorite.get());
34+
} else {
35+
FavoriteCourse favoriteCourse = new FavoriteCourse();
36+
favoriteCourse.setUser(user);
37+
favoriteCourse.setTrackCourse(trackCourse);
38+
favoriteCourseRepository.save(favoriteCourse);
39+
}
40+
}
41+
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import com.chuseok22.sejongportallogin.infrastructure.SejongPortalLoginService;
66
import com.example.enjoy.dto.loginDto.MemberCommand;
77
import com.example.enjoy.dto.loginDto.MemberDto;
8+
import com.example.enjoy.entity.user.User;
89
import com.example.enjoy.exception.CustomException;
910
import com.example.enjoy.exception.ErrorCode;
11+
import com.example.enjoy.repository.UserRepository;
1012
import lombok.RequiredArgsConstructor;
1113
import lombok.extern.slf4j.Slf4j;
1214
import okhttp3.*;
@@ -29,9 +31,11 @@
2931
public class SejongLoginService {
3032

3133
private final SejongPortalLoginService sejongPortalLoginService;
34+
private final UserRepository userRepository;
3235

3336
public MemberDto login(MemberCommand memberCommand){
3437
SejongMemberInfo info = sejongPortalLoginService.getMemberAuthInfos(memberCommand.getSejongPortalId(), memberCommand.getSejongPortalPassword());
38+
updateUserInfo(info.getStudentId(), info.getName(), info.getMajor(), info.getGrade(), info.getCompletedSemester()); //로그인 시 유저 정보 DB에 저장
3539
return MemberDto.builder()
3640
.major(info.getMajor())
3741
.studentIdString(info.getStudentId())
@@ -41,6 +45,14 @@ public MemberDto login(MemberCommand memberCommand){
4145
.build();
4246
}
4347

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+
4456
public MemberDto getMemberAuthInfos(MemberCommand memberCommand) throws IOException {
4557
try {
4658
SejongMemberInfo info = sejongPortalLoginService.getMemberAuthInfos(memberCommand.getSejongPortalId(), memberCommand.getSejongPortalPassword());
@@ -56,6 +68,8 @@ public MemberDto getMemberAuthInfos(MemberCommand memberCommand) throws IOExcept
5668
throw new CustomException(ErrorCode.SEJONG_AUTH_DATA_FETCH_ERROR);
5769
}
5870
}
71+
72+
5973
}
6074

6175

0 commit comments

Comments
 (0)