EmailEventListener.java
package com.saltynote.service.event;
import com.saltynote.service.domain.EmailPayload;
import com.saltynote.service.entity.Vault;
import com.saltynote.service.service.EmailService;
import com.saltynote.service.service.VaultService;
import freemarker.template.TemplateException;
import jakarta.mail.MessagingException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.io.IOException;
@Component
@Slf4j
public class EmailEventListener {
private final EmailService emailService;
private final VaultService vaultService;
@Value("${spring.mail.username}")
private String mailUser;
public EmailEventListener(EmailService emailService, VaultService vaultService) {
this.emailService = emailService;
this.vaultService = vaultService;
}
@EventListener
public void handleEvent(EmailEvent event) throws MessagingException, IOException, TemplateException {
log.info("Event is received for {}", event.getType());
Vault vault = event.getType() == EmailEvent.Type.NEW_USER
? vaultService.createVerificationCode(event.getUser().getEmail())
: vaultService.create(event.getUser().getId(), event.getType().getVaultType());
EmailPayload payload = event.getType()
.loadUser(event.getUser())
.loadVault(vault, vaultService.encode(vault))
.getPayload();
if (StringUtils.hasText(mailUser)) {
emailService.sendAsHtml(event.getUser().getEmail(), event.getType().getSubject(), payload);
}
else {
log.info("============================================");
log.info("Email Payload Info = {}", payload);
log.info("============================================");
}
}
}