# 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' # En modules/database/current_situation_mongo_db.py 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 # Crear documento document = { 'username': username, 'timestamp': datetime.now(timezone.utc).isoformat(), 'text': text, 'metrics': metrics, 'feedback': feedback or {}, 'analysis_type': 'current_situation' } # Insertar documento y verificar result = collection.insert_one(document) if result.inserted_id: logger.info(f""" Análisis de situación actual guardado: - Usuario: {username} - ID: {result.inserted_id} - Longitud texto: {len(text)} """) # Verificar almacenamiento storage_verified = verify_storage(username) if not storage_verified: logger.warning("Verificación de almacenamiento falló") 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: 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 []