"""Dashboard API schemas. Defines response models for the dashboard endpoint that aggregates task statistics, workload, and project health summaries. """ from pydantic import BaseModel from decimal import Decimal from typing import Optional from app.schemas.workload import LoadLevel class TaskStatistics(BaseModel): """User's task statistics for dashboard display. Attributes: assigned_count: Total tasks assigned to user (not completed) due_this_week: Tasks with due_date in current week overdue_count: Tasks past due_date, not completed completion_rate: Percentage of completed tasks (0-100) """ assigned_count: int due_this_week: int overdue_count: int completion_rate: float class WorkloadSummary(BaseModel): """User's workload summary for dashboard display. Attributes: allocated_hours: Total estimated hours from tasks due this week capacity_hours: User's weekly capacity load_percentage: Percentage of capacity used load_level: normal (<80%), warning (80-99%), overloaded (>=100%) """ allocated_hours: Decimal capacity_hours: Decimal load_percentage: Optional[Decimal] = None load_level: LoadLevel class HealthSummary(BaseModel): """Aggregated project health summary for dashboard display. Attributes: total_projects: Total number of active projects healthy_count: Projects with health_score >= 80 at_risk_count: Projects with health_score 50-79 critical_count: Projects with health_score < 50 average_health_score: Average health score across all projects """ total_projects: int healthy_count: int at_risk_count: int critical_count: int average_health_score: float class DashboardResponse(BaseModel): """Complete dashboard response aggregating all widgets. Single endpoint response that combines: - Task statistics for the current user - Current week workload summary - Project health summary This minimizes frontend API calls and ensures data consistency. """ task_stats: TaskStatistics workload: WorkloadSummary health_summary: HealthSummary