"""This module defines the /lda route for the FastAPI application.""" import logging from fastapi import APIRouter from fastapi.responses import JSONResponse from models.database import lda_collection # pylint: disable=import-error # Configure logger logger = logging.getLogger(__name__) # Create FastAPI Router router = APIRouter(prefix="/lda", tags=["lda"]) @router.get('/{filter_type}') async def get_lda_results(filter_type: str): """ Retrieve LDA results from MongoDB by filter_type. Args: filter_type (str): Time filter type ('today', 'week', 'month') Returns: JSON response with LDA results or error message """ try: # Validate filter_type valid_filters = ['today', 'week', 'month'] if filter_type not in valid_filters: return JSONResponse(content={ 'error': 'Invalid filter_type', 'message': f'filter_type must be one of: {valid_filters}' }, status_code=400) if filter_type == 'today': filter_type = 'daily' # Retrieve from MongoDB document = lda_collection.find_one({'_id': filter_type}) if document is None: return JSONResponse(content={ 'error': 'Results not found', 'message': f'No LDA results found for {filter_type}' }, status_code=404) # Remove MongoDB ObjectId for JSON serialization document.pop('_id', None) logger.info("Successfully retrieved LDA results for %s from MongoDB", filter_type) return JSONResponse(content={ 'success': True, 'filter_type': filter_type, 'results': document['result'] }, status_code=200) except Exception as e: # pylint: disable=broad-exception-caught logger.error("Error retrieving LDA results for %s: %s", filter_type, e) return JSONResponse(content={ 'error': 'Internal server error', 'message': 'Failed to retrieve LDA results' }, status_code=500) @router.get('') async def get_all_lda_results(): """ Retrieve all LDA results from MongoDB. Returns: JSON response with all LDA results """ try: # Retrieve all from MongoDB documents = list(lda_collection.find()) # Remove MongoDB ObjectIds for JSON serialization for document in documents: document.pop('_id', None) logger.info("Successfully retrieved %d LDA results from MongoDB", len(documents)) return JSONResponse(content={ 'success': True, 'results': documents, 'count': len(documents) }, status_code=200) except Exception as e: # pylint: disable=broad-exception-caught logger.error("Error retrieving all LDA results: %s", e) return JSONResponse(content={ 'error': 'Internal server error', 'message': 'Failed to retrieve LDA results' }, status_code=500)