46 lines
1.5 KiB
Python

import enum
from uuid import uuid4
from sqlalchemy import JSON, Column, DateTime, Enum, Float, ForeignKey, String
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from app.core.database import Base
class PaymentStatus(enum.Enum):
PENDING = "pending"
PROCESSING = "processing"
COMPLETED = "completed"
FAILED = "failed"
REFUNDED = "refunded"
class PaymentMethod(enum.Enum):
CREDIT_CARD = "credit_card"
PAYPAL = "paypal"
BANK_TRANSFER = "bank_transfer"
CASH_ON_DELIVERY = "cash_on_delivery"
STRIPE = "stripe"
APPLE_PAY = "apple_pay"
GOOGLE_PAY = "google_pay"
class Payment(Base):
__tablename__ = "payments"
id = Column(String(36), primary_key=True, default=lambda: str(uuid4()))
order_id = Column(String(36), ForeignKey("orders.id"), nullable=False)
amount = Column(Float, nullable=False)
payment_method = Column(Enum(PaymentMethod), nullable=False)
status = Column(Enum(PaymentStatus), default=PaymentStatus.PENDING)
transaction_id = Column(String(255), nullable=True, unique=True)
payment_details = Column(JSON, nullable=True) # JSON with payment provider details
error_message = Column(String(512), nullable=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
# Relationships
order = relationship("Order", back_populates="payments")
def __repr__(self):
return f"<Payment {self.id} for Order {self.order_id}>"