from __future__ import annotations from typing import Annotated from fastapi import APIRouter, Depends, HTTPException, status from app.api.deps import require_auth from app.core.logger import get_logger from app.models.schemas import DatabaseQueryRequest, DatabaseQueryResponse from app.services.database_service import DatabaseService router = APIRouter() _logger = get_logger(__name__) @router.post( "/database/query", response_model=DatabaseQueryResponse, summary="Execute queries against MySQL, PostgreSQL, or MongoDB", ) async def execute_database_query( body: DatabaseQueryRequest, token: Annotated[str, Depends(require_auth)], db_service: Annotated[DatabaseService, Depends()] = None, ) -> DatabaseQueryResponse: if db_service is None: db_service = DatabaseService() _logger.info( "Database query request: type=%s, %s", body.db_type, body.connection.safe_repr(), ) try: return await db_service.execute_query(body) except HTTPException: raise except Exception as exc: _logger.error("Unexpected error processing database query: %s", exc) raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail={ "success": False, "execution_time_ms": 0, "error": {"message": f"Internal error: {exc}", "code": "INTERNAL_ERROR"}, }, )