import uuid from datetime import datetime from sqlalchemy import DateTime, ForeignKey, String from sqlalchemy.dialects.mysql import CHAR, JSON from sqlalchemy.orm import Mapped, mapped_column, relationship from app.database import Base class Subscription(Base): __tablename__ = "subscriptions" id: Mapped[str] = mapped_column(CHAR(36), primary_key=True, default=lambda: str(uuid.uuid4())) tenant_id: Mapped[str] = mapped_column(CHAR(36), ForeignKey("tenants.id"), unique=True) plan_id: Mapped[str] = mapped_column(CHAR(36), ForeignKey("plans.id")) limits: Mapped[dict | None] = mapped_column(JSON, nullable=True) status: Mapped[str] = mapped_column(String(20), default="TRIAL") started_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.now) ended_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.now) updated_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True, onupdate=datetime.now) tenant: Mapped["Tenant"] = relationship(back_populates="subscription") plan: Mapped["Plan"] = relationship()