Qual a ideia do ItemWritter? Queremos que ele envie um email solicitando o retorno dos livros para o User.
Portanto, se chamará: sendEmailRequestReturnWritterConfig
.
Vamos criar o nosso método sendEmailRequestReturnWritterConfig
, que retornará um ItemWriter<Mail>
.
Precisamos criar um método para realizar o envio de email,
Este método ficará dentro da classe do Writter, depois do método que criamos do Bean.
Variável de ambiente
Logue no sendGrid, obtenha o valor da chave e coloque como variável de ambiente na IDE (não é no app.properties), e sim na variável de ambiente.
spring.sendgrid.api-key=KEY_SENDGRID
Com isso, ao rodar a aplicação, o email será enviado.
@Configuration
public class sendUserRequestReturnWriterConfig {
private static Logger LOG = LoggerFactory.getLogger(sendUserRequestReturnWriterConfig.class);
@Autowired
private SendGrid sendGrid;
@Bean
public ItemWriter<Mail> sendUserRequestReturnWriter() {
return items -> items.forEach(this::sendEmail);
}
private void sendEmail(Mail email) {
LOG.info("Sending mail");
Request request = new Request();
try {
request.setMethod(Method.POST);
request.setEndpoint("mail/send");
request.setBody(email.build());
LOG.info("[WRITER STEP] Send email to: " + email.build());
Response response = sendGrid.api(request);
if (response.getStatusCode() >= 400 && response.getStatusCode() <= 500) {
LOG.error("Error sending email: " + response.getBody());
throw new Exception(response.getBody());
}
LOG.info("Email sent! Status = " + response.getStatusCode());
} catch (Exception e) {
e.getMessage();
}
}
}