- Remove DimTRREBDistrict model and FactPurchases model - Remove TRREBDistrict schema and AreaType enum - Remove TRREBDistrictParser from geo parsers - Remove load_trreb_districts from dimension loaders - Remove create_district_map from choropleth figures - Remove get_demo_districts and get_demo_purchase_data from demo_data - Update summary metrics to remove purchase-related metrics - Update callbacks to remove TRREB-related comments - Update methodology page to remove TRREB data source section - Update dashboard data notice to remove TRREB mention Closes #49 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
"""SQLAlchemy models for fact tables."""
|
|
|
|
from sqlalchemy import ForeignKey, Integer, Numeric, String
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from .base import Base
|
|
|
|
|
|
class FactRentals(Base):
|
|
"""Fact table for CMHC rental market data.
|
|
|
|
Grain: One row per zone per bedroom type per survey year.
|
|
"""
|
|
|
|
__tablename__ = "fact_rentals"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
date_key: Mapped[int] = mapped_column(
|
|
Integer, ForeignKey("dim_time.date_key"), nullable=False
|
|
)
|
|
zone_key: Mapped[int] = mapped_column(
|
|
Integer, ForeignKey("dim_cmhc_zone.zone_key"), nullable=False
|
|
)
|
|
bedroom_type: Mapped[str] = mapped_column(String(20), nullable=False)
|
|
universe: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
|
avg_rent: Mapped[float | None] = mapped_column(Numeric(10, 2), nullable=True)
|
|
median_rent: Mapped[float | None] = mapped_column(Numeric(10, 2), nullable=True)
|
|
vacancy_rate: Mapped[float | None] = mapped_column(Numeric(5, 2), nullable=True)
|
|
availability_rate: Mapped[float | None] = mapped_column(
|
|
Numeric(5, 2), nullable=True
|
|
)
|
|
turnover_rate: Mapped[float | None] = mapped_column(Numeric(5, 2), nullable=True)
|
|
rent_change_pct: Mapped[float | None] = mapped_column(Numeric(5, 2), nullable=True)
|
|
reliability_code: Mapped[str | None] = mapped_column(String(2), nullable=True)
|
|
|
|
# Relationships
|
|
time = relationship("DimTime", backref="rentals")
|
|
zone = relationship("DimCMHCZone", backref="rentals")
|