Implement task API with input validation; implement error handling; refactoring

This commit is contained in:
Lexi / Zoe 2022-09-23 20:38:34 +02:00
parent 19d264a03b
commit 50aff05614
Signed by: binaryDiv
GPG key ID: F8D4956E224DA232
24 changed files with 612 additions and 131 deletions

View file

@ -0,0 +1,50 @@
from tofu_api.models import Task
from tofu_api.repositories import TaskRepository
from .validators import TaskCreateData, TaskUpdateData
class TaskHandler:
"""
Handles operations on tasks.
"""
task_repository: TaskRepository
def __init__(self, *, task_repository: TaskRepository):
self.task_repository = task_repository
def fetch_task(self, task_id: int) -> Task:
"""
Fetches a single task by its ID from the database.
Raises an ObjectNotFoundError if the task was not found.
"""
return self.task_repository.fetch_by_id(task_id)
def fetch_all_tasks(self) -> list[Task]:
"""
Fetches a list of all tasks.
"""
return self.task_repository.fetch_all()
def create_task(self, create_data: TaskCreateData) -> Task:
"""
Creates a new task, saves it to the database and returns it.
"""
task = Task()
task.update_from(create_data)
self.task_repository.save_resource(task)
return task
def update_task(self, task: Task, update_data: TaskUpdateData) -> Task:
"""
Updates a Task object with new data.
"""
task.update_from(update_data)
self.task_repository.save_resource(task)
return task
def delete_task(self, task: Task) -> None:
"""
Deletes a task from the database.
"""
self.task_repository.delete_resource(task)