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

1"""BrokerageDomain model - maps domain names to brokerages for white-label multi-tenant support.""" 

2 

3from datetime import datetime 

4from typing import TYPE_CHECKING, Optional 

5 

6from sqlalchemy import Boolean, DateTime, ForeignKey, String, UniqueConstraint 

7from sqlalchemy.orm import Mapped, mapped_column, relationship 

8 

9from idx_api.models.base import Base, TimestampMixin 

10 

11if TYPE_CHECKING: 

12 from idx_api.models.brokerage import Brokerage 

13 

14 

15class BrokerageDomain(Base, TimestampMixin): 

16 """ 

17 Maps domain names to brokerages for white-label multi-tenant support. 

18 

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 """ 

22 

23 __tablename__ = "brokerage_domains" 

24 __table_args__ = ( 

25 UniqueConstraint("domain", name="uq_brokerage_domains_domain"), 

26 ) 

27 

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) 

30 

31 # The domain name (e.g., "elevateidaho.com", "www.elevateidaho.com") 

32 domain: Mapped[str] = mapped_column(String(255), nullable=False, index=True) 

33 

34 # Whether this is the primary/canonical domain for the brokerage 

35 is_primary: Mapped[bool] = mapped_column(Boolean, default=False, server_default='0') 

36 

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)) 

40 

41 # Optional notes about this domain 

42 notes: Mapped[Optional[str]] = mapped_column(String(500)) 

43 

44 # Relationships 

45 brokerage: Mapped["Brokerage"] = relationship(back_populates="domains") 

46 

47 def __repr__(self) -> str: 

48 return f"<BrokerageDomain(id={self.id}, domain='{self.domain}', brokerage_id={self.brokerage_id})>"