"""Ticket data model for the ticketing system.""" from dataclasses import dataclass, field, asdict from datetime import datetime, timezone from enum import Enum from typing import Optional class TicketStatus(str, Enum): OPEN = "open" IN_PROGRESS = "in_progress" RESOLVED = "resolved" CLOSED = "closed" class TicketPriority(str, Enum): LOW = "low" MEDIUM = "medium" HIGH = "high" CRITICAL = "critical" @dataclass class Ticket: title: str description: str priority: TicketPriority = TicketPriority.MEDIUM status: TicketStatus = TicketStatus.OPEN assignee: str = "" project: str = "" id: Optional[int] = None created_at: str = "" updated_at: str = "" def __post_init__(self) -> None: now = datetime.now(timezone.utc).isoformat() if not self.created_at: self.created_at = now if not self.updated_at: self.updated_at = now def to_dict(self) -> dict: data = asdict(self) data["priority"] = self.priority.value data["status"] = self.status.value return data @classmethod def from_dict(cls, data: dict) -> "Ticket": data = dict(data) # shallow copy data["priority"] = TicketPriority(data["priority"]) data["status"] = TicketStatus(data["status"]) return cls(**data)