Spaces:
Running
Running
| import logging | |
| from psycopg import Connection | |
| from sqlalchemy.orm import joinedload | |
| from typing import Optional | |
| from src.entity.transaction import Transaction | |
| logger = logging.getLogger(__name__) | |
| def fetch_transaction(db: Connection, transaction_id: int) -> Optional[Transaction]: | |
| """ | |
| Fetch a transaction from the database | |
| """ | |
| transaction = db.query(Transaction).options( | |
| joinedload(Transaction.fraud_details) | |
| ).filter(Transaction.id == transaction_id).first() | |
| if transaction is None: | |
| raise ValueError(f"Transaction {transaction_id} not found") | |
| else: | |
| logger.info(f"Transaction {transaction_id} found") | |
| return transaction | |
| def fetch_transaction_by_number(db: Connection, transaction_number: str) -> Optional[Transaction]: | |
| """ | |
| Fetch a transaction from the database | |
| """ | |
| transaction = db.query(Transaction).options( | |
| joinedload(Transaction.fraud_details) | |
| ).filter(Transaction.transaction_number == transaction_number).first() | |
| if transaction is None: | |
| raise ValueError(f"Transaction {transaction_number} not found") | |
| else: | |
| logger.info(f"Transaction {transaction_number} found") | |
| return transaction | |
| def commit_transaction(db: Connection, transaction: Transaction): | |
| """ | |
| Commit a transaction to the database | |
| """ | |
| db.merge(transaction) # Make sure the object is in the session | |
| db.commit() | |
| def insert_transaction(db: Connection, transaction: Transaction) -> Optional[Transaction]: | |
| """ | |
| Insert a transaction into the database | |
| """ | |
| db.add(transaction) | |
| db.commit() | |
| db.refresh(transaction) | |
| return transaction | |