Files
tickets/models.py
2026-07-13 20:44:57 -05:00

55 lines
1.3 KiB
Python

"""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)