Commit 78aa876f authored by Kevin Kaminski's avatar Kevin Kaminski

[AFP-25, AFP-114, AFP115] emails are sent any time an order is created or updated. [@kkaminski]

parent 1aef3e57
Pipeline #1733 failed with stage
in 38 seconds
No preview for this file type
...@@ -3,6 +3,7 @@ package com.afp.ordermanagement.controller; ...@@ -3,6 +3,7 @@ package com.afp.ordermanagement.controller;
import com.afp.ordermanagement.model.Order; import com.afp.ordermanagement.model.Order;
import com.afp.ordermanagement.reactivekafkaservice.Receiver; import com.afp.ordermanagement.reactivekafkaservice.Receiver;
import com.afp.ordermanagement.reactivekafkaservice.Sender; import com.afp.ordermanagement.reactivekafkaservice.Sender;
import com.afp.ordermanagement.service.EmailService;
import com.afp.ordermanagement.service.OrderService; import com.afp.ordermanagement.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
......
...@@ -5,6 +5,7 @@ import com.afp.ordermanagement.model.Item; ...@@ -5,6 +5,7 @@ import com.afp.ordermanagement.model.Item;
import com.afp.ordermanagement.model.Order; import com.afp.ordermanagement.model.Order;
import com.afp.ordermanagement.model.OrderStatus; import com.afp.ordermanagement.model.OrderStatus;
import com.afp.ordermanagement.repository.OrderRepository; import com.afp.ordermanagement.repository.OrderRepository;
import com.afp.ordermanagement.service.EmailService;
import com.afp.ordermanagement.service.OrderService; import com.afp.ordermanagement.service.OrderService;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
...@@ -34,13 +35,15 @@ public class Receiver { ...@@ -34,13 +35,15 @@ public class Receiver {
@Autowired @Autowired
private OrderRepository orderRepository; private OrderRepository orderRepository;
@Autowired
private EmailService emailService;
@EventListener(ApplicationStartedEvent.class) @EventListener(ApplicationStartedEvent.class)
public void consumeOrderStatus() { public void consumeOrderStatus() {
kafkaReceiver.receive() kafkaReceiver.receive()
.doOnNext(record -> System.out.println(record)) // .doOnNext(record -> System.out.println(record))
.doOnNext(record -> log.info("record.value(): {} ", record.value())) // .doOnNext(record -> log.info("record.value(): {} ", record.value()))
.doOnNext(record -> updateOrderStatus(record.value())) // .doOnNext(record -> updateOrderStatus(record.value()))
.doOnError(throwable -> System.out.println(throwable.getMessage())) .doOnError(throwable -> System.out.println(throwable.getMessage()))
.subscribe(); .subscribe();
} }
...@@ -55,6 +58,9 @@ public class Receiver { ...@@ -55,6 +58,9 @@ public class Receiver {
log.info("ORDER objectMapper {}", order); log.info("ORDER objectMapper {}", order);
String orderId = order.getId(); String orderId = order.getId();
System.out.println("About to try sending an email.");
emailService.emailCreator(order);
Mono<Order> updated = orderService.updateOrderByOrderId(orderId, order); Mono<Order> updated = orderService.updateOrderByOrderId(orderId, order);
updated.block(); updated.block();
......
package com.afp.ordermanagement.reactivekafkaservice; package com.afp.ordermanagement.reactivekafkaservice;
import com.afp.ordermanagement.model.Order; import com.afp.ordermanagement.model.Order;
import com.afp.ordermanagement.service.EmailService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.clients.producer.ProducerRecord;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -15,8 +16,8 @@ import reactor.kafka.sender.SenderResult; ...@@ -15,8 +16,8 @@ import reactor.kafka.sender.SenderResult;
@Service @Service
@Slf4j @Slf4j
public class Sender { public class Sender {
@Autowired
private EmailService emailService;
@Autowired @Autowired
private KafkaSender<String, Order> kafkaEventProducer; private KafkaSender<String, Order> kafkaEventProducer;
...@@ -28,6 +29,8 @@ public class Sender { ...@@ -28,6 +29,8 @@ public class Sender {
public void sendOrderToWarehouse(Order orderObject) { public void sendOrderToWarehouse(Order orderObject) {
log.info(String.format("##### -> Sender sending message: %s ", orderObject)); log.info(String.format("##### -> Sender sending message: %s ", orderObject));
ProducerRecord<String, Order> record = new ProducerRecord<>(ORDER_TOPIC, orderObject); ProducerRecord<String, Order> record = new ProducerRecord<>(ORDER_TOPIC, orderObject);
System.out.println("In sendOrderToWarehouse");
emailService.emailCreator(orderObject);
Flux<SenderResult<Order>> working = kafkaEventProducer.send(Mono.just(SenderRecord.create(record, orderObject))) Flux<SenderResult<Order>> working = kafkaEventProducer.send(Mono.just(SenderRecord.create(record, orderObject)))
.doOnError(throwable -> System.out.println(throwable)) .doOnError(throwable -> System.out.println(throwable))
.doOnNext(uuidSenderResult -> { .doOnNext(uuidSenderResult -> {
......
...@@ -22,7 +22,7 @@ public class EmailService { ...@@ -22,7 +22,7 @@ public class EmailService {
mailMessage.setSubject(subject); mailMessage.setSubject(subject);
mailMessage.setText(message); mailMessage.setText(message);
mailMessage.setFrom("NOREPLY@nisum.com"); mailMessage.setFrom("kaminskikeving@gmail.com");
javaMailSender.send(mailMessage); javaMailSender.send(mailMessage);
} }
...@@ -32,16 +32,16 @@ public class EmailService { ...@@ -32,16 +32,16 @@ public class EmailService {
String message1 = "message ", message2 = "build failed."; String message1 = "message ", message2 = "build failed.";
switch (status) { switch (status) {
case RECEIVED: case RECEIVED:
message1 = "Hello, you order #" + order.getId() + " has been received!"; message1 = "Hello, your order #" + order.getId() + " has been received!";
message2 = "We hope to have your order fulfilled soon."; message2 = " We hope to have your order fulfilled soon.\n\n" + order.getOrderItems();
break; break;
case CANCELLED: case CANCELLED:
message1 = "I'm sorry, your order #" + order.getId() + " has been canceled."; message1 = "I'm sorry, your order #" + order.getId() + " has been canceled.";
message2 = "For more information, contact {NULL}."; message2 = " For more information, contact {NULL}.";
break; break;
case FULFILLED: case FULFILLED:
message1 = "Good news everyone! Your order #" + order.getId() + " has been fulfilled."; message1 = "Good news everyone! Your order #" + order.getId() + " has been fulfilled.";
message2 = "Your tracking number is: " + order.getOrderTrackingCode(); message2 = " Your tracking number is: " + order.getOrderTrackingCode();
break; break;
} }
return message1 + message2; return message1 + message2;
...@@ -60,7 +60,7 @@ public class EmailService { ...@@ -60,7 +60,7 @@ public class EmailService {
status = "FULFILLED"; status = "FULFILLED";
break; break;
} }
return "Your order #" + order.getId() + " has been" + status; return "Your order #" + order.getId() + " has been " + status;
} }
public String toCreator(Order order) { public String toCreator(Order order) {
...@@ -73,6 +73,7 @@ public class EmailService { ...@@ -73,6 +73,7 @@ public class EmailService {
String to = toCreator(order); String to = toCreator(order);
sendMail(to, subject, message); sendMail(to, subject, message);
return "Email sent to customer!"; return "Email sent to customer!";
} }
} }
spring.data.mongodb.uri=mongodb+srv://user:password2021@cluster0.g23rm.mongodb.net/myFirstDatabase?
kafka.producer.bootstrap-servers=localhost:9092 kafka.producer.bootstrap-servers=localhost:9092
kafka.producer.acks=all kafka.producer.acks=all
kafka.consumer.bootstrap-servers=localhost:9092 kafka.consumer.bootstrap-servers=localhost:9092
kafka.consumer.group-id=group_id kafka.consumer.group-id=group_id
kafka.topic.input=orders kafka.topic.input=orders
# Config for MailTrap SMTP Mail testing service # Config for MailTrap SMTP Mail testing service
spring.mail.protocol=smtp spring.mail.protocol=smtp
spring.mail.host=smtp.mailtrap.io spring.mail.host=smtp.mailtrap.io
...@@ -10,4 +12,13 @@ spring.mail.port=2525 ...@@ -10,4 +12,13 @@ spring.mail.port=2525
spring.mail.username=945a9d376253be spring.mail.username=945a9d376253be
spring.mail.password=96d65f623868cc spring.mail.password=96d65f623868cc
spring.mail.properties.mail.smtp.auth = true spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.starttls.enable = true spring.mail.properties.mail.smtp.starttls.enable = false
\ No newline at end of file
## Config for GMail SMTP mail sending
#spring.mail.host=smtp.gmail.com
#spring.mail.port=587
#spring.mail.username=gmail email address
#spring.mail.password=gmail email password
#spring.mail.properties.mail.smtp.auth=true
#spring.mail.properties.mail.smtp.starttls.enable=true
#mail.smtp.debug=true
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment