Spaces:
Running
Running
# 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 [] |