AIdeaText commited on
Commit
3ab9131
verified
1 Parent(s): d1cbdd7

Update modules/database/sql_db.py

Browse files
Files changed (1) hide show
  1. modules/database/sql_db.py +31 -28
modules/database/sql_db.py CHANGED
@@ -58,49 +58,49 @@ def create_admin_user(username, password, additional_info=None):
58
 
59
  ############-- Funciones de control del tiempo de sesi贸n ##################
60
 
 
61
  def record_login(username):
62
  """Registra el inicio de sesi贸n de un usuario"""
63
  try:
64
- user_container, _, session_container = get_sql_containers() # Obtener el contenedor correcto
65
 
66
  session_doc = {
67
  "id": str(uuid.uuid4()),
68
  "type": "session",
69
  "username": username,
70
  "loginTime": datetime.now(timezone.utc).isoformat(),
71
- "partitionKey": username # Asegurarse que esto coincida con la configuraci贸n de la colecci贸n
72
  }
73
 
 
74
  result = session_container.create_item(
75
  body=session_doc,
76
- enable_cross_partition_query=True # Agregado para manejar particiones
77
  )
 
78
  return result['id']
79
  except Exception as e:
80
  logger.error(f"Error registrando login: {str(e)}")
81
  return None
82
 
 
83
  def record_logout(username, session_id):
84
  """Registra el cierre de sesi贸n y calcula la duraci贸n"""
85
  try:
86
- user_container, _, session_container = get_sql_containers()
87
-
88
- query = "SELECT * FROM c WHERE c.id = @id AND c.username = @username"
89
- params = [
90
- {"name": "@id", "value": session_id},
91
- {"name": "@username", "value": username}
92
- ]
93
 
94
- sessions = list(session_container.query_items(
95
- query=query,
96
- parameters=params,
97
- enable_cross_partition_query=True
 
98
  ))
99
-
100
- if not sessions:
 
101
  return False
102
 
103
- session = sessions[0]
104
  login_time = datetime.fromisoformat(session['loginTime'].rstrip('Z'))
105
  logout_time = datetime.now(timezone.utc)
106
  duration = int((logout_time - login_time).total_seconds())
@@ -110,16 +110,22 @@ def record_logout(username, session_id):
110
  "sessionDuration": duration
111
  })
112
 
113
- session_container.upsert_item(body=session)
 
 
 
 
 
114
  return True
115
  except Exception as e:
116
  logger.error(f"Error registrando logout: {str(e)}")
117
  return False
118
 
 
119
  def get_recent_sessions(limit=10):
120
  """Obtiene las sesiones m谩s recientes"""
121
  try:
122
- user_container, _, session_container = get_sql_containers()
123
 
124
  query = """
125
  SELECT c.username, c.loginTime, c.logoutTime, c.sessionDuration
@@ -129,20 +135,17 @@ def get_recent_sessions(limit=10):
129
  OFFSET 0 LIMIT @limit
130
  """
131
 
132
- params = [{"name": "@limit", "value": limit}]
133
-
134
- sessions = session_container.query_items(
135
  query=query,
136
- parameters=params,
137
- enable_cross_partition_query=True
138
- )
139
-
140
- return list(sessions)
141
  except Exception as e:
142
  logger.error(f"Error obteniendo sesiones recientes: {str(e)}")
143
  return []
144
 
145
-
146
  def get_user_total_time(username):
147
  """Obtiene el tiempo total que un usuario ha pasado en la plataforma"""
148
  try:
 
58
 
59
  ############-- Funciones de control del tiempo de sesi贸n ##################
60
 
61
+
62
  def record_login(username):
63
  """Registra el inicio de sesi贸n de un usuario"""
64
  try:
65
+ _, _, session_container = get_sql_containers()
66
 
67
  session_doc = {
68
  "id": str(uuid.uuid4()),
69
  "type": "session",
70
  "username": username,
71
  "loginTime": datetime.now(timezone.utc).isoformat(),
72
+ "partitionKey": username # Asegurarse que coincida con la configuraci贸n
73
  }
74
 
75
+ # Crear el documento sin enable_cross_partition_query
76
  result = session_container.create_item(
77
  body=session_doc,
78
+ partition_key=username # Usar partition_key en lugar de partitionKey
79
  )
80
+ logger.info(f"Sesi贸n registrada para {username}")
81
  return result['id']
82
  except Exception as e:
83
  logger.error(f"Error registrando login: {str(e)}")
84
  return None
85
 
86
+
87
  def record_logout(username, session_id):
88
  """Registra el cierre de sesi贸n y calcula la duraci贸n"""
89
  try:
90
+ _, _, session_container = get_sql_containers()
 
 
 
 
 
 
91
 
92
+ # Consulta usando la partition key correctamente
93
+ items = list(session_container.query_items(
94
+ query="SELECT * FROM c WHERE c.id = @id",
95
+ parameters=[{"name": "@id", "value": session_id}],
96
+ partition_key=username # Usar la partition key correcta
97
  ))
98
+
99
+ if not items:
100
+ logger.warning(f"Sesi贸n no encontrada: {session_id}")
101
  return False
102
 
103
+ session = items[0]
104
  login_time = datetime.fromisoformat(session['loginTime'].rstrip('Z'))
105
  logout_time = datetime.now(timezone.utc)
106
  duration = int((logout_time - login_time).total_seconds())
 
110
  "sessionDuration": duration
111
  })
112
 
113
+ # Actualizar usando la partition key
114
+ session_container.upsert_item(
115
+ body=session,
116
+ partition_key=username
117
+ )
118
+ logger.info(f"Sesi贸n cerrada para {username}, duraci贸n: {duration}s")
119
  return True
120
  except Exception as e:
121
  logger.error(f"Error registrando logout: {str(e)}")
122
  return False
123
 
124
+
125
  def get_recent_sessions(limit=10):
126
  """Obtiene las sesiones m谩s recientes"""
127
  try:
128
+ _, _, session_container = get_sql_containers()
129
 
130
  query = """
131
  SELECT c.username, c.loginTime, c.logoutTime, c.sessionDuration
 
135
  OFFSET 0 LIMIT @limit
136
  """
137
 
138
+ # Usar query_items sin enable_cross_partition_query
139
+ sessions = list(session_container.query_items(
 
140
  query=query,
141
+ parameters=[{"name": "@limit", "value": limit}]
142
+ ))
143
+
144
+ return sessions
 
145
  except Exception as e:
146
  logger.error(f"Error obteniendo sesiones recientes: {str(e)}")
147
  return []
148
 
 
149
  def get_user_total_time(username):
150
  """Obtiene el tiempo total que un usuario ha pasado en la plataforma"""
151
  try: