SPB Git

spb/lou-ka Public

Lou·Ka — tous les logements à louer du Québec, un seul endroit.

HTML 99.7%

Stats : compte « ailleurs au Québec » distinct du Grand Montréal (expansion provinciale)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 2 days ago (Aug 9, 2026) parent 2e6d158

Showing 3 changed files with +25 and −3

modified frontend/src/api.ts +1 −0
@@ -131,6 +131,7 @@ export interface Stats {
131 131 quebec: number;
132 132 levis: number;
133 133 montreal: number;
134 + autres: number; // reste de la province (Outaouais, Estrie, Mauricie…)
134 135 sources: number;
135 136 avg_price: number | null;
136 137 }
modified frontend/src/pages/Home.tsx +3 −0
@@ -96,6 +96,9 @@ export default function Home() {
96 96 {(stats.montreal ?? 0) > 0 && (
97 97 <span className="stat-chip"><b>{stats.montreal}</b> Grand Montréal</span>
98 98 )}
99 + {(stats.autres ?? 0) > 0 && (
100 + <span className="stat-chip"><b>{stats.autres}</b> ailleurs au Québec</span>
101 + )}
99 102 {stats.avg_price != null && (
100 103 <span className="stat-chip">
101 104 loyer moyen <b>{Math.round(stats.avg_price)} $</b>
modified louka/web.py +21 −3
@@ -232,17 +232,35 @@ def sources():
232 232 return {"sources": registry}
233 233
234 234
235 +# Villes de la grande région de Montréal (le reste de la province est
236 +# compté dans « autres » — Outaouais, Estrie, Mauricie, Est-du-Québec…)
237 +_VILLES_GM = (
238 + "Montréal", "Montréal-Est", "Laval", "Longueuil", "Brossard", "Terrebonne",
239 + "Mascouche", "Repentigny", "Boucherville", "Saint-Lambert", "Westmount",
240 + "Côte Saint-Luc", "Dorval", "Pointe-Claire", "Verdun", "LaSalle", "Anjou",
241 + "Saint-Constant", "Delson", "Candiac", "Châteauguay", "Chambly",
242 + "Sainte-Julie", "Varennes", "Belœil", "McMasterville", "Mont-Saint-Hilaire",
243 + "Saint-Basile-le-Grand", "Saint-Bruno-de-Montarville", "Boisbriand",
244 + "Richelieu", "Beauharnois", "Salaberry-de-Valleyfield", "Vaudreuil-Dorion",
245 + "Kirkland", "Beaconsfield", "Dollard-des-Ormeaux", "Mont-Royal", "Outremont",
246 +)
247 +
248 +
235 249 @app.get("/api/stats")
236 250 def stats():
237 251 con = db.connect()
252 + gm = ",".join("?" * len(_VILLES_GM))
238 253 row = con.execute(
239 """SELECT COUNT(*) total,
254 + f"""SELECT COUNT(*) total,
240 255 SUM(CASE WHEN city='Québec' THEN 1 ELSE 0 END) quebec,
241 256 SUM(CASE WHEN city='Lévis' THEN 1 ELSE 0 END) levis,
242 SUM(CASE WHEN city NOT IN ('Québec','Lévis') THEN 1 ELSE 0 END) montreal,
257 + SUM(CASE WHEN city IN ({gm}) THEN 1 ELSE 0 END) montreal,
258 + SUM(CASE WHEN city NOT IN ('Québec','Lévis') AND city NOT IN ({gm})
259 + THEN 1 ELSE 0 END) autres,
243 260 COUNT(DISTINCT source) sources,
244 261 AVG(price) avg_price
245 FROM listings WHERE active=1""").fetchone()
262 + FROM listings WHERE active=1""",
263 + list(_VILLES_GM) + list(_VILLES_GM)).fetchone()
246 264 log = [dict(r) for r in con.execute(
247 265 "SELECT * FROM sync_log ORDER BY ts DESC LIMIT 20")]
248 266 con.close()
249 267