51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
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)
|