File size: 3,031 Bytes
5c3c401 72f4cb5 5c3c401 79e83eb 5c3c401 79e83eb 5c3c401 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
"""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)
|