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)