AIdeaText commited on
Commit
d1cbdd7
verified
1 Parent(s): 2c407e7

Update modules/database/sql_db.py

Browse files
Files changed (1) hide show
  1. modules/database/sql_db.py +16 -21
modules/database/sql_db.py CHANGED
@@ -61,19 +61,20 @@ def create_admin_user(username, password, additional_info=None):
61
  def record_login(username):
62
  """Registra el inicio de sesi贸n de un usuario"""
63
  try:
64
- container = get_container("user_sessions")
65
- if not container:
66
- return None
67
-
68
  session_doc = {
69
  "id": str(uuid.uuid4()),
70
  "type": "session",
71
  "username": username,
72
  "loginTime": datetime.now(timezone.utc).isoformat(),
73
- "partitionKey": username
74
  }
75
 
76
- result = container.create_item(body=session_doc)
 
 
 
77
  return result['id']
78
  except Exception as e:
79
  logger.error(f"Error registrando login: {str(e)}")
@@ -82,18 +83,15 @@ def record_login(username):
82
  def record_logout(username, session_id):
83
  """Registra el cierre de sesi贸n y calcula la duraci贸n"""
84
  try:
85
- container = get_container("user_sessions")
86
- if not container:
87
- return False
88
-
89
- # Obtener la sesi贸n actual
90
  query = "SELECT * FROM c WHERE c.id = @id AND c.username = @username"
91
  params = [
92
  {"name": "@id", "value": session_id},
93
  {"name": "@username", "value": username}
94
  ]
95
 
96
- sessions = list(container.query_items(
97
  query=query,
98
  parameters=params,
99
  enable_cross_partition_query=True
@@ -107,13 +105,12 @@ def record_logout(username, session_id):
107
  logout_time = datetime.now(timezone.utc)
108
  duration = int((logout_time - login_time).total_seconds())
109
 
110
- # Actualizar el documento
111
  session.update({
112
  "logoutTime": logout_time.isoformat(),
113
  "sessionDuration": duration
114
  })
115
 
116
- container.upsert_item(body=session)
117
  return True
118
  except Exception as e:
119
  logger.error(f"Error registrando logout: {str(e)}")
@@ -122,22 +119,19 @@ def record_logout(username, session_id):
122
  def get_recent_sessions(limit=10):
123
  """Obtiene las sesiones m谩s recientes"""
124
  try:
125
- container = get_container("user_sessions")
126
- if not container:
127
- return []
128
-
129
  query = """
130
  SELECT c.username, c.loginTime, c.logoutTime, c.sessionDuration
131
  FROM c
132
  WHERE c.type = 'session'
133
- AND c.logoutTime != null
134
  ORDER BY c.loginTime DESC
135
  OFFSET 0 LIMIT @limit
136
  """
137
 
138
  params = [{"name": "@limit", "value": limit}]
139
 
140
- sessions = container.query_items(
141
  query=query,
142
  parameters=params,
143
  enable_cross_partition_query=True
@@ -148,10 +142,11 @@ def get_recent_sessions(limit=10):
148
  logger.error(f"Error obteniendo sesiones recientes: {str(e)}")
149
  return []
150
 
 
151
  def get_user_total_time(username):
152
  """Obtiene el tiempo total que un usuario ha pasado en la plataforma"""
153
  try:
154
- container = get_container("user_sessions")
155
  if not container:
156
  return None
157
 
 
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)}")
 
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
 
105
  logout_time = datetime.now(timezone.utc)
106
  duration = int((logout_time - login_time).total_seconds())
107
 
 
108
  session.update({
109
  "logoutTime": logout_time.isoformat(),
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)}")
 
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
126
  FROM c
127
  WHERE c.type = 'session'
 
128
  ORDER BY c.loginTime DESC
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
 
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:
149
+ container = get_sql_container("users_sessions")
150
  if not container:
151
  return None
152