diff --git a/src/entities/cart.py b/src/entities/cart.py new file mode 100644 index 0000000..b849bd7 --- /dev/null +++ b/src/entities/cart.py @@ -0,0 +1,27 @@ +#python imports +from typing import List +from dataclasses import dataclass + +#dependency imports +from entities.cart_item import CartItem +from entities.product import Product + +@dataclass +class Cart: + items: List[CartItem] + + def add_item(self, product: Product, quantity: int): + for item in self.items: + if item.product.id == product.id: + item.quantity += quantity + return + self.items.append(CartItem(product=product, quantity=quantity)) + + def remove_item(self, product_id: str): + self.items = [item for item in self.items if item.product.id != product_id] + + def calculate_total_price(self) -> float: + return sum(item.calculate_total_price() for item in self.items) + + def list_items(self) -> List[str]: + return [f"{item.quantity} x {item.product.name} - {item.calculate_total_price()} EUR" for item in self.items] \ No newline at end of file diff --git a/src/entities/cart_item.py b/src/entities/cart_item.py new file mode 100644 index 0000000..3278b03 --- /dev/null +++ b/src/entities/cart_item.py @@ -0,0 +1,17 @@ +#python imports +from typing import List +from dataclasses import dataclass + +@dataclass +class CartItem: + product_id: int + name: str + quantity: int + price: float + + def post_init(self): + if self.quantity <= 0: + raise ValueError("Quantity has to be atleast 1") + + def calculate_total_price(self) -> float: + return self.quantity * self.price \ No newline at end of file diff --git a/src/entities/product.py b/src/entities/product.py new file mode 100644 index 0000000..ae7341f --- /dev/null +++ b/src/entities/product.py @@ -0,0 +1,13 @@ +#python imports +from dataclasses import dataclass + +@dataclass +class Product: + id: str + name: str + description: str + price: float + + def post_init(self): + if self.price < 0: + raise ValueError("Der Preis darf nicht negativ sein.") \ No newline at end of file