Spaces:
Running
Running
| 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, DatabaseValidateRequest, DatabaseValidateResponse | |
| from app.services.database_service import DatabaseService | |
| router = APIRouter() | |
| _logger = get_logger(__name__) | |
| async def validate_database( | |
| body: DatabaseValidateRequest, | |
| token: Annotated[str, Depends(require_auth)], | |
| db_service: Annotated[DatabaseService, Depends()] = None, | |
| ) -> DatabaseValidateResponse: | |
| if db_service is None: | |
| db_service = DatabaseService() | |
| _logger.info("Database validate request: %s", body.connection.safe_repr()) | |
| try: | |
| return await db_service.validate_connection(body) | |
| except Exception as exc: | |
| _logger.error("Unexpected error validating database: %s", exc) | |
| raise HTTPException( | |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | |
| detail={"success": False, "message": f"Internal error: {exc}"}, | |
| ) | |
| 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"}, | |
| }, | |
| ) | |