initial work of the arcline tickets
This commit is contained in:
54
models.py
Normal file
54
models.py
Normal 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)
|
||||
|
||||
Reference in New Issue
Block a user