File size: 3,806 Bytes
12ffa62
 
 
 
 
 
 
 
 
0a09d3c
 
152cbec
 
 
 
12ffa62
0a09d3c
12ffa62
 
991247e
 
 
 
0a09d3c
991247e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0a09d3c
 
12ffa62
 
0a09d3c
 
 
 
12ffa62
 
0a09d3c
 
 
 
991247e
 
 
 
 
 
 
12ffa62
 
0a09d3c
12ffa62
 
 
0a09d3c
152cbec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12ffa62
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
# modules/database/current_situation_mongo_db.py

from datetime import datetime, timezone
import logging
from .mongo_db import get_collection, insert_document, find_documents

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

# En modules/database/current_situation_mongo_db.py
def store_current_situation_result(username, text, metrics, feedback):
    success = store_current_situation_result(username, text, metrics, feedback)
    if success:
        verify_storage(username) #Verificar que se guarda correctamente
    return success
    """
    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('student_current_situation')
        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': metrics,
            '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}
            """)
            return True
            
        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:
            return False
            
        # Buscar documentos recientes del usuario
        recent_docs = collection.find({
            'username': username,
            'timestamp': {
                '$gte': (datetime.now(timezone.utc) - timedelta(minutes=5)).isoformat()
            }
        }).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