""" Issue management API. """ from fastapi import APIRouter, HTTPException from pydantic import BaseModel from typing import Optional, List from enum import Enum from datetime import datetime import logging logger = logging.getLogger(__name__) router = APIRouter() class IssueStatus(str, Enum): PENDING = "pending" ANALYZING = "analyzing" ANALYZED = "analyzed" FIX_GENERATED = "fix_generated" PR_CREATED = "pr_created" ACCEPTED = "accepted" REJECTED = "rejected" FAILED = "failed" class AnalyzedIssue(BaseModel): id: str jira_key: str title: str status: IssueStatus module: Optional[str] = None confidence: Optional[float] = None analysis_time_ms: Optional[int] = None affected_files: List[str] = [] root_cause: Optional[str] = None proposed_fix: Optional[str] = None pr_url: Optional[str] = None created_at: datetime updated_at: datetime class IssueListResponse(BaseModel): total: int items: List[AnalyzedIssue] @router.get("/", response_model=IssueListResponse) async def list_issues( status: Optional[IssueStatus] = None, module: Optional[str] = None, limit: int = 20, offset: int = 0, ): """ List analyzed issues with optional filters. """ # TODO: Implement database query return IssueListResponse(total=0, items=[]) @router.get("/{issue_id}", response_model=AnalyzedIssue) async def get_issue(issue_id: str): """ Get details of a specific analyzed issue. """ # TODO: Implement database query raise HTTPException(status_code=404, detail="Issue not found") @router.post("/{issue_id}/reanalyze") async def reanalyze_issue(issue_id: str): """ Trigger re-analysis of an issue. """ logger.info(f"🔄 Re-analyzing issue: {issue_id}") # TODO: Queue for re-analysis return {"status": "queued", "issue_id": issue_id} @router.get("/stats/summary") async def get_stats(): """ Get summary statistics for dashboard. """ # TODO: Implement stats calculation return { "total_issues": 0, "pending": 0, "analyzed": 0, "accepted": 0, "rejected": 0, "success_rate": 0.0, "avg_analysis_time_ms": 0, }