fraud-detection-service-api / src /repository /transaction_repo.py
SlimG's picture
fixup: fetch transactions by number and not by id
b7d8f76
raw
history blame
1.68 kB
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