|
"""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 |
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
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: |
|
|
|
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' |
|
|
|
|
|
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) |
|
|
|
|
|
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: |
|
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: |
|
|
|
documents = list(lda_collection.find()) |
|
|
|
|
|
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: |
|
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) |
|
|