AIdeaText commited on
Commit
9f9d2eb
verified
1 Parent(s): 4d4f074

Update modules/database/sql_db.py

Browse files
Files changed (1) hide show
  1. modules/database/sql_db.py +62 -10
modules/database/sql_db.py CHANGED
@@ -8,6 +8,7 @@ import uuid
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
11
  def get_user(username, role=None):
12
  container = get_container("users")
13
  try:
@@ -20,15 +21,23 @@ def get_user(username, role=None):
20
  logger.error(f"Error al obtener usuario {username}: {str(e)}")
21
  return None
22
 
 
 
23
  def get_admin_user(username):
24
  return get_user(username, role='Administrador')
25
 
 
 
26
  def get_student_user(username):
27
  return get_user(username, role='Estudiante')
28
 
 
 
29
  def get_teacher_user(username):
30
  return get_user(username, role='Profesor')
31
 
 
 
32
  def create_user(username, password, role, additional_info=None):
33
  """Crea un nuevo usuario"""
34
  container = get_container("users")
@@ -55,15 +64,19 @@ def create_user(username, password, role, additional_info=None):
55
  logger.error(f"Error al crear usuario {role}: {str(e)}")
56
  return False
57
 
 
58
  def create_student_user(username, password, additional_info=None):
59
  return create_user(username, password, 'Estudiante', additional_info)
60
 
 
61
  def create_teacher_user(username, password, additional_info=None):
62
  return create_user(username, password, 'Profesor', additional_info)
63
 
 
64
  def create_admin_user(username, password, additional_info=None):
65
  return create_user(username, password, 'Administrador', additional_info)
66
 
 
67
  def record_login(username):
68
  """Registra el inicio de sesi贸n de un usuario"""
69
  try:
@@ -89,6 +102,7 @@ def record_login(username):
89
  logger.error(f"Error registrando login: {str(e)}")
90
  return None
91
 
 
92
  def record_logout(username, session_id):
93
  """Registra el cierre de sesi贸n y calcula la duraci贸n"""
94
  try:
@@ -130,6 +144,7 @@ def record_logout(username, session_id):
130
  logger.error(f"Error registrando logout: {str(e)}")
131
  return False
132
 
 
133
  def get_recent_sessions(limit=10):
134
  """Obtiene las sesiones m谩s recientes"""
135
  try:
@@ -169,6 +184,7 @@ def get_recent_sessions(limit=10):
169
  logger.error(f"Error obteniendo sesiones recientes: {str(e)}")
170
  return []
171
 
 
172
  def get_user_total_time(username):
173
  """Obtiene el tiempo total que un usuario ha pasado en la plataforma"""
174
  try:
@@ -194,6 +210,7 @@ def get_user_total_time(username):
194
  logger.error(f"Error obteniendo tiempo total: {str(e)}")
195
  return 0
196
 
 
197
  def update_student_user(username, new_info):
198
  container = get_container("users")
199
  try:
@@ -211,6 +228,7 @@ def update_student_user(username, new_info):
211
  logger.error(f"Error al actualizar informaci贸n del estudiante {username}: {str(e)}")
212
  return False
213
 
 
214
  def delete_student_user(username):
215
  container = get_container("users")
216
  try:
@@ -227,9 +245,18 @@ def delete_student_user(username):
227
  logger.error(f"Error al eliminar estudiante {username}: {str(e)}")
228
  return False
229
 
 
230
  def store_application_request(name, lastname, email, institution, current_role, desired_role, reason):
231
- container = get_container("application_requests")
232
  try:
 
 
 
 
 
 
 
 
233
  application_request = {
234
  "id": str(uuid.uuid4()),
235
  "name": name,
@@ -240,31 +267,56 @@ def store_application_request(name, lastname, email, institution, current_role,
240
  "desired_role": desired_role,
241
  "reason": reason,
242
  "requestDate": datetime.utcnow().isoformat(),
243
- "partitionKey": email # Usar email como partition key
 
244
  }
245
- container.create_item(body=application_request)
246
- logger.info(f"Solicitud de aplicaci贸n almacenada para el email: {email}")
 
 
 
 
247
  return True
 
248
  except Exception as e:
249
  logger.error(f"Error al almacenar la solicitud de aplicaci贸n: {str(e)}")
 
250
  return False
251
 
 
 
252
  def store_student_feedback(username, name, email, feedback):
253
- container = get_container("user_feedback")
254
  try:
 
 
 
 
 
 
 
 
255
  feedback_item = {
256
  "id": str(uuid.uuid4()),
257
- "username": username,
258
  "name": name,
259
  "email": email,
260
  "feedback": feedback,
261
  "role": "Estudiante",
262
  "timestamp": datetime.now(timezone.utc).isoformat(),
263
- "partitionKey": username # Usar username como partition key
264
  }
265
- result = container.create_item(body=feedback_item)
266
- logger.info(f"Feedback de estudiante almacenado con ID: {result['id']} para el usuario: {username}")
 
 
 
 
 
 
267
  return True
 
268
  except Exception as e:
269
- logger.error(f"Error al almacenar el feedback del estudiante {username}: {str(e)}")
 
270
  return False
 
8
 
9
  logger = logging.getLogger(__name__)
10
 
11
+ #########################################
12
  def get_user(username, role=None):
13
  container = get_container("users")
14
  try:
 
21
  logger.error(f"Error al obtener usuario {username}: {str(e)}")
22
  return None
23
 
24
+
25
+ #########################################
26
  def get_admin_user(username):
27
  return get_user(username, role='Administrador')
28
 
29
+
30
+ #########################################
31
  def get_student_user(username):
32
  return get_user(username, role='Estudiante')
33
 
34
+
35
+ #########################################
36
  def get_teacher_user(username):
37
  return get_user(username, role='Profesor')
38
 
39
+
40
+ #########################################
41
  def create_user(username, password, role, additional_info=None):
42
  """Crea un nuevo usuario"""
43
  container = get_container("users")
 
64
  logger.error(f"Error al crear usuario {role}: {str(e)}")
65
  return False
66
 
67
+ #########################################
68
  def create_student_user(username, password, additional_info=None):
69
  return create_user(username, password, 'Estudiante', additional_info)
70
 
71
+ #########################################
72
  def create_teacher_user(username, password, additional_info=None):
73
  return create_user(username, password, 'Profesor', additional_info)
74
 
75
+ #########################################
76
  def create_admin_user(username, password, additional_info=None):
77
  return create_user(username, password, 'Administrador', additional_info)
78
 
79
+ #########################################
80
  def record_login(username):
81
  """Registra el inicio de sesi贸n de un usuario"""
82
  try:
 
102
  logger.error(f"Error registrando login: {str(e)}")
103
  return None
104
 
105
+ #########################################
106
  def record_logout(username, session_id):
107
  """Registra el cierre de sesi贸n y calcula la duraci贸n"""
108
  try:
 
144
  logger.error(f"Error registrando logout: {str(e)}")
145
  return False
146
 
147
+ #########################################
148
  def get_recent_sessions(limit=10):
149
  """Obtiene las sesiones m谩s recientes"""
150
  try:
 
184
  logger.error(f"Error obteniendo sesiones recientes: {str(e)}")
185
  return []
186
 
187
+ #########################################
188
  def get_user_total_time(username):
189
  """Obtiene el tiempo total que un usuario ha pasado en la plataforma"""
190
  try:
 
210
  logger.error(f"Error obteniendo tiempo total: {str(e)}")
211
  return 0
212
 
213
+ #########################################
214
  def update_student_user(username, new_info):
215
  container = get_container("users")
216
  try:
 
228
  logger.error(f"Error al actualizar informaci贸n del estudiante {username}: {str(e)}")
229
  return False
230
 
231
+ #########################################
232
  def delete_student_user(username):
233
  container = get_container("users")
234
  try:
 
245
  logger.error(f"Error al eliminar estudiante {username}: {str(e)}")
246
  return False
247
 
248
+ #########################################
249
  def store_application_request(name, lastname, email, institution, current_role, desired_role, reason):
250
+ """Almacena una solicitud de aplicaci贸n"""
251
  try:
252
+ # Obtener el contenedor usando get_container() que s铆 funciona
253
+ container = get_container("application_requests")
254
+ if not container:
255
+ logger.error("No se pudo obtener el contenedor de solicitudes")
256
+ return False
257
+
258
+ # Crear documento con la solicitud
259
+ # N贸tese que incluimos email como partition key en el cuerpo del documento
260
  application_request = {
261
  "id": str(uuid.uuid4()),
262
  "name": name,
 
267
  "desired_role": desired_role,
268
  "reason": reason,
269
  "requestDate": datetime.utcnow().isoformat(),
270
+ # El campo para partition key debe estar en el documento
271
+ "partitionKey": email
272
  }
273
+
274
+ # Crear el item en el contenedor - sin el par谩metro enable_cross_partition_query
275
+ container.create_item(
276
+ body=application_request # Solo pasamos el body
277
+ )
278
+ logger.info(f"Solicitud de aplicaci贸n almacenada para: {email}")
279
  return True
280
+
281
  except Exception as e:
282
  logger.error(f"Error al almacenar la solicitud de aplicaci贸n: {str(e)}")
283
+ logger.error(f"Detalles del error: {str(e)}")
284
  return False
285
 
286
+
287
+ ################################################################
288
  def store_student_feedback(username, name, email, feedback):
289
+ """Almacena el feedback de un estudiante"""
290
  try:
291
+ # Obtener el contenedor - verificar disponibilidad
292
+ logger.info(f"Intentando obtener contenedor user_feedback para usuario: {username}")
293
+ container = get_container("user_feedback")
294
+ if not container:
295
+ logger.error("No se pudo obtener el contenedor user_feedback")
296
+ return False
297
+
298
+ # Crear documento de feedback - asegurar que el username est茅 como partition key
299
  feedback_item = {
300
  "id": str(uuid.uuid4()),
301
+ "username": username, # Campo regular
302
  "name": name,
303
  "email": email,
304
  "feedback": feedback,
305
  "role": "Estudiante",
306
  "timestamp": datetime.now(timezone.utc).isoformat(),
307
+ "partitionKey": username # Campo de partici贸n
308
  }
309
+
310
+ # Crear el item - sin el par谩metro enable_cross_partition_query
311
+ logger.info(f"Intentando almacenar feedback para usuario: {username}")
312
+ result = container.create_item(
313
+ body=feedback_item # Solo el body, no par谩metros adicionales
314
+ )
315
+
316
+ logger.info(f"Feedback almacenado exitosamente para el usuario: {username}")
317
  return True
318
+
319
  except Exception as e:
320
+ logger.error(f"Error al almacenar el feedback del estudiante {username}")
321
+ logger.error(f"Detalles del error: {str(e)}")
322
  return False