Muhammad Abdur Rahman Saad
Update lda.py
79e83eb
"""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)