diff --git a/src/main/java/ru/soune/nocopy/dto/MessageCode.java b/src/main/java/ru/soune/nocopy/dto/MessageCode.java index 6070af8..1f3cc27 100644 --- a/src/main/java/ru/soune/nocopy/dto/MessageCode.java +++ b/src/main/java/ru/soune/nocopy/dto/MessageCode.java @@ -24,7 +24,8 @@ public enum MessageCode { AUTH_TOKEN_MISMATCH(4, "Token mismatch"), AUTH_TOKEN_NOT_FOUND(4, "Token not found"), FILE_NOT_FOUND(4, "File not found"), - AUTH_PASSWORD_NOT_MATCHES(2, "Password does not match"); + AUTH_PASSWORD_NOT_MATCHES(2, "Password does not match"), + SEND_EMAIL_EXCEPTION(2, "Send email exception"),; private final Integer code; diff --git a/src/main/java/ru/soune/nocopy/dto/register/RegAnswer.java b/src/main/java/ru/soune/nocopy/dto/register/RegAnswer.java index a1cbd01..32ccda7 100644 --- a/src/main/java/ru/soune/nocopy/dto/register/RegAnswer.java +++ b/src/main/java/ru/soune/nocopy/dto/register/RegAnswer.java @@ -17,5 +17,9 @@ public class RegAnswer { private boolean isVerified; + private Long userId; + + private String email; + private List> fieldErrors; } \ No newline at end of file diff --git a/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java b/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java index b220ca5..dca6ca5 100644 --- a/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java @@ -61,14 +61,24 @@ public class RegRequestHandler implements RequestHandler { AuthToken authToken = authService.register(regRequest); EmailVerificationToken emailToken = emailService.createEmailVerificationToken(authToken); - emailService.sendVerificationEmail(authToken.getUser(), emailToken.getToken()); + try { + emailService.sendVerificationEmail(authToken.getUser(), emailToken.getToken()); + } catch (Exception e) { + return new BaseResponse(request.getMsgId(), MessageCode.SEND_EMAIL_EXCEPTION.getCode(), + MessageCode.SEND_EMAIL_EXCEPTION.getDescription(), Map.of( + "message", "not send", + "email", regRequest.getEmail() + )); + } + + String token = authToken.getToken(); authService.useUserAuthToken(token); RegAnswer regAnswer = new RegAnswer(); - regAnswer.setToken(token); regAnswer.setVerified(false); regAnswer.setActive(false); + regAnswer.setUserId(authToken.getUser().getId()); return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), MessageCode.SUCCESS.getDescription(), regAnswer); diff --git a/src/main/java/ru/soune/nocopy/handler/VerifyRegisterUserHandler.java b/src/main/java/ru/soune/nocopy/handler/VerifyRegisterUserHandler.java index 00a1e10..373b953 100644 --- a/src/main/java/ru/soune/nocopy/handler/VerifyRegisterUserHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/VerifyRegisterUserHandler.java @@ -1,6 +1,7 @@ package ru.soune.nocopy.handler; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.mail.MessagingException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -21,6 +22,7 @@ import ru.soune.nocopy.service.mail.EmailService; import ru.soune.nocopy.service.register.AuthService; import ru.soune.nocopy.service.user.UserService; +import java.io.IOException; import java.util.Map; import java.util.Optional; @@ -43,7 +45,7 @@ public class VerifyRegisterUserHandler implements RequestHandler { private final AuthService authService; @Override - public BaseResponse handle(BaseRequest request) { + public BaseResponse handle(BaseRequest request) throws MessagingException, IOException { VerifyUserRequest verifyUserRequest = objectMapper.convertValue(request.getMessageBody(), VerifyUserRequest.class); Long userId = verifyUserRequest.getUserId(); @@ -62,7 +64,7 @@ public class VerifyRegisterUserHandler implements RequestHandler { return handleVerify(request, user, authToken, verifyUserRequest.getVerifyToken()); } - private BaseResponse handleResend(BaseRequest request, User user, AuthToken authToken) { + private BaseResponse handleResend(BaseRequest request, User user, AuthToken authToken) throws MessagingException, IOException { EmailVerificationToken token = emailVerificationTokenRepository.findByUserId(user.getId()); @@ -70,7 +72,8 @@ public class VerifyRegisterUserHandler implements RequestHandler { emailService.sendVerificationEmail(user, token.getToken()); log.info("Verification token resent for user {}", user.getEmail()); - return successResponse(request, authToken, "Verification code has been resent", false, false); + return successResponse(request, authToken, "Verification code has been resent", false, + false, user.getEmail()); } if (token != null) { @@ -84,7 +87,7 @@ public class VerifyRegisterUserHandler implements RequestHandler { log.info("New verification token generated for user {}", user.getEmail()); return successResponse(request, authToken, "New verification code has been sent", - false, false); + false, false, user.getEmail()); } @@ -99,19 +102,20 @@ public class VerifyRegisterUserHandler implements RequestHandler { } User updateUser = userService.activateAndVerifyUser(user.getId()); + emailVerificationTokenRepository.delete(token); return successResponse(request, authToken, MessageCode.SUCCESS.getDescription(), updateUser.isActive(), - updateUser.isEmailVerified()); + updateUser.isEmailVerified(), updateUser.getEmail()); } private BaseResponse successResponse(BaseRequest request, AuthToken authToken, String message, boolean isActive, - boolean isVerified) { - + boolean isVerified, String email) { RegAnswer regAnswer = new RegAnswer(); regAnswer.setToken(authToken.getToken()); regAnswer.setVerified(isVerified); regAnswer.setActive(isActive); + regAnswer.setEmail(email); return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), message, regAnswer); } diff --git a/src/main/java/ru/soune/nocopy/service/mail/EmailService.java b/src/main/java/ru/soune/nocopy/service/mail/EmailService.java index cc3b1cb..d6cf147 100644 --- a/src/main/java/ru/soune/nocopy/service/mail/EmailService.java +++ b/src/main/java/ru/soune/nocopy/service/mail/EmailService.java @@ -1,5 +1,6 @@ package ru.soune.nocopy.service.mail; +import jakarta.mail.MessagingException; import jakarta.mail.internet.MimeMessage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -37,25 +38,20 @@ public class EmailService { @Value("${app.email.verification.user}") private String user; - public void sendVerificationEmail(User user, String code) { - try { - MimeMessage message = mailSender.createMimeMessage(); - MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); + public void sendVerificationEmail(User user, String code) throws MessagingException, IOException { + MimeMessage message = mailSender.createMimeMessage(); + MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); - helper.setFrom(standartAdressFrom); - helper.setTo(user.getEmail()); - helper.setSubject(standartSubject); + helper.setFrom(standartAdressFrom); + helper.setTo(user.getEmail()); + helper.setSubject(standartSubject); - String htmlContent = loadAndProcessTemplate(user.getFullName(), code); - helper.setText(htmlContent, true); + String htmlContent = loadAndProcessTemplate(user.getFullName(), code); + helper.setText(htmlContent, true); - mailSender.send(message); + mailSender.send(message); - log.info("Email sent to: {}", user.getEmail()); - - } catch (Exception e) { - log.error("Failed to send email: {}", e.getMessage()); - } + log.info("Email sent to: {}", user.getEmail()); } @Transactional