import os import asyncio from pathlib import Path from .storage import store_transaction, prisma_client from .SolanaAPI import SolanaAPI LOG_DIRECTORY = "./logs" FILE_MASK = "wh_*.json" async def process_log_file(file_path): # Read the file and extract transaction data with open(file_path, 'r') as file: data = file.read() # Assume data is parsed into these variables wallet_id = "extracted_wallet_id" transaction_type = "extracted_transaction_type" sell_currency = "extracted_sell_currency" sell_amount = 0.0 sell_value = 0.0 buy_currency = "extracted_buy_currency" buy_amount = 0.0 buy_value = 0.0 solana_signature = "extracted_solana_signature" details = {} # Process the webhook data solana_api = SolanaAPI() transaction_data = await solana_api.process_wh(data) # Check if the transaction already exists existing_transaction = await prisma_client.transaction.find_first( where={'solana_signature': solana_signature} ) if not existing_transaction: # Store the transaction if it doesn't exist transaction_data = { 'wallet_id': wallet_id, 'type': transaction_type, 'sell_currency': sell_currency, 'sell_amount': sell_amount, 'sell_value': sell_value, 'buy_currency': buy_currency, 'buy_amount': buy_amount, 'buy_value': buy_value, 'solana_signature': solana_signature, 'details': details } await store_transaction(transaction_data) # Rename the file to append '_saved' new_file_path = file_path.with_name(file_path.stem + "_saved" + file_path.suffix) os.rename(file_path, new_file_path) async def watch_for_new_logs(): while True: for file_path in Path(LOG_DIRECTORY).glob(FILE_MASK): await process_log_file(file_path) await asyncio.sleep(10) # Check every 10 seconds