ConfirmationServiceJpa.java
package cl.tica.portfolio.recipeapi.auth.services;
import cl.tica.portfolio.recipeapi.auth.entities.User;
import cl.tica.portfolio.recipeapi.auth.entities.UserVerificationToken;
import cl.tica.portfolio.recipeapi.auth.repositories.AuthRepository;
import cl.tica.portfolio.recipeapi.auth.repositories.UserConfirmationRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.concurrent.atomic.AtomicBoolean;
@Service
public class ConfirmationServiceJpa implements ConfirmationService {
private final AuthRepository authRepository;
private final UserConfirmationRepository userConfirmationRepository;
public ConfirmationServiceJpa(AuthRepository authRepository,
UserConfirmationRepository userConfirmationRepository) {
this.authRepository = authRepository;
this.userConfirmationRepository = userConfirmationRepository;
}
@Override
@Transactional()
public boolean confirmEmail(String code) {
AtomicBoolean isConfirmed = new AtomicBoolean(false);
userConfirmationRepository.findUserConfirmationByCode(code)
.ifPresent(token ->
authRepository.findByUsernameIgnoreCase(token.getUser().getUsername())
.ifPresent(user -> {
activateUser(user);
userConfirmationRepository.delete(token);
isConfirmed.set(true);
}));
return isConfirmed.get();
}
@Override
@Transactional()
public void generateVerificationToken(User user) {
UserVerificationToken userVerificationToken = new UserVerificationToken(user);
userConfirmationRepository.save(userVerificationToken);
}
private void activateUser(User user) {
user.setAccountEnabled(true);
user.setEmailVerified(true);
saveUser(user);
}
private void saveUser(User user) {
authRepository.save(user);
}
}