Skip to content

Commit

Permalink
Merge pull request #67 from bandalgomsu/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
bandalgomsu authored Jun 5, 2024
2 parents 1caac09 + 4a54430 commit 7d653bd
Show file tree
Hide file tree
Showing 10 changed files with 151 additions and 89 deletions.
43 changes: 25 additions & 18 deletions src/main/java/com/example/jolvre/auth/api/AuthController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,19 @@
import com.example.jolvre.auth.dto.LoginDTO.LoginRequest;
import com.example.jolvre.auth.dto.SignUpDTO.RefreshRequest;
import com.example.jolvre.auth.dto.SignUpDTO.TokenResponse;
import com.example.jolvre.auth.email.dto.EmailDTO.EmailSendResponse;
import com.example.jolvre.auth.email.dto.EmailDTO.EmailVerifyRequest;
import com.example.jolvre.auth.email.dto.EmailDTO.FindPwEmailVerifyResponse;
import com.example.jolvre.auth.email.service.MailService;
import com.example.jolvre.auth.email.service.MailVerifyService;
import com.example.jolvre.auth.jwt.service.JwtService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
Expand All @@ -21,6 +28,8 @@
@Slf4j
public class AuthController {
private final JwtService jwtService;
private final MailService mailService;
private final MailVerifyService mailVerifyService;

@Operation(summary = "로그인")
@PostMapping("/login")
Expand All @@ -37,22 +46,20 @@ public ResponseEntity<TokenResponse> refresh(@RequestBody RefreshRequest request
return ResponseEntity.ok().body(response);
}

// @Operation(summary = "학생 인증 메일 요청")
// @GetMapping("/student/verification")
// public ResponseEntity<?> verifyEmailSend(@RequestParam StudentVerificationRequest request) {
// authService.sendStudentVerificationEmail(request);
//
// return ResponseEntity.ok().build();
// }

// @Operation(summary = "학생 메일 인증")
// @PostMapping("/student/verification")
// public ResponseEntity<VerifyStudentByEmailResponse> verifyStudentByEmail(
// @AuthenticationPrincipal PrincipalDetails principalDetails,
// @RequestBody VerifyStudentByEmailRequest request) {
// VerifyStudentByEmailResponse response = authService.checkVerificationStudentEmail(
// request, principalDetails.getUser());
//
// return ResponseEntity.ok(response);
// {
@Operation(summary = "비밀번호 찾기 인증 메일 발송", description = "비밀번호 찾기 인증 메일을 발송합니다")
@GetMapping("/pw/email/{email}")
public ResponseEntity<EmailSendResponse> sendPwFindAuthEmail(@PathVariable String email) {
EmailSendResponse response = mailService.sendFindPwEmail(email);

return ResponseEntity.ok().body(response);
}

@Operation(summary = "비밀번호 찾기 인증 메일 검증", description = "비밀번호 찾기 인증 메일을 검증합니다")
@PostMapping("/pw/email")
public ResponseEntity<FindPwEmailVerifyResponse> verifyPwFindAuthEmail(@RequestBody EmailVerifyRequest request) {
FindPwEmailVerifyResponse response = mailVerifyService.CheckFindPwAuthNum(request.getEmail(),
request.getAuthNum());

return ResponseEntity.ok().body(response);
}
}
31 changes: 9 additions & 22 deletions src/main/java/com/example/jolvre/auth/api/SignUpController.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
import com.example.jolvre.auth.dto.SignUpDTO.TokenResponse;
import com.example.jolvre.auth.email.dto.EmailDTO.EmailSendResponse;
import com.example.jolvre.auth.email.dto.EmailDTO.EmailVerifyRequest;
import com.example.jolvre.auth.email.dto.EmailDTO.EmailVerifyResponse;
import com.example.jolvre.auth.email.service.MailSenderService;
import com.example.jolvre.auth.email.dto.EmailDTO.SignUpEmailVerifyResponse;
import com.example.jolvre.auth.email.service.MailService;
import com.example.jolvre.auth.email.service.MailVerifyService;
import com.example.jolvre.auth.service.SignUpService;
import com.example.jolvre.user.dto.DuplicationDTO.DuplicateEmailResponse;
import com.example.jolvre.user.dto.DuplicationDTO.DuplicateNicknameResponse;
Expand All @@ -33,7 +34,8 @@
public class SignUpController {

private final SignUpService signUpService;
private final MailSenderService mailService;
private final MailService mailService;
private final MailVerifyService mailVerifyService;

@Operation(summary = "회원 가입")
@PostMapping
Expand Down Expand Up @@ -75,31 +77,16 @@ public ResponseEntity<DuplicateEmailResponse> checkDuplicateEmail(@PathVariable
@Operation(summary = "회원가입 인증 메일 발송", description = "회원가입 인증 메일을 발송합니다")
@GetMapping("/email/{email}")
public ResponseEntity<EmailSendResponse> sendSignUpAuthEmail(@PathVariable String email) {
EmailSendResponse response = mailService.signUpEmail(email);
EmailSendResponse response = mailService.sendSignUpEmail(email);

return ResponseEntity.ok().body(response);
}

@Operation(summary = "회원가입 인증 메일 검증", description = "회원가입 인증 메일을 검증합니다")
@PostMapping("/email")
public ResponseEntity<EmailVerifyResponse> verifySingUpAuthEmail(@RequestBody EmailVerifyRequest request) {
EmailVerifyResponse response = mailService.CheckAuthNum(request.getEmail(), request.getAuthNum());

return ResponseEntity.ok().body(response);
}

@Operation(summary = "비밀번호 찾기 인증 메일 발송", description = "비밀번호 찾기 인증 메일을 발송합니다")
@GetMapping("/pw/email/{email}")
public ResponseEntity<EmailSendResponse> sendPwFindAuthEmail(@PathVariable String email) {
EmailSendResponse response = mailService.findPwEmail(email);

return ResponseEntity.ok().body(response);
}

@Operation(summary = "비밀번호 찾기 인증 메일 검증", description = "비밀번호 찾기 인증 메일을 검증합니다")
@PostMapping("/pw/email")
public ResponseEntity<EmailVerifyResponse> verifyPwFindAuthEmail(@RequestBody EmailVerifyRequest request) {
EmailVerifyResponse response = mailService.CheckAuthNum(request.getEmail(), request.getAuthNum());
public ResponseEntity<SignUpEmailVerifyResponse> verifySingUpAuthEmail(@RequestBody EmailVerifyRequest request) {
SignUpEmailVerifyResponse response = mailVerifyService.CheckSignUpAuthNum(request.getEmail(),
request.getAuthNum());

return ResponseEntity.ok().body(response);
}
Expand Down
13 changes: 12 additions & 1 deletion src/main/java/com/example/jolvre/auth/email/dto/EmailDTO.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.jolvre.auth.email.dto;

import com.example.jolvre.auth.dto.SignUpDTO.TokenResponse;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
Expand All @@ -14,6 +15,7 @@ public class EmailDTO {
public static class EmailSendResponse {
private String email;
private String authNum;
private boolean isUser;
}

@Getter
Expand All @@ -30,10 +32,19 @@ public static class EmailVerifyRequest {
@Getter
@AllArgsConstructor
@Builder
public static class EmailVerifyResponse {
public static class SignUpEmailVerifyResponse {
private String email;

private boolean verifyResult;
}

@Getter
@AllArgsConstructor
@Builder
public static class FindPwEmailVerifyResponse {
private String email;
private boolean verifyResult;
private TokenResponse tokenResponse;
}

}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.example.jolvre.auth.email.service;

import com.example.jolvre.auth.email.dto.EmailDTO.EmailSendResponse;
import com.example.jolvre.auth.email.dto.EmailDTO.EmailVerifyResponse;
import com.example.jolvre.common.util.RedisUtil;
import com.example.jolvre.user.repository.UserRepository;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import java.util.Random;
Expand All @@ -13,10 +13,11 @@

@Service
@RequiredArgsConstructor
public class MailSenderService {
public class MailService {
private final JavaMailSender mailSender;
private int authNumber;
private final RedisUtil redisUtil;
private final UserRepository userRepository;

//임의의 6자리 양수를 반환합니다.
public void makeRandomNumber() {
Expand All @@ -31,7 +32,7 @@ public void makeRandomNumber() {


//mail을 어디서 보내는지, 어디로 보내는지 , 인증 번호를 html 형식으로 어떻게 보내는지 작성합니다.
public EmailSendResponse signUpEmail(String email) {
public EmailSendResponse sendSignUpEmail(String email) {
makeRandomNumber();
String setFrom = "jolvre"; // email-config에 설정한 자신의 이메일 주소를 입력
String toMail = email;
Expand All @@ -50,11 +51,17 @@ public EmailSendResponse signUpEmail(String email) {

}

public EmailSendResponse findPwEmail(String email) {
public EmailSendResponse sendFindPwEmail(String email) {
if (!userRepository.existsByEmail(email)) {
return EmailSendResponse.builder()
.isUser(false)
.build();
}

makeRandomNumber();
String setFrom = "jolvre"; // email-config에 설정한 자신의 이메일 주소를 입력
String toMail = email;
String title = "Jolvre 회원 가입 인증 이메일 입니다."; // 이메일 제목
String title = "Jolvre 비밀번호 찾기 인증 이메일 입니다."; // 이메일 제목
String content =
"나의 Jolvre를 방문해주셔서 감사합니다." +
"<br><br>" +
Expand All @@ -65,12 +72,14 @@ public EmailSendResponse findPwEmail(String email) {
return EmailSendResponse.builder()
.email(toMail)
.authNum(Integer.toString(authNumber))
.isUser(true)
.build();

}

//이메일을 전송합니다.
private void mailSend(String setFrom, String toMail, String title, String content) {
redisUtil.deleteData(toMail);
MimeMessage message = mailSender.createMimeMessage();//JavaMailSender 객체를 사용하여 MimeMessage 객체를 생성

try {
Expand All @@ -85,25 +94,6 @@ private void mailSend(String setFrom, String toMail, String title, String conten
// 이러한 경우 MessagingException이 발생
e.printStackTrace();//e.printStackTrace()는 예외를 기본 오류 스트림에 출력하는 메서드
}
redisUtil.setDataExpire(Integer.toString(authNumber), toMail, 60 * 5L);
}

public EmailVerifyResponse CheckAuthNum(String email, String authNum) {
if (redisUtil.getData(authNum) == null) {
return EmailVerifyResponse.builder()
.verifyResult(false)
.email(email)
.build();
} else if (redisUtil.getData(authNum).equals(email)) {
return EmailVerifyResponse.builder()
.verifyResult(true)
.email(email)
.build();
}

return EmailVerifyResponse.builder()
.verifyResult(false)
.email(email)
.build();
redisUtil.setDataExpire(toMail, Integer.toString(authNumber), 60 * 5L);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.example.jolvre.auth.email.service;

import com.example.jolvre.auth.dto.SignUpDTO.TokenResponse;
import com.example.jolvre.auth.email.dto.EmailDTO.FindPwEmailVerifyResponse;
import com.example.jolvre.auth.email.dto.EmailDTO.SignUpEmailVerifyResponse;
import com.example.jolvre.auth.jwt.service.JwtService;
import com.example.jolvre.common.error.user.UserNotFoundException;
import com.example.jolvre.common.util.RedisUtil;
import com.example.jolvre.user.entity.User;
import com.example.jolvre.user.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
@Slf4j
public class MailVerifyService {
private final RedisUtil redisUtil;
private final JwtService jwtService;
private final UserRepository userRepository;

public SignUpEmailVerifyResponse CheckSignUpAuthNum(String email, String authNum) {
if (redisUtil.getData(email) == null) {
return SignUpEmailVerifyResponse.builder()
.verifyResult(false)
.email(email)
.build();

} else if (redisUtil.getData(email).equals(authNum)) {
redisUtil.deleteData(email);
return SignUpEmailVerifyResponse.builder()
.verifyResult(true)
.email(email)
.build();
}

return SignUpEmailVerifyResponse.builder()
.verifyResult(false)
.email(email)
.build();
}

public FindPwEmailVerifyResponse CheckFindPwAuthNum(String email, String authNum) {
User targetUser = userRepository.findByEmail(email).orElseThrow(UserNotFoundException::new);

if (redisUtil.getData(email) == null) {
return FindPwEmailVerifyResponse.builder()
.verifyResult(false)
.email(email)
.build();
} else if (redisUtil.getData(email).equals(authNum)) {
redisUtil.deleteData(email);

TokenResponse token = TokenResponse.builder()
.accessToken(jwtService.createAccessToken(targetUser.getEmail()))
.refreshToken(jwtService.reIssueRefreshToken(targetUser))
.build();

return FindPwEmailVerifyResponse.builder()
.verifyResult(true)
.email(email)
.tokenResponse(token)
.build();
}

return FindPwEmailVerifyResponse.builder()
.verifyResult(false)
.email(email)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ public TokenResponse checkRefreshTokenAndReIssueAccessToken(String refreshToken)
.build();
}

private String reIssueRefreshToken(User user) {
public String reIssueRefreshToken(User user) {
String reIssuedRefreshToken = createRefreshToken();
user.updateRefreshToken(reIssuedRefreshToken);
userRepository.saveAndFlush(user);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
package com.example.jolvre.common.firebase.Entity;

import com.example.jolvre.user.entity.User;
import jakarta.persistence.*;
import lombok.*;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Entity
@Getter @Setter
@Getter
@Setter
@NoArgsConstructor
public class UserFcmToken {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ public interface ExhibitCommentRepository extends JpaRepository<ExhibitComment,

List<ExhibitComment> findAllByExhibitId(Long exhibitId);

void deleteAllByExhibitId(Long exhibitId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,8 @@ public ExhibitInfoResponses getAllExhibitInfoByWorkType(String workType) {
public void deleteExhibit(Long exhibitId, Long userId) {
exhibitImageRepository.deleteAllByExhibitId(exhibitId);
diaryRepository.deleteAllByExhibitId(exhibitId);

exhibitCommentRepository.deleteAllByExhibitId(exhibitId);

Exhibit exhibit = getExhibitByIdAndUserId(exhibitId, userId);

exhibitRepository.delete(exhibit);
Expand Down
Loading

0 comments on commit 7d653bd

Please sign in to comment.