implement controller solution

uebung_frameworks
michael 2025-02-03 01:02:02 +01:00
parent 1ca9dca2df
commit 3193960125
2 changed files with 46 additions and 7 deletions

View File

@ -11,3 +11,15 @@ class SQLUserRepository(IUserRepository):
"""Initialize the UserDatabase with a connection to the SQLite database."""
self.conn = sqlite3.connect(db_file)
self.conn.row_factory = sqlite3.Row
def create_user(self, user_name, user_email, user_password):
"""Add a new user to the users table and return the new user's id."""
sql = "INSERT INTO users (name, email, password) VALUES (?, ?, ?)"
try:
c = self.conn.cursor()
c.execute(sql, (user_name, user_email, user_password))
self.conn.commit()
return User(user_name, user_email, user_password, c.lastrowid)
except sqlite3.Error as e:
print(e)
return None

View File

@ -7,22 +7,49 @@ from fastapi.templating import Jinja2Templates
from pydantic import BaseModel
#dependency imports
#TODO: use correct dependencies
from entities.user import User
from use_cases.create_user import CreateUser, ICreateUserInputPort, ICreateUserOutputPort
from interface_adapters.sql_user_repository import SQLUserRepository
#TODO: define request and response data
class UserDTO(BaseModel):
id: int
user_name: str
user_email: str
class CreateUserRequest(BaseModel):
pass
user_name: str
user_email: str
user_password: str
class CreateUserResponse(BaseModel):
pass
status: str
data: UserDTO
#TODO: implement CreateUserController and CreateUserPresenter
class CreateUserPresenter(ICreateUserOutputPort):
def present(self, user:User) -> CreateUserResponse:
"""Format the response data for API."""
if not user:
return None
user_dto = UserDTO(
id = user.id,
user_name = user.name,
user_email = user.email)
response = CreateUserResponse(status="success",data=user_dto)
return response
class CreateUserController:
def __init__(self, input_port: ICreateUserInputPort) -> None:
self.input_port = input_port
#TODO: initialize all components
create_user_controller = None
def handle_request(self, request:CreateUserRequest):
"""Handles the incoming API request and delegates to the use case."""
return self.input_port.execute(request.user_name, request.user_email, request.user_password)
user_repository = SQLUserRepository()
create_user_presenter = CreateUserPresenter()
create_user_use_case = CreateUser(user_repository, create_user_presenter)
create_user_controller = CreateUserController(create_user_use_case)
router = APIRouter()