from datetime import datetime from sqlalchemy import String, Text, JSON, Boolean, Integer, DateTime from sqlalchemy.orm import Mapped, mapped_column from app.models.base import Base, UUIDMixin, TimestampMixin class SiteSettings(Base, UUIDMixin, TimestampMixin): __tablename__ = "site_settings" site_name: Mapped[str] = mapped_column(String(255), nullable=False, default="") tagline: Mapped[str | None] = mapped_column(String(500), nullable=True) logo_url: Mapped[str | None] = mapped_column(String(2048), nullable=True) footer_text: Mapped[str | None] = mapped_column(Text, nullable=True) social_links: Mapped[dict] = mapped_column(JSON, nullable=False, default=dict) automatic_member_notifications_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) nz_public_holiday_notifications_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) invoice_reminder_notifications_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) invoice_day_of_week: Mapped[int] = mapped_column(Integer, nullable=False, default=1) admin_notifications_cleared_before: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) bookings_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) walks_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) messages_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) two_factor_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) audit_history_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) experiments_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) service_pricing: Mapped[dict] = mapped_column(JSON, nullable=False, default=dict)