feat: restructure market app with per-market URL scoping
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 41s

- URL structure changes from /<route> to /<market_slug>/<route>
- Root / shows markets listing page
- app.py: url_value_preprocessor, url_defaults, hydrate_market (events app pattern)
- Browse queries (db_nav, db_products_nocounts, db_products_counts) accept market_id
- _productInfo reads g.market.id to scope all queries
- save_nav accepts market_id, sets on new NavTop rows
- API save_nav passes g.market.id
- Scraper default URLs point to /suma-market/ on port 8001

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
giles
2026-02-10 18:08:48 +00:00
parent 6a266bd94d
commit 9b2687b039
13 changed files with 224 additions and 48 deletions

View File

@@ -53,7 +53,7 @@ def group_by_category(slug_to_links: Dict[str, List[Tuple[str, str]]]) -> Dict[s
return nav
async def get_nav(session) -> Dict[str, Dict]:
async def get_nav(session, market_id=None) -> Dict[str, Dict]:
"""
Return navigation structure; annotate each sub with product counts.
Uses snapshot for offline behaviour.
@@ -62,7 +62,7 @@ async def get_nav(session) -> Dict[str, Dict]:
now_ts = _now()
# load from snapshot
nav = await cb.db_nav(session)
nav = await cb.db_nav(session, market_id=market_id)
# inject counts for each subcategory (and for top-level too if you like)
for label, cat in (nav.get("cats") or {}).items():