Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, Depends, HTTPException, Query | |
| import logging | |
| from typing import List, Optional | |
| from pydantic import BaseModel | |
| from api.middleware.firebase_auth import get_current_user | |
| from services.supabase_service import db | |
| from services.agent_orchestrator import orchestrator | |
| from models.schemas import IssueCreate, IssueResponse | |
| logger = logging.getLogger(__name__) | |
| router = APIRouter() | |
| class IssueResponseAction(BaseModel): | |
| response: str | |
| async def list_issues(repo_id: str, status: Optional[str] = Query(None), current_user: dict = Depends(get_current_user)): | |
| logger.debug(f"[ISSUES_ROUTE] Listing issues for repo_id: {repo_id}, status: {status}") | |
| issues = await db.get_issues_by_repo(repo_id, status) | |
| return issues | |
| async def create_issue(repo_id: str, issue: IssueCreate, current_user: dict = Depends(get_current_user)): | |
| logger.info(f"[ISSUES_ROUTE] Creating new issue for repo_id: {repo_id}") | |
| new_issue = await db.create_issue(repo_id, issue.model_dump()) | |
| return new_issue | |
| async def get_issue(repo_id: str, issue_id: str, current_user: dict = Depends(get_current_user)): | |
| logger.debug(f"[ISSUES_ROUTE] Getting issue details for repo_id: {repo_id}, issue_id: {issue_id}") | |
| issues = await db.get_issues_by_repo(repo_id) | |
| issue = next((i for i in issues if i["id"] == issue_id), None) | |
| if not issue: | |
| logger.warning(f"[ISSUES_ROUTE] Issue {issue_id} not found in repo {repo_id}") | |
| raise HTTPException(status_code=404, detail="Issue not found") | |
| return issue | |
| async def respond_to_issue(repo_id: str, issue_id: str, action: IssueResponseAction, current_user: dict = Depends(get_current_user)): | |
| response = action.response.lower() | |
| logger.info(f"[ISSUES_ROUTE] User {current_user.get('uid')} responding to issue {issue_id} with: {response}") | |
| if response in ["yes", "no"]: | |
| await orchestrator.handle_user_response(repo_id, issue_id, response) | |
| return {"message": f"Response '{response}' processed"} | |
| else: | |
| logger.warning(f"[ISSUES_ROUTE] Invalid response '{response}' for issue {issue_id}") | |
| raise HTTPException(status_code=400, detail="Response must be 'yes' or 'no'") | |