06/15 Phase 1 + 2 codes

This commit is contained in:
2026-06-15 11:23:05 -04:00
commit c2064b84b4
62 changed files with 2937 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
"""Geocoding reference tables.
ZipGeo: offline US ZIP -> lat/lng/city/state/metro (source the full ~42k-row
dataset from SimpleMaps US ZIP or Census ZCTA; a small sample is seeded for tests).
Metro: SEO landing-page anchor (pages built in Phase 7; column wired now).
"""
from app.extensions import db
class ZipGeo(db.Model):
__tablename__ = "zip_geo"
zip = db.Column(db.String(12), primary_key=True)
city = db.Column(db.String(80), nullable=False)
state = db.Column(db.String(2), nullable=False, index=True)
lat = db.Column(db.Float, nullable=False)
lng = db.Column(db.Float, nullable=False)
metro = db.Column(db.String(80), nullable=True, index=True)
def __repr__(self):
return f"<ZipGeo {self.zip} {self.city},{self.state}>"
class Metro(db.Model):
__tablename__ = "metros"
id = db.Column(db.BigInteger().with_variant(db.Integer, "sqlite"),
primary_key=True, autoincrement=True)
slug = db.Column(db.String(80), unique=True, nullable=False, index=True)
name = db.Column(db.String(120), nullable=False)
state = db.Column(db.String(2), nullable=True)
center_lat = db.Column(db.Float, nullable=True)
center_lng = db.Column(db.Float, nullable=True)
def __repr__(self):
return f"<Metro {self.slug}>"