Skip to content

Commit

Permalink
Merge pull request #102 from Team-UniVoice/refactor/#101-codebase_ref…
Browse files Browse the repository at this point in the history
…actoring

[REFACTOR] : 전면 수정, 코드 리팩토링
  • Loading branch information
softmoca authored Aug 5, 2024
2 parents 0ed85dd + db50146 commit db5f5d2
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 154 deletions.
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 {
















}

0 comments on commit db5f5d2

Please sign in to comment.