Coverage for src / idx_api / models / brokerage_domain.py: 100%
16 statements
« prev ^ index » next coverage.py v7.13.1, created at 2025-12-28 11:09 -0700
« prev ^ index » next coverage.py v7.13.1, created at 2025-12-28 11:09 -0700
1"""BrokerageDomain model - maps domain names to brokerages for white-label multi-tenant support."""
3from datetime import datetime
4from typing import TYPE_CHECKING, Optional
6from sqlalchemy import Boolean, DateTime, ForeignKey, String, UniqueConstraint
7from sqlalchemy.orm import Mapped, mapped_column, relationship
9from idx_api.models.base import Base, TimestampMixin
11if TYPE_CHECKING:
12 from idx_api.models.brokerage import Brokerage
15class BrokerageDomain(Base, TimestampMixin):
16 """
17 Maps domain names to brokerages for white-label multi-tenant support.
19 When a request comes in, the host header is checked against this table
20 to determine which brokerage's configuration to serve via site.json.
21 """
23 __tablename__ = "brokerage_domains"
24 __table_args__ = (
25 UniqueConstraint("domain", name="uq_brokerage_domains_domain"),
26 )
28 id: Mapped[int] = mapped_column(primary_key=True)
29 brokerage_id: Mapped[int] = mapped_column(ForeignKey("brokerages.id", ondelete="CASCADE"), nullable=False, index=True)
31 # The domain name (e.g., "elevateidaho.com", "www.elevateidaho.com")
32 domain: Mapped[str] = mapped_column(String(255), nullable=False, index=True)
34 # Whether this is the primary/canonical domain for the brokerage
35 is_primary: Mapped[bool] = mapped_column(Boolean, default=False, server_default='0')
37 # Whether this domain is verified (DNS check passed)
38 is_verified: Mapped[bool] = mapped_column(Boolean, default=False, server_default='0')
39 verified_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
41 # Optional notes about this domain
42 notes: Mapped[Optional[str]] = mapped_column(String(500))
44 # Relationships
45 brokerage: Mapped["Brokerage"] = relationship(back_populates="domains")
47 def __repr__(self) -> str:
48 return f"<BrokerageDomain(id={self.id}, domain='{self.domain}', brokerage_id={self.brokerage_id})>"