from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Numeric, Enum from sqlalchemy.sql import func from sqlalchemy.orm import relationship import enum from app.db.base import Base class PaymentStatus(str, enum.Enum): PENDING = "pending" SUCCESS = "success" FAILED = "failed" CANCELLED = "cancelled" class Payment(Base): __tablename__ = "payments" id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("users.id"), nullable=False) amount = Column(Numeric(15, 2), nullable=False) transaction_ref = Column(String(100), unique=True, nullable=False, index=True) status = Column(Enum(PaymentStatus), default=PaymentStatus.PENDING, nullable=False) payment_method = Column(String(50)) description = Column(String(255)) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) user = relationship("User", back_populates="payments")