|
|
|
import logging |
|
from pymongo import MongoClient |
|
import certifi |
|
from datetime import datetime |
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
mongo_client = None |
|
db = None |
|
analysis_collection = None |
|
|
|
def initialize_mongodb_connection(): |
|
global mongo_client, db, analysis_collection |
|
try: |
|
cosmos_mongodb_connection_string = os.getenv("MONGODB_CONNECTION_STRING") |
|
if not cosmos_mongodb_connection_string: |
|
logger.error("La variable de entorno MONGODB_CONNECTION_STRING no está configurada") |
|
return False |
|
|
|
mongo_client = MongoClient(cosmos_mongodb_connection_string, |
|
tls=True, |
|
tlsCAFile=certifi.where(), |
|
retryWrites=False, |
|
serverSelectionTimeoutMS=5000, |
|
connectTimeoutMS=10000, |
|
socketTimeoutMS=10000) |
|
|
|
mongo_client.admin.command('ping') |
|
|
|
db = mongo_client['aideatext_db'] |
|
analysis_collection = db['text_analysis'] |
|
|
|
logger.info("Conexión a Cosmos DB MongoDB API exitosa") |
|
return True |
|
except Exception as e: |
|
logger.error(f"Error al conectar con Cosmos DB MongoDB API: {str(e)}", exc_info=True) |
|
return False |
|
|
|
def get_student_data(username): |
|
if analysis_collection is None: |
|
logger.error("La conexión a MongoDB no está inicializada") |
|
return None |
|
|
|
try: |
|
|
|
cursor = analysis_collection.find({"username": username}).sort("timestamp", -1) |
|
|
|
|
|
formatted_data = { |
|
"username": username, |
|
"entries": [], |
|
"entries_count": 0, |
|
"word_count": {}, |
|
"arc_diagrams": [], |
|
"network_diagrams": [] |
|
} |
|
|
|
for entry in cursor: |
|
formatted_data["entries"].append({ |
|
"timestamp": entry["timestamp"].isoformat(), |
|
"text": entry["text"] |
|
}) |
|
formatted_data["entries_count"] += 1 |
|
|
|
|
|
for category, count in entry.get("word_count", {}).items(): |
|
if category in formatted_data["word_count"]: |
|
formatted_data["word_count"][category] += count |
|
else: |
|
formatted_data["word_count"][category] = count |
|
|
|
|
|
formatted_data["arc_diagrams"].extend(entry.get("arc_diagrams", [])) |
|
formatted_data["network_diagrams"].append(entry.get("network_diagram", "")) |
|
|
|
return formatted_data if formatted_data["entries_count"] > 0 else None |
|
except Exception as e: |
|
logger.error(f"Error al obtener datos del estudiante {username}: {str(e)}") |
|
return None |
|
|
|
|