11from datetime import datetime , timedelta
22import aiohttp
3+ from sqlalchemy .ext .asyncio import AsyncSession
4+ from sqlalchemy .orm import Session
5+
36import config
47from enums .cryptocurrency import Cryptocurrency
58from models .deposit import DepositDTO
@@ -19,7 +22,7 @@ async def fetch_api_request(url: str, params: dict | None = None) -> dict:
1922 return data
2023
2124 @staticmethod
22- async def get_new_btc_deposits (user_dto : UserDTO , deposits ) -> float :
25+ async def get_new_btc_deposits (user_dto : UserDTO , deposits : list [ DepositDTO ], session : AsyncSession | Session ) -> float :
2326 url = f'https://mempool.space/api/address/{ user_dto .btc_address } /utxo'
2427 data = await CryptoApiManager .fetch_api_request (url )
2528 deposits = [deposit .tx_id for deposit in deposits if deposit .network == "BTC" ]
@@ -33,12 +36,12 @@ async def get_new_btc_deposits(user_dto: UserDTO, deposits) -> float:
3336 amount = deposit ['value' ],
3437 vout = deposit ['vout' ]
3538 )
36- await DepositService .create (deposit_dto )
39+ await DepositService .create (deposit_dto , session )
3740 deposit_sum += float (deposit ["value" ]) / 100_000_000
3841 return deposit_sum
3942
4043 @staticmethod
41- async def get_new_ltc_deposits (user_dto : UserDTO , deposits ) -> float :
44+ async def get_new_ltc_deposits (user_dto : UserDTO , deposits : list [ DepositDTO ], session : AsyncSession | Session ) -> float :
4245 url = f"https://api.blockcypher.com/v1/ltc/main/addrs/{ user_dto .ltc_address } "
4346 params = {"unspentOnly" : "true" }
4447 data = await CryptoApiManager .fetch_api_request (url , params = params )
@@ -54,12 +57,12 @@ async def get_new_ltc_deposits(user_dto: UserDTO, deposits) -> float:
5457 amount = deposit ['value' ],
5558 vout = deposit ['tx_output_n' ]
5659 )
57- await DepositService .create (deposit_dto )
60+ await DepositService .create (deposit_dto , session )
5861 deposits_sum += float (deposit ['value' ]) / 100_000_000
5962 return deposits_sum
6063
6164 @staticmethod
62- async def get_sol_balance (user_dto : UserDTO , deposits ) -> float :
65+ async def get_sol_balance (user_dto : UserDTO , deposits : list [ DepositDTO ], session : AsyncSession | Session ) -> float :
6366 url = f"https://api.solana.fm/v0/accounts/{ user_dto .sol_address } /transfers"
6467 data = await CryptoApiManager .fetch_api_request (url )
6568 deposits = [deposit .tx_id for deposit in deposits if deposit .network == "SOL" ]
@@ -78,12 +81,12 @@ async def get_sol_balance(user_dto: UserDTO, deposits) -> float:
7881 amount = transfer ['amount' ],
7982 vout = transfer ['instructionIndex' ]
8083 )
81- await DepositService .create (deposit_dto )
84+ await DepositService .create (deposit_dto , session )
8285 deposits_sum += float (transfer ['amount' ] / 1_000_000_000 )
8386 return deposits_sum
8487
8588 @staticmethod
86- async def get_usdt_trc20_balance (user_dto : UserDTO , deposits ) -> float :
89+ async def get_usdt_trc20_balance (user_dto : UserDTO , deposits : list [ DepositDTO ], session : AsyncSession | Session ) -> float :
8790 url = f"https://api.trongrid.io/v1/accounts/{ user_dto .trx_address } /transactions/trc20"
8891 params = {"only_confirmed" : "true" ,
8992 "min_timestamp" : CryptoApiManager .min_timestamp ,
@@ -102,12 +105,12 @@ async def get_usdt_trc20_balance(user_dto: UserDTO, deposits) -> float:
102105 token_name = 'USDT_TRC20' ,
103106 amount = deposit ['value' ],
104107 )
105- await DepositService .create (deposit_dto )
108+ await DepositService .create (deposit_dto , session )
106109 deposits_sum += float (deposit ['value' ]) / pow (10 , deposit ['token_info' ]['decimals' ])
107110 return deposits_sum
108111
109112 @staticmethod
110- async def get_usdt_erc20_balance (user_dto : UserDTO , deposits ) -> float :
113+ async def get_usdt_erc20_balance (user_dto : UserDTO , deposits : list [ DepositDTO ], session : AsyncSession | Session ) -> float :
111114 # TODO(Combine the function to obtain erc20 tokens.)
112115 url = f'https://api.ethplorer.io/getAddressHistory/{ user_dto .eth_address } '
113116 params = {
@@ -129,12 +132,12 @@ async def get_usdt_erc20_balance(user_dto: UserDTO, deposits) -> float:
129132 token_name = 'USDT_ERC20' ,
130133 amount = deposit ['value' ]
131134 )
132- await DepositService .create (deposit_dto )
135+ await DepositService .create (deposit_dto , session )
133136 deposits_sum += float (deposit ['value' ]) / pow (10 , 6 )
134137 return deposits_sum
135138
136139 @staticmethod
137- async def get_usdc_erc20_balance (user_dto : UserDTO , deposits ):
140+ async def get_usdc_erc20_balance (user_dto : UserDTO , deposits : list [ DepositDTO ], session : AsyncSession | Session ):
138141 # TODO(Combine the function to obtain erc20 tokens.)
139142 url = f'https://api.ethplorer.io/getAddressHistory/{ user_dto .eth_address } '
140143 params = {
@@ -156,7 +159,7 @@ async def get_usdc_erc20_balance(user_dto: UserDTO, deposits):
156159 token_name = 'USDC_ERC20' ,
157160 amount = deposit ['value' ]
158161 )
159- await DepositService .create (deposit_dto )
162+ await DepositService .create (deposit_dto , session )
160163 deposits_sum += float (deposit ['value' ]) / pow (10 , 6 )
161164 return deposits_sum
162165
@@ -175,18 +178,19 @@ async def get_crypto_prices(cryptocurrency: Cryptocurrency) -> float:
175178 return float (next (iter (response_json ['result' ].values ()))['c' ][0 ])
176179
177180 @staticmethod
178- async def get_new_deposits_amount (user_dto : UserDTO , cryptocurrency : Cryptocurrency ):
179- deposits = await DepositService .get_by_user_dto (user_dto )
181+ async def get_new_deposits_amount (user_dto : UserDTO , cryptocurrency : Cryptocurrency ,
182+ session : AsyncSession | Session ):
183+ deposits = await DepositService .get_by_user_dto (user_dto , session )
180184 match cryptocurrency :
181185 case Cryptocurrency .BTC :
182- return await CryptoApiManager .get_new_btc_deposits (user_dto , deposits )
186+ return await CryptoApiManager .get_new_btc_deposits (user_dto , deposits , session )
183187 case Cryptocurrency .LTC :
184- return await CryptoApiManager .get_new_ltc_deposits (user_dto , deposits )
188+ return await CryptoApiManager .get_new_ltc_deposits (user_dto , deposits , session )
185189 case Cryptocurrency .SOL :
186- return await CryptoApiManager .get_sol_balance (user_dto , deposits )
190+ return await CryptoApiManager .get_sol_balance (user_dto , deposits , session )
187191 case Cryptocurrency .USDT_TRC20 :
188- return await CryptoApiManager .get_usdt_trc20_balance (user_dto , deposits )
192+ return await CryptoApiManager .get_usdt_trc20_balance (user_dto , deposits , session )
189193 case Cryptocurrency .USDT_ERC20 :
190- return await CryptoApiManager .get_usdt_erc20_balance (user_dto , deposits )
194+ return await CryptoApiManager .get_usdt_erc20_balance (user_dto , deposits , session )
191195 case Cryptocurrency .USDC_ERC20 :
192- return await CryptoApiManager .get_usdc_erc20_balance (user_dto , deposits )
196+ return await CryptoApiManager .get_usdc_erc20_balance (user_dto , deposits , session )
0 commit comments