import uuid from datetime import datetime, date from sqlalchemy import String, ForeignKey, Numeric, DateTime, func from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column, relationship from app.database import Base class Subscription(Base): __tablename__ = "subscriptions" id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, ) user_id: Mapped[str] = mapped_column( String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, ) plan: Mapped[str] = mapped_column(String(20), nullable=False) status: Mapped[str] = mapped_column(String(20), default="active") start_date: Mapped[date] = mapped_column(nullable=False) end_date: Mapped[date] = mapped_column(nullable=False) amount: Mapped[float | None] = mapped_column(Numeric(10, 2), nullable=True) payment_method: Mapped[str | None] = mapped_column(String(50), nullable=True) payment_id: Mapped[str | None] = mapped_column(String(255), nullable=True) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False, ) user: Mapped["User"] = relationship("User", back_populates="subscriptions")