Initial commit from monorepo
This commit is contained in:
183
transactions_script.py
Normal file
183
transactions_script.py
Normal file
@@ -0,0 +1,183 @@
|
||||
import os
|
||||
import uuid
|
||||
import tigerbeetle as tb
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.conf import settings
|
||||
from billing_app.models import Account as AccountModel
|
||||
from billing_app.tigerbeetle_client import tigerbeetle_client
|
||||
|
||||
# Ensure Django settings are configured if not already
|
||||
if not settings.configured:
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'billing.settings')
|
||||
import django
|
||||
django.setup()
|
||||
|
||||
# Define Ledger and Code (these are example values, adjust as needed)
|
||||
LEDGER = 700
|
||||
CODE = 10
|
||||
|
||||
print("--- Starting Raw Data Display for Multiple Transactions ---")
|
||||
|
||||
# 1. Create source, destination, and bank accounts
|
||||
print("Creating source, destination, and bank accounts...")
|
||||
source_account_id = uuid.uuid4()
|
||||
destination_account_id = uuid.uuid4()
|
||||
bank_account_id = uuid.uuid4() # Bank account for initial funding
|
||||
|
||||
# Create in local DB
|
||||
source_local_account = AccountModel.objects.create(uuid=source_account_id)
|
||||
destination_local_account = AccountModel.objects.create(uuid=destination_account_id)
|
||||
bank_local_account = AccountModel.objects.create(uuid=bank_account_id)
|
||||
|
||||
# Prepare for TigerBeetle
|
||||
accounts_to_create_details = [
|
||||
{
|
||||
"id": source_account_id.int,
|
||||
"ledger": LEDGER,
|
||||
"code": CODE,
|
||||
"flags": tb.AccountFlags.NONE # All flags set to NONE for simplicity
|
||||
},
|
||||
{
|
||||
"id": destination_account_id.int,
|
||||
"ledger": LEDGER,
|
||||
"code": CODE,
|
||||
"flags": tb.AccountFlags.NONE # All flags set to NONE for simplicity
|
||||
},
|
||||
{
|
||||
"id": bank_account_id.int,
|
||||
"ledger": LEDGER,
|
||||
"code": CODE,
|
||||
"flags": tb.AccountFlags.NONE # Changed: Removed CREDIT_RESERVED, set to NONE
|
||||
},
|
||||
]
|
||||
|
||||
# Create accounts in TigerBeetle using create_account (singular) for each
|
||||
account_creation_results = []
|
||||
for acc_details in accounts_to_create_details:
|
||||
flags = acc_details.get("flags", tb.AccountFlags.NONE)
|
||||
results = tigerbeetle_client.create_account(
|
||||
acc_details["id"],
|
||||
acc_details["ledger"],
|
||||
acc_details["code"],
|
||||
flags
|
||||
)
|
||||
if results: # If non-empty, it means there are errors
|
||||
account_creation_results.extend(results)
|
||||
|
||||
if account_creation_results:
|
||||
print(f"Failed to create accounts in TigerBeetle. Raw results: {account_creation_results}") # Print raw results
|
||||
import sys
|
||||
sys.exit(1)
|
||||
else:
|
||||
print(f"Source account created: {source_account_id}")
|
||||
print(f"Destination account created: {destination_account_id}")
|
||||
print(f"Bank account created: {bank_account_id}")
|
||||
|
||||
# Store all transfer IDs for later lookup
|
||||
all_transfer_ids = []
|
||||
|
||||
# 2. Fund the source account (initial balance)
|
||||
print("Funding source account with initial balance...")
|
||||
initial_fund_id = uuid.uuid4()
|
||||
initial_fund_transfer = tb.Transfer(
|
||||
id=initial_fund_id.int,
|
||||
debit_account_id=bank_account_id.int, # Use real bank account ID
|
||||
credit_account_id=source_account_id.int,
|
||||
amount=1000, # Initial amount
|
||||
ledger=LEDGER,
|
||||
code=CODE,
|
||||
)
|
||||
fund_results = tigerbeetle_client.create_transfer(
|
||||
initial_fund_transfer.id,
|
||||
initial_fund_transfer.debit_account_id,
|
||||
initial_fund_transfer.credit_account_id,
|
||||
initial_fund_transfer.amount,
|
||||
initial_fund_transfer.ledger,
|
||||
initial_fund_transfer.code,
|
||||
initial_fund_transfer.flags
|
||||
)
|
||||
if fund_results: # If non-empty, it means there are errors
|
||||
print(f"Failed to fund source account. Raw results: {fund_results}")
|
||||
import sys
|
||||
sys.exit(1)
|
||||
else:
|
||||
print(f"Source account funded with 1000. Transfer ID: {initial_fund_id}")
|
||||
all_transfer_ids.append(initial_fund_id.int) # Store ID
|
||||
|
||||
# 3. Perform 5 transactions from source to destination
|
||||
print("Performing 5 transactions from source to destination...")
|
||||
for i in range(1, 6):
|
||||
transfer_id = uuid.uuid4()
|
||||
transfer_amount = 100 # Example amount for each transfer
|
||||
|
||||
transfer = tb.Transfer( # tb.Transfer object
|
||||
id=transfer_id.int,
|
||||
debit_account_id=source_account_id.int,
|
||||
credit_account_id=destination_account_id.int,
|
||||
amount=transfer_amount,
|
||||
ledger=LEDGER,
|
||||
code=CODE,
|
||||
)
|
||||
transfer_results = tigerbeetle_client.create_transfer(
|
||||
transfer.id,
|
||||
transfer.debit_account_id,
|
||||
transfer.credit_account_id,
|
||||
transfer.amount,
|
||||
transfer.ledger,
|
||||
transfer.code,
|
||||
transfer.flags
|
||||
)
|
||||
if transfer_results:
|
||||
print(f"Transaction {i} failed. Raw results: {transfer_results}")
|
||||
else:
|
||||
print(f"Transaction {i} (Amount: {transfer_amount}) completed. Transfer ID: {transfer.id}")
|
||||
all_transfer_ids.append(transfer_id.int) # Store ID
|
||||
|
||||
# 4. Query detailed account information from TigerBeetle
|
||||
print("\n--- Raw Account Details (from TigerBeetle) ---")
|
||||
account_ids_to_lookup = [source_account_id.int, destination_account_id.int, bank_account_id.int]
|
||||
detailed_accounts = tigerbeetle_client.lookup_accounts(account_ids_to_lookup)
|
||||
|
||||
for account in detailed_accounts:
|
||||
if isinstance(account, tb.Account):
|
||||
print(f"Account ID: {uuid.UUID(int=account.id)}")
|
||||
print(f" User Data 128: {account.user_data_128}")
|
||||
print(f" User Data 64: {account.user_data_64}")
|
||||
print(f" User Data 32: {account.user_data_32}")
|
||||
print(f" Ledger: {account.ledger}")
|
||||
print(f" Code: {account.code}")
|
||||
print(f" Flags: {account.flags}")
|
||||
print(f" Timestamp: {account.timestamp}")
|
||||
print(f" Debits Posted: {account.debits_posted}")
|
||||
print(f" Credits Posted: {account.credits_posted}")
|
||||
print(f" Debits Pending: {account.debits_pending}")
|
||||
print(f" Credits Pending: {account.credits_pending}")
|
||||
print(f" Net Balance: {account.credits_posted - account.debits_posted}")
|
||||
print("-" * 30)
|
||||
else:
|
||||
print(f"Could not retrieve details for account ID: {account.id if hasattr(account, 'id') else 'Unknown'}")
|
||||
|
||||
# 5. Query ALL transfer information
|
||||
print("\n--- Raw Transfer Details (from TigerBeetle) ---")
|
||||
detailed_transfers = tigerbeetle_client._client.lookup_transfers(all_transfer_ids)
|
||||
|
||||
for transfer_detail in detailed_transfers:
|
||||
if isinstance(transfer_detail, tb.Transfer):
|
||||
print(f"Transfer ID: {uuid.UUID(int=transfer_detail.id)}")
|
||||
print(f" Debit Account ID: {uuid.UUID(int=transfer_detail.debit_account_id)}")
|
||||
print(f" Credit Account ID: {uuid.UUID(int=transfer_detail.credit_account_id)}")
|
||||
print(f" Amount: {transfer_detail.amount}")
|
||||
print(f" Pending ID: {transfer_detail.pending_id}")
|
||||
print(f" User Data 128: {transfer_detail.user_data_128}")
|
||||
print(f" User Data 64: {transfer_detail.user_data_64}")
|
||||
print(f" User Data 32: {transfer_detail.user_data_32}")
|
||||
print(f" Timeout: {transfer_detail.timeout}")
|
||||
print(f" Ledger: {transfer_detail.ledger}")
|
||||
print(f" Code: {transfer_detail.code}")
|
||||
print(f" Flags: {transfer_detail.flags}")
|
||||
print(f" Timestamp: {transfer_detail.timestamp}")
|
||||
print("-" * 30)
|
||||
else:
|
||||
print(f"Could not retrieve details for transfer ID: {transfer_detail.id if hasattr(transfer_detail, 'id') else 'Unknown'}")
|
||||
|
||||
print("\n--- Raw Data Display Complete ---")
|
||||
Reference in New Issue
Block a user