jira-webhook-llm/api/handlers.py
2025-07-18 00:57:28 +02:00

92 lines
3.1 KiB
Python

from fastapi import APIRouter, Request, HTTPException, Depends
from fastapi.responses import JSONResponse
from typing import Dict, Any
import config
from llm.models import LLMResponse, JiraWebhookPayload
from database.database import get_db_session # Removed Session import here
from sqlalchemy.orm import Session # Added correct SQLAlchemy import
from database.crud import get_all_analysis_records, delete_all_analysis_records, get_analysis_by_id, create_analysis_record
router = APIRouter(
prefix="/api",
tags=["API"]
)
@router.get("/request")
async def get_analysis_records_endpoint(db: Session = Depends(get_db_session)):
"""Get analysis records"""
try:
records = get_all_analysis_records(db)
return JSONResponse(
status_code=200,
content={"data": records}
)
except Exception as e:
return JSONResponse(
status_code=500,
content={"error": str(e)}
)
@router.post("/request", status_code=201)
async def create_analysis_record_endpoint(
payload: JiraWebhookPayload,
db: Session = Depends(get_db_session)
):
"""Create a new Jira analysis record"""
try:
db_record = create_analysis_record(db, payload)
return JSONResponse(
status_code=201,
content={"message": "Record created successfully", "record_id": db_record.id}
)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Failed to create record: {str(e)}")
@router.post("/test-llm")
async def test_llm_endpoint(db: Session = Depends(get_db_session)):
"""Test endpoint for LLM integration"""
try:
from llm.chains import llm
test_prompt = "What is 1 + 1? Respond only with the number."
response = llm.invoke(test_prompt)
return {
"status": "success",
"message": "LLM integration test successful",
"response": str(response)
}
except Exception as e:
return JSONResponse(
status_code=500,
content={
"status": "error",
"message": f"LLM test failed: {str(e)}"
}
)
@router.delete("/request")
async def delete_analysis_records_endpoint(db: Session = Depends(get_db_session)):
"""Delete analysis records"""
try:
deleted_count = delete_all_analysis_records(db)
return JSONResponse(
status_code=200,
content={"message": f"Successfully deleted {deleted_count} records", "deleted_count": deleted_count}
)
except Exception as e:
return JSONResponse(
status_code=500,
content={"error": str(e)})
@router.get("/request/{record_id}")
async def get_analysis_record_endpoint(record_id: int, db: Session = Depends(get_db_session)):
"""Get specific analysis record by ID"""
record = get_analysis_by_id(db, record_id)
if not record:
raise HTTPException(status_code=404, detail="Analysis record not found")
return JSONResponse(
status_code=200,
content=record.dict() # Ensure proper data serialization
)