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

@@ -0,0 +1,23 @@
{% extends '_types/root/_index.html' %}
{% block content %}
<div class="max-w-3xl mx-auto py-8 px-4">
<h1 class="text-2xl font-bold mb-6">Markets</h1>
{% if markets %}
<div class="grid gap-4">
{% for m in markets %}
<a href="/{{ m.slug }}/"
class="block p-6 bg-white border border-stone-200 rounded-lg hover:border-stone-400 transition-colors">
<h2 class="text-lg font-semibold">{{ m.name }}</h2>
{% if m.description %}
<p class="text-stone-600 mt-1">{{ m.description }}</p>
{% endif %}
</a>
{% endfor %}
</div>
{% else %}
<p class="text-stone-500">No markets available.</p>
{% endif %}
</div>
{% endblock %}