from sqlalchemy import Integer, String, Float, Boolean, DateTime from sqlalchemy.orm import relationship, mapped_column, Mapped from src.entity.fraud_details import FraudDetails from . import Base class Transaction(Base): """ Transaction table """ __tablename__ = "transactions" # Transaction table columns id: Mapped[int] = mapped_column(primary_key=True) transaction_number: Mapped[str] = mapped_column(String, nullable=False) transaction_amount: Mapped[float] = mapped_column(Float, nullable=False) transaction_datetime: Mapped[DateTime] = mapped_column(DateTime, nullable=False) transaction_category: Mapped[str] = mapped_column(String, nullable=True) customer_firstname: Mapped[str] = mapped_column(String, nullable=True) customer_lastname: Mapped[str] = mapped_column(String, nullable=True) customer_gender: Mapped[str] = mapped_column(String, nullable=True) customer_credit_card_number: Mapped[str] = mapped_column('customer_credit_card_num', String, nullable=True) customer_address_street: Mapped[str] = mapped_column(String, nullable=True) customer_address_city: Mapped[str] = mapped_column(String, nullable=True) customer_address_state: Mapped[str] = mapped_column(String, nullable=True) customer_address_zip: Mapped[str] = mapped_column(String, nullable=True) customer_address_latitude: Mapped[float] = mapped_column(Float, nullable=True) customer_address_longitude: Mapped[float] = mapped_column(Float, nullable=True) customer_address_city_population: Mapped[int] = mapped_column(Integer, nullable=True) customer_job: Mapped[str] = mapped_column(String, nullable=True) customer_dob: Mapped[DateTime] = mapped_column(DateTime, nullable=True) merchant_name: Mapped[str] = mapped_column(String, nullable=True) merchant_address_latitude: Mapped[float] = mapped_column(Float, nullable=True) merchant_address_longitude: Mapped[float] = mapped_column(Float, nullable=True) is_fraud: Mapped[bool] = mapped_column(Boolean, nullable=True) is_real_fraud: Mapped[bool] = mapped_column(Boolean, nullable=True) # Dependent table fraud_details: Mapped[FraudDetails] = relationship("FraudDetails", back_populates="transaction", cascade="all, delete-orphan", uselist=False)