from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Enum from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.db.base import Base import enum class PaymentStatus(str, enum.Enum): PENDING = "pending" CONFIRMED = "confirmed" FAILED = "failed" CANCELLED = "cancelled" class Payment(Base): __tablename__ = "payments" id = Column(Integer, primary_key=True, index=True) order_id = Column(Integer, ForeignKey("orders.id"), nullable=False) account_number = Column(String, nullable=False) # Account provided by payment provider account_name = Column(String, nullable=False) bank_name = Column(String, nullable=False) amount = Column(Float, nullable=False) reference = Column(String, unique=True, nullable=False) # Payment reference status = Column(Enum(PaymentStatus), default=PaymentStatus.PENDING) provider_transaction_id = Column(String) # Transaction ID from payment provider confirmed_at = Column(DateTime) created_at = Column(DateTime, server_default=func.now()) updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) # Relationships order = relationship("Order", back_populates="payments")