|
|
|
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: |
|
|
|
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 |
|
|
|
|
|
document = { |
|
'username': username, |
|
'timestamp': datetime.now(timezone.utc).isoformat(), |
|
'text': text, |
|
'metrics': metrics, |
|
'feedback': feedback or {}, |
|
'analysis_type': 'current_situation' |
|
} |
|
|
|
|
|
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)} |
|
""") |
|
|
|
|
|
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 |
|
|
|
|
|
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 [] |