69 lines
2.7 KiB
Java
69 lines
2.7 KiB
Java
package ru.soune.nocopy.handler;
|
|||
|
|
|
||
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||
|
|
import lombok.RequiredArgsConstructor;
|
||
|
|
import lombok.extern.slf4j.Slf4j;
|
||
|
|
import org.springframework.stereotype.Component;
|
||
|
|
import ru.soune.nocopy.dto.BaseRequest;
|
||
|
|
import ru.soune.nocopy.dto.BaseResponse;
|
||
|
|
import ru.soune.nocopy.dto.MessageCode;
|
||
|
|
import ru.soune.nocopy.dto.register.RegAnswer;
|
||
|
|
import ru.soune.nocopy.dto.register.VerifyUserRequest;
|
||
|
|
import ru.soune.nocopy.entity.user.AuthToken;
|
||
|
|
import ru.soune.nocopy.entity.user.EmailVerificationToken;
|
||
|
|
import ru.soune.nocopy.exception.NotValidFieldException;
|
||
|
|
import ru.soune.nocopy.exception.TokenNotFoundException;
|
||
|
|
import ru.soune.nocopy.repository.AuthTokenRepository;
|
||
|
|
import ru.soune.nocopy.repository.EmailVerificationTokenRepository;
|
||
|
|
import ru.soune.nocopy.service.user.UserService;
|
||
|
|
|
||
|
|
import java.util.Map;
|
||
|
|
import java.util.Optional;
|
||
|
|
|
||
|
|
@Component
|
||
|
|
@Slf4j
|
||
|
|
@RequiredArgsConstructor
|
||
|
|
public class VerifyRegisterUserHandler implements RequestHandler{
|
||
|
|
|
||
|
|
private final ObjectMapper objectMapper;
|
||
|
|
|
||
|
|
private final EmailVerificationTokenRepository emailVerificationTokenRepository;
|
||
|
|
|
||
|
|
private final UserService userService;
|
||
|
|
|
||
|
|
private final AuthTokenRepository authTokenRepository;
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public BaseResponse handle(BaseRequest request) {
|
||
|
|
VerifyUserRequest verifyUserRequest = objectMapper.convertValue(request.getMessageBody(),
|
||
|
|
VerifyUserRequest.class);
|
||
|
|
|
||
|
|
String verifyToken = verifyUserRequest.getVerifyToken();
|
||
|
|
Long userId = verifyUserRequest.getUserId();
|
||
|
|
|
||
|
|
EmailVerificationToken emailVerificationToken =
|
||
|
|
emailVerificationTokenRepository.findByUserIdAndToken(userId, verifyToken);
|
||
|
|
|
||
|
|
if (emailVerificationToken == null) {
|
||
|
|
throw new NotValidFieldException("Token was incorrected:" + verifyToken,
|
||
|
|
new BaseResponse(request.getMsgId(), MessageCode.INVALID_TOKEN.getCode(),
|
||
|
|
MessageCode.INVALID_TOKEN.getDescription(), Map.of(
|
||
|
|
"userId", userId,
|
||
|
|
"token", verifyToken)));
|
||
|
|
}
|
||
|
|
|
||
|
|
userService.activateAndVerifyUser(userId);
|
||
|
|
emailVerificationTokenRepository.delete(emailVerificationToken);
|
||
|
|
|
||
|
|
Optional<AuthToken> byUserIdAndIsActive = authTokenRepository.findByUserIdAndIsActive(userId, true);
|
||
|
|
AuthToken authToken = byUserIdAndIsActive.orElseThrow(() ->
|
||
|
|
new TokenNotFoundException("Token not found with user id: " + userId));
|
||
|
|
|
||
|
|
RegAnswer regAnswer = new RegAnswer();
|
||
|
|
regAnswer.setToken(authToken.getToken());
|
||
|
|
|
||
|
|
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
|
||
|
|
MessageCode.SUCCESS.getDescription(), regAnswer);
|
||
|
|
}
|
||
|
|
}
|