01

Sample Code

task-lifecycle.py
from uuid import uuid4
from datetime import datetime, UTC

from psp.components.todos.domain import (
    Task, TaskContainer, TaskStatus, Priority, ContainerType,
)
from psp.components.todos.adapters.persistence import (
    InMemoryTaskRepository, InMemoryTaskContainerRepository,
)

# Setup
task_repo = InMemoryTaskRepository()
container_repo = InMemoryTaskContainerRepository()

owner_id = uuid4()
now = datetime.now(UTC)

# Create a container first
inbox = TaskContainer(
    id=uuid4(),
    owner_id=owner_id,
    name="Inbox",
    container_type=ContainerType.LIST,
)
container_repo.save(inbox)

# Create a task
task = Task(
    id=uuid4(),
    owner_id=owner_id,
    container_id=inbox.id,
    title="Buy groceries",
    priority=Priority.MEDIUM,
    created_at=now,
    updated_at=now,
)
task_repo.save(task)
print(f"Created: {task.title} [{task.status.value}]")

# Complete the task
completed_task = task.complete(datetime.now(UTC))
task_repo.save(completed_task)
print(f"Completed: {completed_task.title} at {completed_task.completed_at}")

# Reopen the task
reopened_task = completed_task.reopen(datetime.now(UTC))
task_repo.save(reopened_task)
print(f"Reopened: {reopened_task.title} [{reopened_task.status.value}]")