File size: 5,048 Bytes
be0c7a2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# modules/database/claude_recommendations_mongo_db.py
from datetime import datetime, timezone, timedelta
import logging
from .mongo_db import get_collection

logger = logging.getLogger(__name__)
COLLECTION_NAME = 'student_claude_recommendations'

def store_claude_recommendation(username, text, metrics, text_type, recommendations):
    """

    Guarda las recomendaciones generadas por Claude AI.

    

    Args:

        username: Nombre del usuario

        text: Texto analizado

        metrics: M茅tricas del an谩lisis

        text_type: Tipo de texto (academic_article, university_work, general_communication)

        recommendations: Recomendaciones generadas por Claude

        

    Returns:

        bool: True si se guard贸 correctamente, False en caso contrario

    """
    try:
        # Verificar par谩metros
        if not all([username, text, recommendations]):
            logger.error("Faltan par谩metros requeridos para guardar recomendaciones de Claude")
            return False
            
        collection = get_collection(COLLECTION_NAME)
        if collection is None:
            logger.error("No se pudo obtener la colecci贸n de recomendaciones de Claude")
            return False
            
        # Crear documento
        document = {
            'username': username,
            'timestamp': datetime.now(timezone.utc).isoformat(),
            'text': text,
            'metrics': metrics or {},
            'text_type': text_type,
            'recommendations': recommendations,
            'analysis_type': 'claude_recommendation'
        }
        
        # Insertar documento
        result = collection.insert_one(document)
        if result.inserted_id:
            logger.info(f"""

                Recomendaciones de Claude guardadas:

                - Usuario: {username}

                - ID: {result.inserted_id}

                - Tipo de texto: {text_type}

                - Longitud del texto: {len(text)}

            """)
            
            # Verificar almacenamiento
            storage_verified = verify_recommendation_storage(username)
            if not storage_verified:
                logger.warning("Verificaci贸n de almacenamiento de recomendaciones fall贸")
            
            return True
            
        logger.error("No se pudo insertar el documento de recomendaciones")
        return False
        
    except Exception as e:
        logger.error(f"Error guardando recomendaciones de Claude: {str(e)}")
        return False

def verify_recommendation_storage(username):
    """

    Verifica que las recomendaciones se est谩n guardando correctamente.

    

    Args:

        username: Nombre del usuario

        

    Returns:

        bool: True si la verificaci贸n es exitosa, False en caso contrario

    """
    try:
        collection = get_collection(COLLECTION_NAME)
        if collection is None:
            logger.error("No se pudo obtener la colecci贸n para verificaci贸n de recomendaciones")
            return False
            
        # Buscar documentos recientes del usuario
        timestamp_threshold = (datetime.now(timezone.utc) - timedelta(minutes=5)).isoformat()
        recent_docs = collection.find({
            'username': username,
            'timestamp': {'$gte': timestamp_threshold}
        }).sort('timestamp', -1).limit(1)
        
        docs = list(recent_docs)
        if docs:
            logger.info(f"""

                脷ltimo documento de recomendaciones guardado:

                - ID: {docs[0]['_id']}

                - Timestamp: {docs[0]['timestamp']}

                - Tipo de texto: {docs[0].get('text_type', 'N/A')}

            """)
            return True
            
        logger.warning(f"No se encontraron documentos recientes de recomendaciones para {username}")
        return False
        
    except Exception as e:
        logger.error(f"Error verificando almacenamiento de recomendaciones: {str(e)}")
        return False

def get_claude_recommendations(username, limit=10):
    """

    Obtiene las recomendaciones m谩s recientes de Claude para un usuario.

    

    Args:

        username: Nombre del usuario

        limit: N煤mero m谩ximo de recomendaciones a recuperar

        

    Returns:

        list: Lista de recomendaciones

    """
    try:
        collection = get_collection(COLLECTION_NAME)
        if collection is None:
            logger.error("No se pudo obtener la colecci贸n de recomendaciones")
            return []
            
        results = collection.find(
            {'username': username}
        ).sort('timestamp', -1).limit(limit)
        
        recommendations = list(results)
        logger.info(f"Recuperadas {len(recommendations)} recomendaciones de Claude para {username}")
        return recommendations
        
    except Exception as e:
        logger.error(f"Error obteniendo recomendaciones de Claude: {str(e)}")
        return []