| 1234567891011121314151617181920212223242526272829303132333435 |
- from datetime import datetime
- from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, String, func
- from sqlalchemy.orm import Mapped, mapped_column
- from backend.app.core.database import Base
- class ExternalLink(Base):
- """External links for sidebar navigation."""
- __tablename__ = "external_links"
- id: Mapped[int] = mapped_column(primary_key=True)
- name: Mapped[str] = mapped_column(String(50))
- url: Mapped[str] = mapped_column(String(500))
- icon: Mapped[str] = mapped_column(String(50), default="link")
- custom_icon: Mapped[str | None] = mapped_column(String(255), nullable=True) # Filename of uploaded icon
- open_in_new_tab: Mapped[bool] = mapped_column(Boolean, default=False)
- sort_order: Mapped[int] = mapped_column(Integer, default=0)
- created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
- updated_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now(), onupdate=func.now())
- class ExternalLinkBadge(Base):
- """A count on an external sidebar link, set by the app the link points to
- (Bambuddy Orders' To do, say). Kept apart from the link so that setting it
- every minute leaves the link's own ``updated_at`` alone."""
- __tablename__ = "external_link_badges"
- link_id: Mapped[int] = mapped_column(ForeignKey("external_links.id", ondelete="CASCADE"), primary_key=True)
- count: Mapped[int] = mapped_column(Integer, default=0)
- # When the app last reported; an old count isn't shown.
- updated_at: Mapped[datetime] = mapped_column(DateTime)
|