File size: 2,294 Bytes
4aed8ef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60abdf9
4aed8ef
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

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)