reworked some of the ShoppingCart to be more extensible/abstracted away repeated fields