jira-ai-fixer/app/schemas/issue.py

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"