Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[REFACTOR] : 전면 수정, 코드 리팩토링 #102

Merged
merged 4 commits into from
Aug 5, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,9 @@ public ResponseEntity<SuccessStatusResponse<Void>> checkEmail(@RequestBody Check
}
}


@PostMapping("/signin")
public ResponseEntity<SuccessStatusResponse<UserLoginResponse>>signIn(@RequestBody MemberSignInRequest memberSignInRequest) {

UserLoginResponse userLoginResponse = authService.logineMember(memberSignInRequest);

return ResponseEntity.status(HttpStatus.OK)
.body(SuccessStatusResponse.of(SuccessMessage.SIGNIN_SUCCESS, userLoginResponse));
}
Expand All @@ -54,9 +51,6 @@ public ResponseEntity<SuccessStatusResponse<Void>> signUp(@ModelAttribute Member
.body(SuccessStatusResponse.of(SuccessMessage.SIGNUP_SUCCESS, null));
}




@PostMapping("/slack/actions")
public void handleSlackActions(@RequestBody Map<String, Object> payload) {
List<Map<String, Object>> actions = (List<Map<String, Object>>) payload.get("actions");
Expand All @@ -71,15 +65,4 @@ public void handleSlackActions(@RequestBody Map<String, Object> payload) {
System.out.println("거절 버튼 클릭됨");
}
}











}
Original file line number Diff line number Diff line change
@@ -1,32 +1,14 @@
package sopt.univoice.domain.auth.dto;


import lombok.*;
import org.springframework.web.multipart.MultipartFile;
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class MemberCreateRequest{

private Long admissionNumber;

private String name;

private String studentNumber;

private String email;

private String password;

MultipartFile studentCardImage;

private String universityName;

private String departmentName;




}
public record MemberCreateRequest(
Long admissionNumber,
String name,
String studentNumber,
String email,
String password,
MultipartFile studentCardImage,
String universityName,
String departmentName
) {}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@


public interface CollegeDepartmentRepository extends JpaRepository<CollegeDepartment, Long> {
// JpaRepository already provides findById method, no need to redefine it

}

114 changes: 66 additions & 48 deletions src/main/java/sopt/univoice/domain/auth/service/AuthService.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import sopt.univoice.domain.affiliation.entity.Affiliation;
import sopt.univoice.domain.affiliation.repository.AffiliationRepository;
import sopt.univoice.domain.auth.UserAuthentication;
Expand Down Expand Up @@ -42,7 +43,6 @@
import java.util.*;



@Slf4j
@Service
@RequiredArgsConstructor
Expand All @@ -52,7 +52,6 @@ public class AuthService {
private String webhookUrl;
private static final String S3_BUCKET_URL = "https://uni-voice-bucket.s3.ap-northeast-2.amazonaws.com/";


private final AuthRepository authRepository;
private final S3Service s3Service;
private final DepartmentRepository departmentRepository;
Expand All @@ -64,64 +63,97 @@ public class AuthService {
private final NoticeRepository noticeRepository;
private final NoticeViewRepository noticeViewRepository;

public boolean isDuplicateEmail(CheckEmailRequest checkEmailRequest) {
return authRepository.existsByEmail(checkEmailRequest.getEmail());
}


@Transactional
public void signUp(MemberCreateRequest memberCreateRequest) {
String imageUrl = uploadStudentCardImage(memberCreateRequest.studentCardImage());
Department department = validateAndGetDepartment(memberCreateRequest.departmentName());
CollegeDepartment collegeDepartment = validateAndGetCollegeDepartment(department);
Affiliation affiliation = createAffiliation();
Member member = createMember(memberCreateRequest, imageUrl, department, collegeDepartment, affiliation);

authRepository.save(member);
sendSlackNotification(member);
createAndSaveNoticeViews(member);
}


// 회원 가입 메서드 수정
@Transactional
public void signUp(MemberCreateRequest memberCreateRequest) {
Slack slack = Slack.getInstance();
String imageUrl = null;
public UserLoginResponse logineMember(MemberSignInRequest memberSignInRequest) {
Member member = authRepository.findByEmail(memberSignInRequest.getEmail())
.orElseThrow(() -> new UnauthorizedException(ErrorMessage.JWT_LOGIN_PASSWORD_EXCEPTION));

if (!passwordEncoder.matches(memberSignInRequest.getPassword(), member.getPassword())) {
throw new UnauthorizedException(ErrorMessage.JWT_LOGIN_PASSWORD_EXCEPTION);
}

Long memberId = member.getId();
Collection<? extends GrantedAuthority> authorities = member.getAuthorities();
String accessToken = jwtTokenProvider.issueAccessToken(
UserAuthentication.createUserAuthentication(memberId, authorities)
);

return UserLoginResponse.of(accessToken);
}


public boolean isDuplicateEmail(CheckEmailRequest checkEmailRequest) {
return authRepository.existsByEmail(checkEmailRequest.getEmail());
}

private String uploadStudentCardImage(MultipartFile studentCardImage) {
try {
imageUrl = s3Service.uploadImage("student-card-images/", memberCreateRequest.getStudentCardImage());
return s3Service.uploadImage("student-card-images/", studentCardImage);
} catch (IOException e) {
System.err.println("이미지 업로드에 실패했습니다: " + e.getMessage());
e.printStackTrace();
throw new RuntimeException("이미지 업로드에 실패했습니다.!", e);
log.error("이미지 업로드에 실패했습니다: {}", e.getMessage(), e);
throw new RuntimeException("이미지 업로드에 실패했습니다!", e);
}
}

List<Department> departments = departmentRepository.findByDepartmentName(memberCreateRequest.getDepartmentName());
private Department validateAndGetDepartment(String departmentName) {
List<Department> departments = departmentRepository.findByDepartmentName(departmentName);
if (departments.isEmpty()) {
System.err.println("해당 학과가 존재하지 않습니다.");
log.error("해당 학과가 존재하지 않습니다.");
throw new RuntimeException("해당 학과가 존재하지 않습니다.");
}
return departments.get(0);
}

Department department = departments.get(0);

CollegeDepartment collegeDepartment = collegeDepartmentRepository.findById(department.getCollegeDepartment().getId())
private CollegeDepartment validateAndGetCollegeDepartment(Department department) {
return collegeDepartmentRepository.findById(department.getCollegeDepartment().getId())
.orElseThrow(() -> {
System.err.println("해당 단과대학이 존재하지 않습니다.");
log.error("해당 단과대학이 존재하지 않습니다.");
return new RuntimeException("해당 단과대학이 존재하지 않습니다.");
});
}

private Affiliation createAffiliation() {
Affiliation affiliation = Affiliation.createDefault();
affiliationRepository.save(affiliation);
return affiliation;
}

// 비밀번호 해시
String hashedPassword = passwordEncoder.encode(memberCreateRequest.getPassword());
private Member createMember(MemberCreateRequest request, String imageUrl, Department department, CollegeDepartment collegeDepartment, Affiliation affiliation) {
String hashedPassword = passwordEncoder.encode(request.password());

Member member = Member.builder()
.admissionNumber(memberCreateRequest.getAdmissionNumber())
.name(memberCreateRequest.getName())
.studentNumber(memberCreateRequest.getStudentNumber())
.email(memberCreateRequest.getEmail())
return Member.builder()
.admissionNumber(request.admissionNumber())
.name(request.name())
.studentNumber(request.studentNumber())
.email(request.email())
.password(hashedPassword)
.studentCardImage(imageUrl)
.universityName(memberCreateRequest.getUniversityName())
.departmentName(memberCreateRequest.getDepartmentName())
.universityName(request.universityName())
.departmentName(department.getDepartmentName())
.collegeDepartmentName(collegeDepartment.getCollegeDepartmentName())
.affiliation(affiliation)
.build();
}

authRepository.save(member);

// 슬랙 메시지 전송을 위한 JSON 형식의 데이터 구성
private void sendSlackNotification(Member member) {
Slack slack = Slack.getInstance();
Map<String, String> messageData = new HashMap<>();
messageData.put("text", String.format(
"새로운 회원 가입:\n" +
Expand Down Expand Up @@ -153,7 +185,9 @@ public void signUp(MemberCreateRequest memberCreateRequest) {
log.error("Slack 메시지 전송에 실패했습니다: {}", e.getMessage(), e);
throw new RuntimeException(e);
}
// NoticeView 엔티티 생성 및 저장
}

private void createAndSaveNoticeViews(Member member) {
List<Notice> notices = noticeRepository.findAllByMemberUniversityName(member.getUniversityName());
for (Notice notice : notices) {
NoticeView noticeView = NoticeView.builder()
Expand All @@ -165,24 +199,8 @@ public void signUp(MemberCreateRequest memberCreateRequest) {
}
}

@Transactional
public UserLoginResponse logineMember(
MemberSignInRequest memberSignInRequest
) {
Member member = authRepository.findByEmail(memberSignInRequest.getEmail())
.orElseThrow(() -> new UnauthorizedException(ErrorMessage.JWT_LOGIN_PASSWORD_EXCEPTION));

if (!passwordEncoder.matches(memberSignInRequest.getPassword(), member.getPassword())) {
throw new UnauthorizedException(ErrorMessage.JWT_LOGIN_PASSWORD_EXCEPTION);
}

Long memberId = member.getId();
Collection<? extends GrantedAuthority> authorities = member.getAuthorities(); // 역할 정보 가져오기
String accessToken = jwtTokenProvider.issueAccessToken(
UserAuthentication.createUserAuthentication(memberId, authorities)
);

return UserLoginResponse.of(accessToken);
}

}

37 changes: 0 additions & 37 deletions src/main/java/sopt/univoice/domain/firstcome/entity/FirstCome.java

This file was deleted.

This file was deleted.

3 changes: 0 additions & 3 deletions src/main/java/sopt/univoice/domain/notice/entity/Notice.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import sopt.univoice.domain.firstcome.entity.FirstCome;
import sopt.univoice.domain.user.entity.Member;
import sopt.univoice.infra.persistence.BaseTimeEntity;

Expand Down Expand Up @@ -44,8 +43,6 @@ public class Notice extends BaseTimeEntity {
@JoinColumn(name = "member_id")
private Member member;

@OneToOne(mappedBy = "notice", cascade = CascadeType.ALL, orphanRemoval = true)
private FirstCome firstCome;

@OneToMany(mappedBy = "notice", cascade = CascadeType.ALL, orphanRemoval = true)
private List<NoticeImage> noticeImages = new ArrayList<>();
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/sopt/univoice/domain/user/service/UserService.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,20 @@
package sopt.univoice.domain.user.service;

public class UserService {
















}
Loading