Spaces:
Sleeping
Sleeping
File size: 1,376 Bytes
7952f32 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | """High-level API layer that wires models, storage, and validators together."""
from __future__ import annotations
from graphforge.sample_repos.task_manager.models import Task
from graphforge.sample_repos.task_manager.storage import TaskStore
from graphforge.sample_repos.task_manager.validators import validate_priority, validate_tags, validate_title
_store = TaskStore()
def create_task(
title: str,
priority: str = "medium",
tags: list[str] | None = None,
) -> Task:
"""Create and persist a new task.
Raises ValueError if title or tags are invalid.
"""
if not validate_title(title):
raise ValueError(f"Invalid title: {title!r}")
resolved_tags = tags or []
if not validate_tags(resolved_tags):
raise ValueError(f"Invalid tags: {resolved_tags!r}")
task = Task(title=title, priority=priority, tags=resolved_tags)
_store.add(task)
return task
def get_all_tasks() -> list[Task]:
"""Return every task in the store."""
return _store.all()
def complete_task(title: str) -> bool:
"""Mark a task done by title. Returns True if found, False otherwise."""
task = _store.find_by_title(title)
if task:
task.complete()
return True
return False
def reset_store() -> None:
"""Clear the store — used by tests between runs."""
global _store
_store = TaskStore()
|