From 6b2ab755616070cdda6c59c9b9f6db14d65260ad Mon Sep 17 00:00:00 2001 From: michael Date: Fri, 22 Nov 2024 17:46:32 +0100 Subject: [PATCH] add basic usecase layer --- src/use_cases/cart_repository_interface.py | 8 ++++++++ src/use_cases/view_cart.py | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/use_cases/cart_repository_interface.py create mode 100644 src/use_cases/view_cart.py diff --git a/src/use_cases/cart_repository_interface.py b/src/use_cases/cart_repository_interface.py new file mode 100644 index 0000000..5bf005a --- /dev/null +++ b/src/use_cases/cart_repository_interface.py @@ -0,0 +1,8 @@ +from typing import Optional, List + +class CartRepositoryInterface: + def fetch_cart_by_user_id(self, user_id: int) -> Optional[List[dict]]: + """ + Abstract method to fetch cart data by user ID. + """ + raise NotImplementedError("fetch_cart_by_user_id must be implemented by a subclass") diff --git a/src/use_cases/view_cart.py b/src/use_cases/view_cart.py new file mode 100644 index 0000000..5618362 --- /dev/null +++ b/src/use_cases/view_cart.py @@ -0,0 +1,22 @@ +#python imports +from typing import Optional + +#dependency imports +from entities.cart import Cart, CartItem +from interface_adapters.cart_repository import CartRepository + +class ViewCart: + def __init__(self, cart_repository: CartRepository): + self.cart_repository = cart_repository + + def execute(self, user_id: int) -> Optional[Cart]: + """ + Fetches the cart data from the repository, converts it to Cart entity. + """ + cart_data = self.cart_repository.fetch_cart_by_user_id(user_id) + if not cart_data: + return None + + # Convert raw data to domain entities + items = [CartItem(**item) for item in cart_data] + return Cart(items) \ No newline at end of file