AIdeaText commited on
Commit
0b4cbcf
verified
1 Parent(s): 585b429

Update modules/database/sql_db.py

Browse files
Files changed (1) hide show
  1. modules/database/sql_db.py +24 -21
modules/database/sql_db.py CHANGED
@@ -33,17 +33,19 @@ def get_teacher_user(username):
33
  return get_user(username, role='Profesor')
34
 
35
  def create_user(username, password, role, additional_info=None):
36
- user_container, _, _ = get_sql_containers()
37
  try:
38
- hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
39
  user_data = {
40
  'id': username,
41
- 'password': hashed_password,
42
  'role': role,
43
  'timestamp': datetime.now(timezone.utc).isoformat(),
44
  'additional_info': additional_info or {}
45
  }
46
- user_container.create_item(body=user_data)
 
 
 
47
  logger.info(f"Usuario {role} creado: {username}")
48
  return True
49
  except Exception as e:
@@ -67,10 +69,12 @@ def record_login(username):
67
  try:
68
  container = get_container("users_sessions")
69
  if not container:
 
70
  return None
71
 
 
72
  session_doc = {
73
- "id": str(uuid.uuid4()),
74
  "type": "session",
75
  "username": username,
76
  "loginTime": datetime.now(timezone.utc).isoformat()
@@ -80,8 +84,8 @@ def record_login(username):
80
  body=session_doc,
81
  partition_key=username
82
  )
83
- logger.info(f"Sesi贸n registrada para {username}")
84
- return result['id']
85
  except Exception as e:
86
  logger.error(f"Error registrando login: {str(e)}")
87
  return None
@@ -90,15 +94,17 @@ def record_login(username):
90
  def record_logout(username, session_id):
91
  """Registra el cierre de sesi贸n y calcula la duraci贸n"""
92
  try:
93
- _, _, session_container = get_sql_containers()
94
-
95
- # Consulta usando la partition key correctamente
96
- items = list(session_container.query_items(
 
 
97
  query="SELECT * FROM c WHERE c.id = @id",
98
  parameters=[{"name": "@id", "value": session_id}],
99
- partition_key=username # Usar la partition key correcta
100
  ))
101
-
102
  if not items:
103
  logger.warning(f"Sesi贸n no encontrada: {session_id}")
104
  return False
@@ -113,12 +119,11 @@ def record_logout(username, session_id):
113
  "sessionDuration": duration
114
  })
115
 
116
- # Actualizar usando la partition key
117
- session_container.upsert_item(
118
  body=session,
119
  partition_key=username
120
  )
121
- logger.info(f"Sesi贸n cerrada para {username}, duraci贸n: {duration}s")
122
  return True
123
  except Exception as e:
124
  logger.error(f"Error registrando logout: {str(e)}")
@@ -152,7 +157,7 @@ def get_recent_sessions(limit=10):
152
  def get_user_total_time(username):
153
  """Obtiene el tiempo total que un usuario ha pasado en la plataforma"""
154
  try:
155
- container = get_sql_container("users_sessions")
156
  if not container:
157
  return None
158
 
@@ -164,12 +169,10 @@ def get_user_total_time(username):
164
  AND c.logoutTime != null
165
  """
166
 
167
- params = [{"name": "@username", "value": username}]
168
-
169
  result = list(container.query_items(
170
  query=query,
171
- parameters=params,
172
- enable_cross_partition_query=True
173
  ))
174
 
175
  return result[0] if result else 0
 
33
  return get_user(username, role='Profesor')
34
 
35
  def create_user(username, password, role, additional_info=None):
36
+ container = get_container("users")
37
  try:
 
38
  user_data = {
39
  'id': username,
40
+ 'password': password, # Ya viene hasheado
41
  'role': role,
42
  'timestamp': datetime.now(timezone.utc).isoformat(),
43
  'additional_info': additional_info or {}
44
  }
45
+ container.create_item(
46
+ body=user_data,
47
+ partition_key=username
48
+ )
49
  logger.info(f"Usuario {role} creado: {username}")
50
  return True
51
  except Exception as e:
 
69
  try:
70
  container = get_container("users_sessions")
71
  if not container:
72
+ logger.error("No se pudo obtener el contenedor users_sessions")
73
  return None
74
 
75
+ session_id = str(uuid.uuid4())
76
  session_doc = {
77
+ "id": session_id,
78
  "type": "session",
79
  "username": username,
80
  "loginTime": datetime.now(timezone.utc).isoformat()
 
84
  body=session_doc,
85
  partition_key=username
86
  )
87
+ logger.info(f"Sesi贸n {session_id} registrada para {username}")
88
+ return session_id
89
  except Exception as e:
90
  logger.error(f"Error registrando login: {str(e)}")
91
  return None
 
94
  def record_logout(username, session_id):
95
  """Registra el cierre de sesi贸n y calcula la duraci贸n"""
96
  try:
97
+ container = get_container("users_sessions")
98
+ if not container:
99
+ logger.error("No se pudo obtener el contenedor users_sessions")
100
+ return False
101
+
102
+ items = list(container.query_items(
103
  query="SELECT * FROM c WHERE c.id = @id",
104
  parameters=[{"name": "@id", "value": session_id}],
105
+ partition_key=username
106
  ))
107
+
108
  if not items:
109
  logger.warning(f"Sesi贸n no encontrada: {session_id}")
110
  return False
 
119
  "sessionDuration": duration
120
  })
121
 
122
+ container.upsert_item(
 
123
  body=session,
124
  partition_key=username
125
  )
126
+ logger.info(f"Sesi贸n {session_id} cerrada para {username}, duraci贸n: {duration}s")
127
  return True
128
  except Exception as e:
129
  logger.error(f"Error registrando logout: {str(e)}")
 
157
  def get_user_total_time(username):
158
  """Obtiene el tiempo total que un usuario ha pasado en la plataforma"""
159
  try:
160
+ container = get_container("users_sessions")
161
  if not container:
162
  return None
163
 
 
169
  AND c.logoutTime != null
170
  """
171
 
 
 
172
  result = list(container.query_items(
173
  query=query,
174
+ parameters=[{"name": "@username", "value": username}],
175
+ partition_key=username
176
  ))
177
 
178
  return result[0] if result else 0