Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/main/java/com/example/enjoy/config/SecurityConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,10 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
configuration.setAllowedOrigins(Arrays.asList(
"http://localhost:3000",
"http://localhost:5173" // 추가된 부분
));
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
configuration.setAllowedHeaders(Arrays.asList("*"));
configuration.setAllowCredentials(true);
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/com/example/enjoy/entity/FavoriteCourse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.enjoy.entity;

import com.example.enjoy.entity.user.User;
import com.example.enjoy.util.BaseEntity;
import jakarta.persistence.*;
import lombok.Setter;

import java.time.LocalDateTime;

@Entity
@Setter
public class FavoriteCourse extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne
@JoinColumn(name = "user_id")
private User user;

@ManyToOne
@JoinColumn(name = "track_course_id")
private TrackCourse trackCourse;

}
1 change: 1 addition & 0 deletions src/main/java/com/example/enjoy/entity/TrackCourse.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class TrackCourse {
private String academicYear; // 이수 추천 학년 (DTO의 'year'에 해당)
private String academicSemester; // 이수 추천 학기 (DTO의 'semester'에 해당)


@ManyToOne
@JoinColumn(name = "track_id")
private Track track;
Expand Down
23 changes: 16 additions & 7 deletions src/main/java/com/example/enjoy/entity/user/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,27 @@ public class User extends BaseTimeEntity {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, unique = true)
private String username;

private String password; // local 로그인 사용자만 저장
@Column(nullable = false)
private String studentId;

@Column(nullable = false, unique = true)
private String email;
private String username;

private String loginType; //로그인 타입
@Column(nullable = false)
private String major;

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

@Column(nullable = false)
private String completedSemester;

public void updateUserInfo(String studentId, String username, String major, String grade, String completedSemester) {
this.studentId = studentId;
this.username = username;
this.major = major;
this.grade = grade;
this.completedSemester = completedSemester;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.example.enjoy.repository;

import com.example.enjoy.entity.FavoriteCourse;
import com.example.enjoy.entity.TrackCourse;
import com.example.enjoy.entity.user.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface FavoriteCourseRepository extends JpaRepository<FavoriteCourse, Long> {
Optional<FavoriteCourse> findByUserAndTrackCourse(User user, TrackCourse trackCourse);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface UserRepository extends JpaRepository<User,Long> {
Optional<User> findByStudentId(String studentId);
}
41 changes: 41 additions & 0 deletions src/main/java/com/example/enjoy/service/FavoriteCourseService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.example.enjoy.service;

import com.example.enjoy.entity.FavoriteCourse;
import com.example.enjoy.entity.TrackCourse;
import com.example.enjoy.entity.user.User;
import com.example.enjoy.repository.FavoriteCourseRepository;
import com.example.enjoy.repository.TrackCourseRepository;
import com.example.enjoy.repository.UserRepository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
@RequiredArgsConstructor
public class FavoriteCourseService {
private final FavoriteCourseRepository favoriteCourseRepository;
private final TrackCourseRepository trackCourseRepository;
private final UserRepository userRepository;

@Transactional
public void toggleFavoriteCourse(Long userId, Long trackCourseId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다."));
TrackCourse trackCourse = trackCourseRepository.findById(trackCourseId)
.orElseThrow(() -> new RuntimeException("과목을 찾을 수 없습니다."));

Optional<FavoriteCourse> existingFavorite = favoriteCourseRepository
.findByUserAndTrackCourse(user, trackCourse);

if (existingFavorite.isPresent()) {
favoriteCourseRepository.delete(existingFavorite.get());
} else {
FavoriteCourse favoriteCourse = new FavoriteCourse();
favoriteCourse.setUser(user);
favoriteCourse.setTrackCourse(trackCourse);
favoriteCourseRepository.save(favoriteCourse);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import com.chuseok22.sejongportallogin.infrastructure.SejongPortalLoginService;
import com.example.enjoy.dto.loginDto.MemberCommand;
import com.example.enjoy.dto.loginDto.MemberDto;
import com.example.enjoy.entity.user.User;
import com.example.enjoy.exception.CustomException;
import com.example.enjoy.exception.ErrorCode;
import com.example.enjoy.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
Expand All @@ -29,9 +31,11 @@
public class SejongLoginService {

private final SejongPortalLoginService sejongPortalLoginService;
private final UserRepository userRepository;

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

private void updateUserInfo(String studentId, String username, String major, String grade, String completedSemester) {
User user = userRepository.findByStudentId(studentId)
.orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));

user.updateUserInfo(studentId, username, major, grade, completedSemester);
userRepository.save(user);
}

public MemberDto getMemberAuthInfos(MemberCommand memberCommand) throws IOException {
try {
SejongMemberInfo info = sejongPortalLoginService.getMemberAuthInfos(memberCommand.getSejongPortalId(), memberCommand.getSejongPortalPassword());
Expand All @@ -56,6 +68,8 @@ public MemberDto getMemberAuthInfos(MemberCommand memberCommand) throws IOExcept
throw new CustomException(ErrorCode.SEJONG_AUTH_DATA_FETCH_ERROR);
}
}


}


Loading