Skip to content

Instantly share code, notes, and snippets.

@erichegt
Created July 2, 2015 16:21
Show Gist options
  • Save erichegt/07a7cf10fdb2fd49b4f4 to your computer and use it in GitHub Desktop.
Save erichegt/07a7cf10fdb2fd49b4f4 to your computer and use it in GitHub Desktop.
Callbacks e Strategy em api's mobile
public interface OrderCheckoutCallback {
void onSuccess(OrderFrete order);
void shippingInformationWithValidationIssues();
void orderAlreadyProcessed(Order order);
void sellerNotFoundOnCarts();
}
@Controller
@BlockUnloggedUsers
public class CheckoutController {
@Inject
private Result result;
//demais dependências
@AvailableRoutes(value={PageRoute.MOBILE, PageRoute.DESKTOP})
@Path( {"/checkout/{sellerId}"} )
public void checkout(final ContactInformation contactInformation, final Long sellerId) {
checkoutExecutor.sendOrderFinal(contactInformation, sellerId, new OrderCheckoutCallback() {
@Override
public void orderAlreadyProcessed(Order order) {
result.redirectTo(urlBuilder.buyerOrderDetailUrl(order));
}
@Override
public void onSuccess(Order order) {
result.include("createdOrder", order);
result.redirectTo(BuyerOrderDetailsController.class).show(order.getId()));
}
@Override
public void sellerNotFoundOnCarts() {
result.redirectTo(CartController.class).show(sellerId);
}
@Override
public void shippingInformationWithValidationIssues() {
result.include("contactInformation", contactInformation);
result.redirectTo(CheckoutController.class).form(sellerId);
}
});
}
}
@Controller
@BlockUnloggedUsers
public class CheckoutApiController {
@Inject
private ApiResult result; //result customizado que serializa para content-type JSON
//demais dependências
@AvailableRoutes(value={PageRoute.NATIVE_APP})
@Path( {"/mobile/{apiVersion}/checkout/{sellerId}"} )
public void checkout(ContactInformation contactInformation, final Long sellerId) {
checkoutExecutor.sendOrderFinal(contactInformation, sellerId, new OrderCheckoutCallback() {
@Override
public void orderAlreadyProcessed(Order order) {
OrderDTO orderDTO = dtoConverter.convert(order); //modelo do jar compartilhado com Android
result.success(apiVersion, orderDTO);
}
@Override
public void onSuccess(Order order) {
OrderDTO orderDTO = dtoConverter.convert(order); //modelo do jar compartilhado com Android
result.created(apiVersion, orderDTO);
}
@Override
public void sellerNotFoundOnCarts() {
result.notFound(apiVersion);
}
@Override
public void shippingInformationWithValidationIssues() {
result.badRequest(version);
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment