from datetime import datetime, timezone from typing import Optional from sqlalchemy import String, Integer, Boolean, DateTime, ForeignKey, Text from sqlalchemy.orm import Mapped, mapped_column from app.core.database import Base class PlanBilling(Base): __tablename__ = "plan_billing" plan: Mapped[str] = mapped_column( String(50), ForeignKey("plan_limits.plan"), primary_key=True ) display_name: Mapped[str] = mapped_column(String(255), nullable=False) description: Mapped[Optional[str]] = mapped_column(Text, nullable=True) monthly_price_cents: Mapped[Optional[int]] = mapped_column(Integer, nullable=True) annual_price_cents: Mapped[Optional[int]] = mapped_column(Integer, nullable=True) stripe_product_id: Mapped[Optional[str]] = mapped_column(String(255), nullable=True) stripe_monthly_price_id: Mapped[Optional[str]] = mapped_column(String(255), nullable=True) stripe_annual_price_id: Mapped[Optional[str]] = mapped_column(String(255), nullable=True) is_public: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) is_archived: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False) sort_order: Mapped[int] = mapped_column(Integer, nullable=False, default=0) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc) ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc), )