Prepare abstractions for a shopping cart in the store, products, and the store system.
The article should include: name, category, price, discount, UUID, the ability to calculate the price (if there is a discount, it should be applied), the ability to change the name, price, or category.
The shopping cart should include: UUID, a list of selected items, a cart-wide discount percentage, the ability to remove items or an item, and the calculation of the cart's total price (with the discount applied if applicable).
The store system should include: a list of products along with their quantities (the quantity should change when a customer completes a purchase), a list of redeemed and unredeemed discount codes, a list of completed carts along with the date of completion, the ability to add products to categories, the ability to add products to the store, the removal of products from the store, and the completion of a shopping cart.