diff --git a/README.md b/README.md index 26f5fcd..6d9a840 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Product browsing and marketplace service for the Rose Ash cooperative. Displays ## Architecture -One of four Quart microservices sharing a single PostgreSQL database: +One of five Quart microservices sharing a single PostgreSQL database: | App | Port | Domain | |-----|------|--------| @@ -12,6 +12,7 @@ One of four Quart microservices sharing a single PostgreSQL database: | **market** | 8001 | Product browsing, Suma scraping | | cart | 8002 | Shopping cart, checkout, orders | | events | 8003 | Calendars, bookings, tickets | +| federation | 8004 | ActivityPub, fediverse social | ## Structure @@ -19,9 +20,7 @@ One of four Quart microservices sharing a single PostgreSQL database: app.py # Application factory (create_base_app + blueprints) path_setup.py # Adds project root + app dir to sys.path config/app-config.yaml # App URLs, feature flags -models/ # Market-domain models - market.py # Product, Category, CartItem - market_place.py # MarketPlace (page-scoped marketplace) +models/ # Market-domain models (+ re-export stubs) bp/ # Blueprints market/ # Market root, navigation, category listing browse/ # Product browsing with filters and infinite scroll @@ -29,39 +28,21 @@ bp/ # Blueprints cart/ # Page-scoped cart views api/ # Product sync API (used by scraper) scrape/ # Suma Wholesale scraper - get_auth.py # Authentication - listings.py # Product listing pages - nav.py # Category navigation - product/ # Individual product scraping - build_snapshot/ # Build product snapshots - persist_snapshot/ # Save snapshots to DB - persist_api/ # Save via API -templates/ # Jinja2 templates -entrypoint.sh # Docker entrypoint -Dockerfile -shared/ # Submodule → git.rose-ash.com/coop/shared.git -glue/ # Submodule → git.rose-ash.com/coop/glue.git +services/ # register_domain_services() — wires market + cart +shared/ # Submodule -> git.rose-ash.com/coop/shared.git ``` -## Dependencies +## Cross-Domain Communication -**Cross-app model imports:** -- `blog.models.ghost_content.Post` — `app.py` hydrates page data for marketplace views - -**Glue services:** -- `glue.services.navigation.get_navigation_tree` — context processor builds site nav - -**Internal APIs:** -- Calls `GET /internal/cart/summary` — context processor for cart widget +- `services.cart.*` — cart summary via CartService protocol +- `services.federation.*` — AP publishing via FederationService protocol +- `shared.services.navigation` — site navigation tree ## Scraping ```bash -# Full scrape (Suma Wholesale catalogue) -bash scrape.sh - -# Test scraping (limited) -bash scrape-test.sh +bash scrape.sh # Full Suma Wholesale catalogue +bash scrape-test.sh # Limited test scrape ``` ## Running @@ -70,15 +51,6 @@ bash scrape-test.sh export DATABASE_URL_ASYNC=postgresql+asyncpg://user:pass@localhost/coop export REDIS_URL=redis://localhost:6379/0 export SECRET_KEY=your-secret-key -export SUMA_USER=your-suma-username -export SUMA_PASSWORD=your-suma-password -hypercorn app:app --reload --bind 0.0.0.0:8001 -``` - -## Docker - -```bash -docker build -t market . -docker run -p 8001:8000 --env-file .env market +hypercorn app:app --bind 0.0.0.0:8001 ``` diff --git a/app.py b/app.py index 266adbf..b3a8acb 100644 --- a/app.py +++ b/app.py @@ -1,5 +1,5 @@ from __future__ import annotations -import path_setup # noqa: F401 # adds shared_lib to sys.path +import path_setup # noqa: F401 # adds shared/ to sys.path from pathlib import Path diff --git a/shared b/shared index bccfff0..d697709 160000 --- a/shared +++ b/shared @@ -1 +1 @@ -Subproject commit bccfff0c699fdf9e3ee7c911af1f17a5294943f6 +Subproject commit d697709f60a71941880f4288be469913d11ce967