File size: 4,458 Bytes
12ffa62
fa173b2
12ffa62
fa173b2
12ffa62
 
 
 
0a09d3c
12ffa62
0a09d3c
12ffa62
 
991247e
 
 
 
fa173b2
 
991247e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fa173b2
0a09d3c
 
12ffa62
 
0a09d3c
fa173b2
0a09d3c
 
12ffa62
fa173b2
0a09d3c
 
 
991247e
 
 
 
 
 
 
12ffa62
fa173b2
 
 
 
 
 
 
 
0a09d3c
12ffa62
fa173b2
12ffa62
0a09d3c
152cbec
 
 
 
 
 
 
 
 
fa173b2
152cbec
 
 
fa173b2
 
152cbec
 
fa173b2
152cbec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fa173b2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# modules/database/current_situation_mongo_db.py
from datetime import datetime, timezone, timedelta
import logging
from .mongo_db import get_collection

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

def store_current_situation_result(username, text, metrics, feedback):
    """
    Guarda los resultados del análisis de situación actual.
    """
    try:
        # Verificar parámetros
        if not all([username, text, metrics]):
            logger.error("Faltan parámetros requeridos")
            return False

        collection = get_collection(COLLECTION_NAME)
        if collection is None:
            logger.error("No se pudo obtener la colección")
            return False

        # Formatear métricas para MongoDB
        formatted_metrics = {
            'vocabulary': {
                'score': metrics['vocabulary']['normalized_score'],
                'details': metrics['vocabulary']['details']
            },
            'structure': {
                'score': metrics['structure']['normalized_score'],
                'details': metrics['structure']['details']
            },
            'cohesion': {
                'score': metrics['cohesion']['normalized_score'],
                'details': metrics['cohesion']['details']
            },
            'clarity': {
                'score': metrics['clarity']['normalized_score'],
                'details': metrics['clarity']['details']
            }
        }

        # Crear documento
        document = {
            'username': username,
            'timestamp': datetime.now(timezone.utc).isoformat(),
            'text': text,
            'metrics': formatted_metrics,  # Usar las métricas formateadas
            'feedback': feedback,
            'analysis_type': 'current_situation'
        }

        # Insertar documento
        result = collection.insert_one(document)
        if result.inserted_id:
            logger.info(f"""
                Análisis guardado exitosamente:
                - Usuario: {username}
                - ID: {result.inserted_id}
                - Longitud del texto: {len(text)}
                - Métricas: {formatted_metrics}
            """)
            
            # Verificar almacenamiento
            if verify_storage(username):
                logger.info("Verificación de almacenamiento exitosa")
                return True
            else:
                logger.warning("Verificación de almacenamiento falló")
                return False

        logger.error("No se pudo insertar el documento")
        return False

    except Exception as e:
        logger.error(f"Error guardando análisis de situación actual: {str(e)}")
        return False

def verify_storage(username):
    """
    Verifica que los datos se están guardando correctamente.
    """
    try:
        collection = get_collection(COLLECTION_NAME)
        if collection is None:
            logger.error("No se pudo obtener la colección para verificación")
            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 guardado:
                - ID: {docs[0]['_id']}
                - Timestamp: {docs[0]['timestamp']}
                - Métricas guardadas: {bool(docs[0].get('metrics'))}
            """)
            return True
        
        logger.warning(f"No se encontraron documentos recientes para {username}")
        return False

    except Exception as e:
        logger.error(f"Error verificando almacenamiento: {str(e)}")
        return False

def get_recent_situation_analysis(username, limit=5):
    """
    Obtiene los análisis más recientes de un usuario.
    """
    try:
        collection = get_collection(COLLECTION_NAME)
        if collection is None:
            return []
            
        results = collection.find(
            {'username': username}
        ).sort('timestamp', -1).limit(limit)
        
        return list(results)
        
    except Exception as e:
        logger.error(f"Error obteniendo análisis recientes: {str(e)}")
        return []