initial work of the arcline tickets

This commit is contained in:
Blake Ridgway
2026-07-13 20:44:57 -05:00
parent 28e38916f2
commit 7807a674b3
13 changed files with 1199 additions and 372 deletions

54
models.py Normal file
View File

@@ -0,0 +1,54 @@
"""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)