Coverage for classes/account_manager.py: 97%
68 statements
« prev ^ index » next coverage.py v7.6.8, created at 2024-11-30 23:18 +0000
« prev ^ index » next coverage.py v7.6.8, created at 2024-11-30 23:18 +0000
1from config.database import Database
2from decimal import Decimal
4class AccountManager:
5 def get_account_balances(user_id):
6 conn = None
7 cursor = None
8 try:
9 conn = Database.get_connection()
10 cursor = conn.cursor()
11 cursor.execute(
12 "SELECT BalanceUSD, BalanceEUR, BalancePEN FROM Accounts WHERE UserId = ?",
13 (user_id,)
14 )
15 return cursor.fetchone()
16 except Exception as e:
17 print(f"Error al obtener los balances: {e}")
18 return None
19 finally:
20 if cursor is not None:
21 cursor.close()
22 if conn is not None:
23 conn.close()
26 @staticmethod
27 def update_balances(user_id, divisa_origen, divisa_destino, monto, monto_convertido):
28 try:
29 print(f"Iniciando actualización de balances para UserId: {user_id}")
30 print(f"Divisa origen: {divisa_origen}, Divisa destino: {divisa_destino}, Monto: {monto}, Monto convertido: {monto_convertido}")
32 conn = Database.get_connection()
33 cursor = conn.cursor()
34 print("Conexión a la base de datos establecida correctamente.")
36 # Obtener el balance de la divisa de origen
37 print(f"Obteniendo balance de {divisa_origen}...")
38 cursor.execute(f"SELECT Balance{divisa_origen} FROM Accounts WHERE UserId = ?", (user_id,))
39 balance_origen = cursor.fetchone()
40 print(f"Resultado de balance de {divisa_origen}: {balance_origen}")
42 if balance_origen is None:
43 print("No se encontró el balance de la divisa de origen.")
44 raise ValueError("No se encontró la cuenta del usuario.")
46 balance_origen = Decimal(balance_origen[0])
47 print(f"Balance de origen convertido a Decimal: {balance_origen}")
49 if balance_origen >= monto:
50 nuevo_balance_origen = balance_origen - monto
51 print(f"Nuevo balance de {divisa_origen}: {nuevo_balance_origen}")
53 # Actualiza el balance de la divisa de origen
54 cursor.execute(f"UPDATE Accounts SET Balance{divisa_origen} = ? WHERE UserId = ?",
55 (nuevo_balance_origen, user_id))
56 print(f"Balance de {divisa_origen} actualizado en la base de datos.")
58 # Obtener el balance de la divisa de destino
59 print(f"Obteniendo balance de {divisa_destino}...")
60 cursor.execute(f"SELECT Balance{divisa_destino} FROM Accounts WHERE UserId = ?", (user_id,))
61 balance_destino = cursor.fetchone()
62 print(f"Resultado de balance de {divisa_destino}: {balance_destino}")
64 if balance_destino is None:
65 print("No se encontró el balance de la divisa de destino.")
66 raise ValueError("No se encontró la cuenta de destino.")
68 balance_destino = Decimal(balance_destino[0])
69 print(f"Balance de destino convertido a Decimal: {balance_destino}")
71 nuevo_balance_destino = balance_destino + monto_convertido
72 print(f"Nuevo balance de {divisa_destino}: {nuevo_balance_destino}")
74 # Actualiza el balance de la divisa de destino
75 cursor.execute(f"UPDATE Accounts SET Balance{divisa_destino} = ? WHERE UserId = ?",
76 (nuevo_balance_destino, user_id))
77 print(f"Balance de {divisa_destino} actualizado en la base de datos.")
79 conn.commit()
80 print("Transacción confirmada (commit).")
81 return True
83 print("El balance de origen no es suficiente para realizar la transacción.")
84 return False
86 except Exception as e:
87 print(f"Error encontrado: {e}")
88 return {"error": str(e)}
90 finally:
91 print("Cerrando recursos...")
92 if 'cursor' in locals() and cursor is not None:
93 cursor.close()
94 print("Cursor cerrado.")
95 if 'conn' in locals() and conn is not None:
96 conn.close()
97 print("Conexión cerrada.")