75 lines
2.0 KiB
Python
75 lines
2.0 KiB
Python
"""Issue schemas."""
|
|
from datetime import datetime
|
|
from typing import Optional, List, Dict, Any
|
|
from pydantic import BaseModel
|
|
from app.models.issue import IssueStatus, IssuePriority
|
|
|
|
class IssueBase(BaseModel):
|
|
title: str
|
|
description: Optional[str] = None
|
|
priority: IssuePriority = IssuePriority.MEDIUM
|
|
|
|
class IssueCreate(IssueBase):
|
|
external_id: Optional[str] = None
|
|
external_key: Optional[str] = None
|
|
external_url: Optional[str] = None
|
|
source: Optional[str] = None
|
|
labels: Optional[List[str]] = None
|
|
callback_url: Optional[str] = None
|
|
raw_payload: Optional[Dict[str, Any]] = None
|
|
|
|
class IssueUpdate(BaseModel):
|
|
title: Optional[str] = None
|
|
description: Optional[str] = None
|
|
priority: Optional[IssuePriority] = None
|
|
status: Optional[IssueStatus] = None
|
|
labels: Optional[List[str]] = None
|
|
|
|
class IssueRead(IssueBase):
|
|
id: int
|
|
organization_id: int
|
|
integration_id: Optional[int] = None
|
|
external_id: Optional[str] = None
|
|
external_key: Optional[str] = None
|
|
external_url: Optional[str] = None
|
|
source: Optional[str] = None
|
|
labels: Optional[List[str]] = None
|
|
|
|
status: IssueStatus
|
|
root_cause: Optional[str] = None
|
|
affected_files: Optional[List[str]] = None
|
|
suggested_fix: Optional[str] = None
|
|
confidence: Optional[float] = None
|
|
|
|
pr_url: Optional[str] = None
|
|
pr_branch: Optional[str] = None
|
|
pr_status: Optional[str] = None
|
|
|
|
sla_deadline: Optional[datetime] = None
|
|
sla_breached: bool = False
|
|
|
|
created_at: datetime
|
|
analysis_completed_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
class IssueStats(BaseModel):
|
|
total: int
|
|
pending: int
|
|
analyzing: int
|
|
analyzed: int
|
|
pr_created: int
|
|
completed: int
|
|
error: int
|
|
avg_confidence: float
|
|
avg_analysis_time_seconds: Optional[float] = None
|
|
by_source: Dict[str, int]
|
|
by_priority: Dict[str, int]
|
|
sla_breached: int
|
|
|
|
class IssueComment(BaseModel):
|
|
author: str
|
|
content: str
|
|
author_type: str = "user"
|