from __future__ import annotations from datetime import datetime from pathlib import Path from typing import Optional from .storage import JsonStorage STORE = JsonStorage(Path(__file__).resolve().parents[1] / "data" / "tasks.json", []) def list_tasks() -> list[dict]: tasks = STORE.read() return sorted(tasks, key=lambda item: (item.get("completed", False), item.get("created_at", ""))) def add_task(text: str) -> dict: tasks = STORE.read() next_id = max((task["id"] for task in tasks), default=0) + 1 task = { "id": next_id, "text": text.strip(), "completed": False, "created_at": datetime.now().isoformat(), } tasks.append(task) STORE.write(tasks) return task def complete_task(task_id: int) -> Optional[dict]: tasks = STORE.read() updated = None for task in tasks: if task["id"] == task_id: task["completed"] = True task["completed_at"] = datetime.now().isoformat() updated = task break if updated: STORE.write(tasks) return updated def delete_task(task_id: int) -> Optional[dict]: tasks = STORE.read() kept: list[dict] = [] removed = None for task in tasks: if task["id"] == task_id: removed = task continue kept.append(task) if removed: STORE.write(kept) return removed