tickethub/backend/app/models/__init__.py

67 lines
1.5 KiB
Python

from pydantic import BaseModel, Field
from typing import Optional, List
from datetime import datetime
from enum import Enum
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"
class ProjectCreate(BaseModel):
name: str
key: str = Field(..., pattern="^[A-Z]{2,10}$")
description: Optional[str] = None
webhook_url: Optional[str] = None
class Project(ProjectCreate):
id: int
created_at: datetime
ticket_count: int = 0
class TicketCreate(BaseModel):
project_id: int
title: str
description: str
priority: TicketPriority = TicketPriority.MEDIUM
labels: List[str] = []
class Ticket(TicketCreate):
id: int
key: str # e.g., "PROJ-123"
status: TicketStatus = TicketStatus.OPEN
created_at: datetime
updated_at: datetime
class TicketUpdate(BaseModel):
title: Optional[str] = None
description: Optional[str] = None
status: Optional[TicketStatus] = None
priority: Optional[TicketPriority] = None
labels: Optional[List[str]] = None
class Comment(BaseModel):
id: int
ticket_id: int
author: str
content: str
created_at: datetime
class CommentCreate(BaseModel):
author: str = "system"
content: str
class WebhookConfig(BaseModel):
id: int
project_id: int
url: str
events: List[str] = ["ticket.created", "ticket.updated", "comment.added"]
active: bool = True