AIdeaText commited on
Commit
86b2b70
verified
1 Parent(s): da81392

Update modules/database/sql_db.py

Browse files
Files changed (1) hide show
  1. modules/database/sql_db.py +25 -42
modules/database/sql_db.py CHANGED
@@ -9,34 +9,16 @@ import uuid
9
  logger = logging.getLogger(__name__)
10
 
11
  def get_user(username, role=None):
12
- """Obtiene un usuario por su username y opcionalmente por rol"""
13
  container = get_container("users")
14
- if not container:
15
- logger.error("No se pudo obtener el contenedor de usuarios")
16
- return None
17
-
18
  try:
19
- # Construir la consulta
20
- query = "SELECT * FROM c WHERE c.id = @username"
21
- parameters = [{"name": "@username", "value": username}]
22
-
23
  if role:
24
- query += " AND c.role = @role"
25
- parameters.append({"name": "@role", "value": role})
26
-
27
  items = list(container.query_items(
28
  query=query,
29
- parameters=parameters,
30
- enable_cross_partition_query=True # Necesario para b煤squedas por rol
31
  ))
32
-
33
- if items:
34
- logger.info(f"Usuario encontrado: {username}")
35
- return items[0]
36
- else:
37
- logger.warning(f"Usuario no encontrado: {username}")
38
- return None
39
-
40
  except Exception as e:
41
  logger.error(f"Error al obtener usuario {username}: {str(e)}")
42
  return None
@@ -90,11 +72,10 @@ def create_admin_user(username, password, additional_info=None):
90
 
91
 
92
  def record_login(username):
93
- """Registra el inicio de sesi贸n de un usuario"""
94
  try:
95
  container = get_container("users_sessions")
96
  if not container:
97
- logger.error("No se pudo obtener el contenedor users_sessions")
98
  return None
99
 
100
  session_id = str(uuid.uuid4())
@@ -102,36 +83,39 @@ def record_login(username):
102
  "id": session_id,
103
  "type": "session",
104
  "username": username,
105
- "loginTime": datetime.now(timezone.utc).isoformat()
 
106
  }
107
 
108
- result = container.create_item(
109
  body=session_doc,
110
  partition_key=username
111
  )
112
- logger.info(f"Sesi贸n {session_id} registrada para {username}")
113
  return session_id
114
  except Exception as e:
115
  logger.error(f"Error registrando login: {str(e)}")
116
  return None
117
 
118
 
 
119
  def record_logout(username, session_id):
120
- """Registra el cierre de sesi贸n y calcula la duraci贸n"""
121
  try:
122
  container = get_container("users_sessions")
123
  if not container:
124
- logger.error("No se pudo obtener el contenedor users_sessions")
125
  return False
126
 
 
 
 
127
  items = list(container.query_items(
128
- query="SELECT * FROM c WHERE c.id = @id",
129
- parameters=[{"name": "@id", "value": session_id}],
130
  partition_key=username
131
  ))
132
 
133
  if not items:
134
- logger.warning(f"Sesi贸n no encontrada: {session_id}")
135
  return False
136
 
137
  session = items[0]
@@ -148,7 +132,6 @@ def record_logout(username, session_id):
148
  body=session,
149
  partition_key=username
150
  )
151
- logger.info(f"Sesi贸n {session_id} cerrada para {username}, duraci贸n: {duration}s")
152
  return True
153
  except Exception as e:
154
  logger.error(f"Error registrando logout: {str(e)}")
@@ -156,10 +139,12 @@ def record_logout(username, session_id):
156
 
157
 
158
  def get_recent_sessions(limit=10):
159
- """Obtiene las sesiones m谩s recientes"""
160
  try:
161
- _, _, session_container = get_sql_containers()
162
-
 
 
163
  query = """
164
  SELECT c.username, c.loginTime, c.logoutTime, c.sessionDuration
165
  FROM c
@@ -168,15 +153,13 @@ def get_recent_sessions(limit=10):
168
  OFFSET 0 LIMIT @limit
169
  """
170
 
171
- # Usar query_items sin enable_cross_partition_query
172
- sessions = list(session_container.query_items(
173
  query=query,
174
- parameters=[{"name": "@limit", "value": limit}]
 
175
  ))
176
-
177
- return sessions
178
  except Exception as e:
179
- logger.error(f"Error obteniendo sesiones recientes: {str(e)}")
180
  return []
181
 
182
  def get_user_total_time(username):
 
9
  logger = logging.getLogger(__name__)
10
 
11
  def get_user(username, role=None):
 
12
  container = get_container("users")
 
 
 
 
13
  try:
14
+ query = f"SELECT * FROM c WHERE c.id = '{username}'"
 
 
 
15
  if role:
16
+ query += f" AND c.role = '{role}'"
 
 
17
  items = list(container.query_items(
18
  query=query,
19
+ enable_cross_partition_query=True
 
20
  ))
21
+ return items[0] if items else None
 
 
 
 
 
 
 
22
  except Exception as e:
23
  logger.error(f"Error al obtener usuario {username}: {str(e)}")
24
  return None
 
72
 
73
 
74
  def record_login(username):
75
+ """Registra el inicio de sesi贸n"""
76
  try:
77
  container = get_container("users_sessions")
78
  if not container:
 
79
  return None
80
 
81
  session_id = str(uuid.uuid4())
 
83
  "id": session_id,
84
  "type": "session",
85
  "username": username,
86
+ "loginTime": datetime.now(timezone.utc).isoformat(),
87
+ "additional_info": {} # Mantener consistencia con la estructura existente
88
  }
89
 
90
+ container.create_item(
91
  body=session_doc,
92
  partition_key=username
93
  )
94
+ logger.info(f"Login registrado: {username}")
95
  return session_id
96
  except Exception as e:
97
  logger.error(f"Error registrando login: {str(e)}")
98
  return None
99
 
100
 
101
+
102
  def record_logout(username, session_id):
103
+ """Registra el cierre de sesi贸n"""
104
  try:
105
  container = get_container("users_sessions")
106
  if not container:
 
107
  return False
108
 
109
+ query = "SELECT * FROM c WHERE c.id = @id"
110
+ params = [{"name": "@id", "value": session_id}]
111
+
112
  items = list(container.query_items(
113
+ query=query,
114
+ parameters=params,
115
  partition_key=username
116
  ))
117
 
118
  if not items:
 
119
  return False
120
 
121
  session = items[0]
 
132
  body=session,
133
  partition_key=username
134
  )
 
135
  return True
136
  except Exception as e:
137
  logger.error(f"Error registrando logout: {str(e)}")
 
139
 
140
 
141
  def get_recent_sessions(limit=10):
142
+ """Obtiene sesiones recientes"""
143
  try:
144
+ container = get_container("users_sessions")
145
+ if not container:
146
+ return []
147
+
148
  query = """
149
  SELECT c.username, c.loginTime, c.logoutTime, c.sessionDuration
150
  FROM c
 
153
  OFFSET 0 LIMIT @limit
154
  """
155
 
156
+ return list(container.query_items(
 
157
  query=query,
158
+ parameters=[{"name": "@limit", "value": limit}],
159
+ enable_cross_partition_query=True
160
  ))
 
 
161
  except Exception as e:
162
+ logger.error(f"Error obteniendo sesiones: {str(e)}")
163
  return []
164
 
165
  def get_user_total_time(username):