add I to interfaces. some formatting

uebung_entities
michael 2025-02-02 14:23:08 +01:00
parent 020ef2c4a3
commit 531db9fd02
8 changed files with 32 additions and 28 deletions

View File

@ -7,9 +7,9 @@ from fastapi.responses import HTMLResponse
from pydantic import BaseModel
#dependency imports
from entities import Product
from entities.product import Product
from use_cases.interactors import ViewProduct, ViewAllProducts
from use_cases.interfaces.ports import ViewProductInputPort, ViewAllProductsInputPort, ViewProductOutputPort, ViewAllProductsOutputPort
from use_cases.interfaces.ports import IViewProductInputPort, IViewAllProductsInputPort, IViewProductOutputPort, IViewAllProductsOutputPort
from interface_adapters.dtos import ProductDTO
from interface_adapters.repositories import SQLProductRepository
@ -21,15 +21,19 @@ class ViewProductResponse(BaseModel):
status: str
data: ProductDTO
class ViewProductPresenter(ViewProductOutputPort):
class ViewProductPresenter(IViewProductOutputPort):
def present(self, product:Product) -> ViewProductResponse:
"""Format the response data for API."""
product_dto=ProductDTO(id=product.id, name=product.name, description=product.description, price=product.price)
product_dto = ProductDTO(
id = product.id,
name = product.name,
description = product.description,
price = product.price)
response = ViewProductResponse(status="success",data=product_dto)
return response
class ViewProductController:
def __init__(self, input_port: ViewProductInputPort) -> None:
def __init__(self, input_port: IViewProductInputPort) -> None:
self.input_port = input_port
def handle_request(self, request:ViewProductRequest):
@ -46,7 +50,7 @@ class ViewAllProductsResponse(BaseModel):
status: str
data: List[ProductDTO]
class ViewAllProductsPresenter(ViewAllProductsOutputPort):
class ViewAllProductsPresenter(IViewAllProductsOutputPort):
def present(self, products:List[Product]) -> ViewAllProductsResponse:
"""Format the response data for API."""
products_dto=[ProductDTO(id=product.id, name=product.name, description=product.description, price=product.price) for product in products]
@ -54,7 +58,7 @@ class ViewAllProductsPresenter(ViewAllProductsOutputPort):
return response
class ViewAllProductsController:
def __init__(self, input_port: ViewAllProductsInputPort) -> None:
def __init__(self, input_port: IViewAllProductsInputPort) -> None:
self.input_port = input_port
def handle_request(self):

View File

@ -12,17 +12,6 @@ class SQLProductRepository(IProductRepository):
self.conn = sqlite3.connect(db_file)
self.conn.row_factory = sqlite3.Row
def add_product(self, product):
"""Add a new product to the products table."""
sql = "INSERT INTO products (name, price, description, quantity) VALUES (?, ?, ?, ?)"
try:
c = self.conn.cursor()
c.execute(sql, product)
self.conn.commit()
return c.lastrowid
except sqlite3.Error as e:
print(e)
def get_product_by_id(self, product_id) -> Optional[Product]:
"""Retrieve a product by its ID."""
sql = "SELECT * FROM products WHERE id = ?"
@ -35,6 +24,17 @@ class SQLProductRepository(IProductRepository):
print(e)
return None
def add_product(self, product):
"""Add a new product to the products table."""
sql = "INSERT INTO products (name, price, description, quantity) VALUES (?, ?, ?, ?)"
try:
c = self.conn.cursor()
c.execute(sql, product)
self.conn.commit()
return c.lastrowid
except sqlite3.Error as e:
print(e)
def get_all_products(self) -> Optional[List[Product]]:
"""Retrieve all products."""
sql = "SELECT * FROM products"

View File

@ -4,10 +4,10 @@ from typing import Optional, List
#dependency imports
from entities import Product
from use_cases.interfaces.repositories import IProductRepository
from use_cases.interfaces.ports import ViewAllProductsInputPort, ViewAllProductsOutputPort
from use_cases.interfaces.ports import IViewAllProductsInputPort, IViewAllProductsOutputPort
class ViewAllProducts(ViewAllProductsInputPort):
def __init__(self, product_repository: IProductRepository, output_port: ViewAllProductsOutputPort):
class ViewAllProducts(IViewAllProductsInputPort):
def __init__(self, product_repository: IProductRepository, output_port: IViewAllProductsOutputPort):
self.product_repository = product_repository
self.output_port = output_port

View File

@ -4,10 +4,10 @@ from typing import Optional
#dependency imports
from entities import Product
from use_cases.interfaces.repositories import IProductRepository
from use_cases.interfaces.ports import ViewProductInputPort, ViewProductOutputPort
from use_cases.interfaces.ports import IViewProductInputPort, IViewProductOutputPort
class ViewProduct(ViewProductInputPort):
def __init__(self, product_repository: IProductRepository, output_port: ViewProductOutputPort):
class ViewProduct(IViewProductInputPort):
def __init__(self, product_repository: IProductRepository, output_port: IViewProductOutputPort):
self.product_repository = product_repository
self.output_port = output_port

View File

@ -1,4 +1,4 @@
class ViewAllProductsInputPort:
class IViewAllProductsInputPort:
def execute(self):
"""
Abstract method to execute use case.

View File

@ -1,6 +1,6 @@
from entities import Product
from typing import List
class ViewAllProductsOutputPort:
class IViewAllProductsOutputPort:
def present(self, product_list:List[Product]):
"""
Abstract method to execute use case.

View File

@ -1,4 +1,4 @@
class ViewProductInputPort:
class IViewProductInputPort:
def execute(self, product_id:int):
"""
Abstract method to execute use case.

View File

@ -1,5 +1,5 @@
from entities import Product
class ViewProductOutputPort:
class IViewProductOutputPort:
def present(self, product:Product):
"""
Abstract method to execute use case.