diff --git a/src/entities/__init__.py b/src/entities/__init__.py deleted file mode 100644 index 10727b3..0000000 --- a/src/entities/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -import importlib -import pkgutil -import inspect - -__all__ = [] -for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): - module = importlib.import_module(f".{module_name}", __name__) - for name, obj in inspect.getmembers(module, inspect.isclass): - if obj.__module__ == module.__name__: - globals()[name] = obj - __all__.append(name) \ No newline at end of file diff --git a/src/interface_adapters/controllers/__init__.py b/src/interface_adapters/controllers/__init__.py deleted file mode 100644 index cb0cf8a..0000000 --- a/src/interface_adapters/controllers/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -import importlib -import pkgutil -import inspect - -__all__ = [] -for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): - module = importlib.import_module(f".{module_name}", __name__) - for name, obj in inspect.getmembers(module, inspect.isclass): - if obj.__module__ == module.__name__: - globals()[name] = obj - __all__.append(name) diff --git a/src/interface_adapters/dtos/__init__.py b/src/interface_adapters/dtos/__init__.py deleted file mode 100644 index cb0cf8a..0000000 --- a/src/interface_adapters/dtos/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -import importlib -import pkgutil -import inspect - -__all__ = [] -for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): - module = importlib.import_module(f".{module_name}", __name__) - for name, obj in inspect.getmembers(module, inspect.isclass): - if obj.__module__ == module.__name__: - globals()[name] = obj - __all__.append(name) diff --git a/src/interface_adapters/dtos/product_dto.py b/src/interface_adapters/dtos/product_dto.py deleted file mode 100644 index 42fd213..0000000 --- a/src/interface_adapters/dtos/product_dto.py +++ /dev/null @@ -1,9 +0,0 @@ -#python imports -from pydantic import BaseModel -from typing import List, Optional - -class ProductDTO(BaseModel): - id: int - name: str - description: str - price: float \ No newline at end of file diff --git a/src/interface_adapters/controllers/product_controller.py b/src/interface_adapters/product_controller.py similarity index 88% rename from src/interface_adapters/controllers/product_controller.py rename to src/interface_adapters/product_controller.py index 114700c..1e2ecc8 100644 --- a/src/interface_adapters/controllers/product_controller.py +++ b/src/interface_adapters/product_controller.py @@ -8,11 +8,15 @@ from pydantic import BaseModel #dependency imports from entities.product import Product -from use_cases.interactors import ViewProduct, ViewAllProducts -from use_cases.interfaces.ports import IViewProductInputPort, IViewAllProductsInputPort, IViewProductOutputPort, IViewAllProductsOutputPort -from interface_adapters.dtos import ProductDTO -from interface_adapters.repositories import SQLProductRepository +from use_cases.view_all_products import ViewAllProducts, IViewAllProductsInputPort, IViewAllProductsOutputPort +from use_cases.view_product import ViewProduct, IViewProductInputPort, IViewProductOutputPort +from interface_adapters.sql_product_repository import SQLProductRepository +class ProductDTO(BaseModel): + id: int + name: str + description: str + price: float class ViewProductRequest(BaseModel): product_id: int diff --git a/src/interface_adapters/repositories/__init__.py b/src/interface_adapters/repositories/__init__.py deleted file mode 100644 index cb0cf8a..0000000 --- a/src/interface_adapters/repositories/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -import importlib -import pkgutil -import inspect - -__all__ = [] -for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): - module = importlib.import_module(f".{module_name}", __name__) - for name, obj in inspect.getmembers(module, inspect.isclass): - if obj.__module__ == module.__name__: - globals()[name] = obj - __all__.append(name) diff --git a/src/interface_adapters/repositories/sql_product_repository.py b/src/interface_adapters/sql_product_repository.py similarity index 95% rename from src/interface_adapters/repositories/sql_product_repository.py rename to src/interface_adapters/sql_product_repository.py index f3cc8eb..dfc2367 100644 --- a/src/interface_adapters/repositories/sql_product_repository.py +++ b/src/interface_adapters/sql_product_repository.py @@ -3,8 +3,8 @@ from typing import Optional, List import sqlite3 #dependency imports -from use_cases.interfaces.repositories import IProductRepository -from entities import Product +from use_cases.product_repository import IProductRepository +from entities.product import Product class SQLProductRepository(IProductRepository): def __init__(self, db_file="framework_driver/db/shop.db"): diff --git a/src/interface_adapters/repositories/sql_user_repository.py b/src/interface_adapters/sql_user_repository.py similarity index 96% rename from src/interface_adapters/repositories/sql_user_repository.py rename to src/interface_adapters/sql_user_repository.py index 53c18ed..f1734a5 100644 --- a/src/interface_adapters/repositories/sql_user_repository.py +++ b/src/interface_adapters/sql_user_repository.py @@ -3,8 +3,8 @@ from typing import Optional, List import sqlite3 #dependency imports -from use_cases.interfaces.repositories import IUserRepository -from entities import User +from use_cases.user_repository import IUserRepository +from entities.user import User class SQLUserRepository(IUserRepository): def __init__(self, db_file="framework_driver/db/shop.db"): diff --git a/src/interface_adapters/controllers/user_controller.py b/src/interface_adapters/user_controller.py similarity index 100% rename from src/interface_adapters/controllers/user_controller.py rename to src/interface_adapters/user_controller.py diff --git a/src/main.py b/src/main.py index f298613..e36456b 100644 --- a/src/main.py +++ b/src/main.py @@ -1,5 +1,5 @@ -from interface_adapters.controllers.product_controller import router as product_router -from interface_adapters.controllers.user_controller import router as user_router +from interface_adapters.product_controller import router as product_router +from interface_adapters.user_controller import router as user_router from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from fastapi.responses import RedirectResponse diff --git a/src/setup_db.py b/src/setup_db.py index eeb877d..068be30 100644 --- a/src/setup_db.py +++ b/src/setup_db.py @@ -1,6 +1,6 @@ from framework_driver.db import db_setup -from interface_adapters.repositories import sql_product_repository -from interface_adapters.repositories import sql_user_repository +from interface_adapters import sql_product_repository +from interface_adapters import sql_user_repository db_setup.main() sql_product_repository.main() sql_user_repository.main() \ No newline at end of file diff --git a/src/use_cases/interactors/create_user.py b/src/use_cases/create_user.py similarity index 75% rename from src/use_cases/interactors/create_user.py rename to src/use_cases/create_user.py index b29bde5..681e716 100644 --- a/src/use_cases/interactors/create_user.py +++ b/src/use_cases/create_user.py @@ -4,6 +4,10 @@ from typing import Optional #dependency imports #TODO: use correct dependencies +#TODO: Create InputPort + +#TODO: Create OutputPort + class CreateUser: def __init__(self): pass diff --git a/src/use_cases/interactors/__init__.py b/src/use_cases/interactors/__init__.py deleted file mode 100644 index 10727b3..0000000 --- a/src/use_cases/interactors/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -import importlib -import pkgutil -import inspect - -__all__ = [] -for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): - module = importlib.import_module(f".{module_name}", __name__) - for name, obj in inspect.getmembers(module, inspect.isclass): - if obj.__module__ == module.__name__: - globals()[name] = obj - __all__.append(name) \ No newline at end of file diff --git a/src/use_cases/interactors/view_all_products.py b/src/use_cases/interactors/view_all_products.py deleted file mode 100644 index ed97205..0000000 --- a/src/use_cases/interactors/view_all_products.py +++ /dev/null @@ -1,21 +0,0 @@ -#python imports -from typing import Optional, List - -#dependency imports -from entities import Product -from use_cases.interfaces.repositories import IProductRepository -from use_cases.interfaces.ports import IViewAllProductsInputPort, IViewAllProductsOutputPort - -class ViewAllProducts(IViewAllProductsInputPort): - def __init__(self, product_repository: IProductRepository, output_port: IViewAllProductsOutputPort): - self.product_repository = product_repository - self.output_port = output_port - - def execute(self) -> Optional[List[Product]]: - """ - Fetches the product data from the repository. - """ - product_data = self.product_repository.get_all_products() - if not product_data: - return None - return self.output_port.present(product_data) \ No newline at end of file diff --git a/src/use_cases/interactors/view_product.py b/src/use_cases/interactors/view_product.py deleted file mode 100644 index 93ca21a..0000000 --- a/src/use_cases/interactors/view_product.py +++ /dev/null @@ -1,22 +0,0 @@ -#python imports -from typing import Optional - -#dependency imports -from entities import Product -from use_cases.interfaces.repositories import IProductRepository -from use_cases.interfaces.ports import IViewProductInputPort, IViewProductOutputPort - -class ViewProduct(IViewProductInputPort): - def __init__(self, product_repository: IProductRepository, output_port: IViewProductOutputPort): - self.product_repository = product_repository - self.output_port = output_port - - def execute(self, product_id: int) -> Optional[Product]: - """ - Fetches the product data from the repository. - """ - product_data = self.product_repository.get_product_by_id(product_id) - if not product_data: - return None - - return self.output_port.present(product_data) \ No newline at end of file diff --git a/src/use_cases/interfaces/ports/__init__.py b/src/use_cases/interfaces/ports/__init__.py deleted file mode 100644 index 10727b3..0000000 --- a/src/use_cases/interfaces/ports/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -import importlib -import pkgutil -import inspect - -__all__ = [] -for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): - module = importlib.import_module(f".{module_name}", __name__) - for name, obj in inspect.getmembers(module, inspect.isclass): - if obj.__module__ == module.__name__: - globals()[name] = obj - __all__.append(name) \ No newline at end of file diff --git a/src/use_cases/interfaces/ports/view_all_products_input_port.py b/src/use_cases/interfaces/ports/view_all_products_input_port.py deleted file mode 100644 index 596eb00..0000000 --- a/src/use_cases/interfaces/ports/view_all_products_input_port.py +++ /dev/null @@ -1,6 +0,0 @@ -class IViewAllProductsInputPort: - def execute(self): - """ - Abstract method to execute use case. - """ - raise NotImplementedError("execute must be implemented by a subclass") \ No newline at end of file diff --git a/src/use_cases/interfaces/ports/view_all_products_output_port.py b/src/use_cases/interfaces/ports/view_all_products_output_port.py deleted file mode 100644 index a2a19a7..0000000 --- a/src/use_cases/interfaces/ports/view_all_products_output_port.py +++ /dev/null @@ -1,8 +0,0 @@ -from entities import Product -from typing import List -class IViewAllProductsOutputPort: - def present(self, product_list:List[Product]): - """ - Abstract method to execute use case. - """ - raise NotImplementedError("execute must be implemented by a subclass") \ No newline at end of file diff --git a/src/use_cases/interfaces/ports/view_product_input_port.py b/src/use_cases/interfaces/ports/view_product_input_port.py deleted file mode 100644 index fe9e79d..0000000 --- a/src/use_cases/interfaces/ports/view_product_input_port.py +++ /dev/null @@ -1,6 +0,0 @@ -class IViewProductInputPort: - def execute(self, product_id:int): - """ - Abstract method to execute use case. - """ - raise NotImplementedError("execute must be implemented by a subclass") \ No newline at end of file diff --git a/src/use_cases/interfaces/ports/view_product_output_port.py b/src/use_cases/interfaces/ports/view_product_output_port.py deleted file mode 100644 index 06e812d..0000000 --- a/src/use_cases/interfaces/ports/view_product_output_port.py +++ /dev/null @@ -1,7 +0,0 @@ -from entities import Product -class IViewProductOutputPort: - def present(self, product:Product): - """ - Abstract method to execute use case. - """ - raise NotImplementedError("execute must be implemented by a subclass") \ No newline at end of file diff --git a/src/use_cases/interfaces/repositories/__init__.py b/src/use_cases/interfaces/repositories/__init__.py deleted file mode 100644 index 10727b3..0000000 --- a/src/use_cases/interfaces/repositories/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -import importlib -import pkgutil -import inspect - -__all__ = [] -for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): - module = importlib.import_module(f".{module_name}", __name__) - for name, obj in inspect.getmembers(module, inspect.isclass): - if obj.__module__ == module.__name__: - globals()[name] = obj - __all__.append(name) \ No newline at end of file diff --git a/src/use_cases/interfaces/repositories/product_repository.py b/src/use_cases/product_repository.py similarity index 93% rename from src/use_cases/interfaces/repositories/product_repository.py rename to src/use_cases/product_repository.py index e5a56df..e52002a 100644 --- a/src/use_cases/interfaces/repositories/product_repository.py +++ b/src/use_cases/product_repository.py @@ -1,7 +1,7 @@ from typing import Optional, List #dependency imports -from entities import Product +from entities.product import Product class IProductRepository: def get_product_by_id(self, product_id: int) -> Optional[Product]: diff --git a/src/use_cases/interfaces/repositories/user_repository.py b/src/use_cases/user_repository.py similarity index 100% rename from src/use_cases/interfaces/repositories/user_repository.py rename to src/use_cases/user_repository.py diff --git a/src/use_cases/view_all_products.py b/src/use_cases/view_all_products.py new file mode 100644 index 0000000..4730353 --- /dev/null +++ b/src/use_cases/view_all_products.py @@ -0,0 +1,34 @@ +#python imports +from typing import Optional, List + +#dependency imports +from entities.product import Product +from use_cases.product_repository import IProductRepository + +class IViewAllProductsInputPort: + def execute(self): + """ + Abstract method to execute use case. + """ + raise NotImplementedError("execute must be implemented by a subclass") + +class IViewAllProductsOutputPort: + def present(self, product_list:List[Product]): + """ + Abstract method to execute use case. + """ + raise NotImplementedError("execute must be implemented by a subclass") + +class ViewAllProducts(IViewAllProductsInputPort): + def __init__(self, product_repository: IProductRepository, output_port: IViewAllProductsOutputPort): + self.product_repository = product_repository + self.output_port = output_port + + def execute(self) -> Optional[List[Product]]: + """ + Fetches the product data from the repository. + """ + product_data = self.product_repository.get_all_products() + if not product_data: + return None + return self.output_port.present(product_data) \ No newline at end of file diff --git a/src/use_cases/view_product.py b/src/use_cases/view_product.py new file mode 100644 index 0000000..d225ebd --- /dev/null +++ b/src/use_cases/view_product.py @@ -0,0 +1,35 @@ +#python imports +from typing import Optional + +#dependency imports +from entities.product import Product +from use_cases.product_repository import IProductRepository + +class IViewProductInputPort: + def execute(self, product_id:int): + """ + Abstract method to execute use case. + """ + raise NotImplementedError("execute must be implemented by a subclass") + +class IViewProductOutputPort: + def present(self, product:Product): + """ + Abstract method to execute use case. + """ + raise NotImplementedError("execute must be implemented by a subclass") + +class ViewProduct(IViewProductInputPort): + def __init__(self, product_repository: IProductRepository, output_port: IViewProductOutputPort): + self.product_repository = product_repository + self.output_port = output_port + + def execute(self, product_id: int): + """ + Fetches the product data from the repository. + """ + product_data = self.product_repository.get_product_by_id(product_id) + if not product_data: + return None + + return self.output_port.present(product_data) \ No newline at end of file