package com.arcbees.gwtpwebsite.server.order;
import javax.inject.Inject;
import com.arcbees.gwtpwebsite.server.email.EmailSender;
import com.arcbees.gwtpwebsite.shared.domain.Order;
import com.arcbees.gwtpwebsite.shared.domain.OrderConfirmation;
import com.stripe.exception.StripeException;
import com.stripe.model.Customer;
import com.stripe.model.Plan;
public class OrderProcessorImpl implements OrderProcessor {
private final PlanCreator planCreator;
private final CustomerCreator customerCreator;
private final ConfirmationNumberGenerator confirmationNumberGenerator;
private final EmailSender emailSender;
@Inject
OrderProcessorImpl(PlanCreator planCreator,
CustomerCreator customerCreator,
ConfirmationNumberGenerator confirmationNumberGenerator,
EmailSender emailSender) {
this.planCreator = planCreator;
this.customerCreator = customerCreator;
this.confirmationNumberGenerator = confirmationNumberGenerator;
this.emailSender = emailSender;
}
@Override
public OrderConfirmation processOrder(Order order) throws StripeException {
Plan plan = planCreator.createPlan(order);
Customer customer = customerCreator.createCustormer(plan, order);
String confirmationNumber = confirmationNumberGenerator.generateConfirmationNumber(customer);
emailSender.sendOrderEmail(confirmationNumber);
OrderConfirmation orderConfirmation = new OrderConfirmation();
orderConfirmation.setConfirmationNumber(confirmationNumber);
return orderConfirmation;
}
}