46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
"""Schemas for sidebar stats endpoint."""
|
|
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class SidebarActiveSession(BaseModel):
|
|
"""An active or paused session for the activity feed."""
|
|
session_id: UUID
|
|
tree_name: str
|
|
tree_id: UUID
|
|
tree_type: str
|
|
started_at: datetime
|
|
ticket_number: Optional[str] = None
|
|
psa_ticket_id: Optional[str] = None
|
|
|
|
|
|
class SidebarRecentSession(BaseModel):
|
|
"""A recently completed session for the activity feed."""
|
|
session_id: UUID
|
|
tree_name: str
|
|
tree_id: UUID
|
|
tree_type: str
|
|
completed_at: datetime
|
|
|
|
|
|
class SidebarTreeCounts(BaseModel):
|
|
"""Tree counts for All Flows sub-items."""
|
|
total: int
|
|
troubleshooting: int
|
|
procedural: int
|
|
maintenance: int
|
|
|
|
|
|
class SidebarStatsResponse(BaseModel):
|
|
"""Response for GET /sessions/sidebar-stats."""
|
|
resolved_today: int
|
|
active_count: int
|
|
total_session_minutes_today: int
|
|
tree_counts: SidebarTreeCounts
|
|
active_sessions: list[SidebarActiveSession]
|
|
recent_completions: list[SidebarRecentSession]
|