Files
rose-ash/blog
giles 3b707ec8a0
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 3m0s
Decouple all cross-app service calls to HTTP endpoints
Replace every direct cross-app services.* call with HTTP-based
communication: call_action() for writes, fetch_data() for reads.
Each app now registers only its own domain service.

Infrastructure:
- shared/infrastructure/actions.py — POST client for /internal/actions/
- shared/infrastructure/data_client.py — GET client for /internal/data/
- shared/contracts/dtos.py — dto_to_dict/dto_from_dict serialization

Action endpoints (writes):
- events: 8 handlers (ticket adjust, claim/confirm, toggle, adopt)
- market: 2 handlers (create/soft-delete marketplace)
- cart: 1 handler (adopt cart for user)

Data endpoints (reads):
- blog: 4 (post-by-slug/id, posts-by-ids, search-posts)
- events: 10 (pending entries/tickets, entries/tickets for page/order,
  entry-ids, associated-entries, calendars, visible-entries-for-period)
- market: 1 (marketplaces-for-container)
- cart: 1 (cart-summary)

Service registration cleanup:
- blog→blog+federation, events→calendar+federation,
  market→market+federation, cart→cart only,
  federation→federation only, account→nothing
- Stubs reduced to minimal StubFederationService

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 03:01:38 +00:00
..
2026-02-24 20:13:00 +00:00

Blog App (Coop)

Content management, Ghost CMS sync, navigation, and the prose editor for the Rose Ash cooperative platform. Runs database migrations on startup and serves as the primary content hub.

Structure

app.py                  # Application factory (create_base_app + blueprints)
path_setup.py           # Adds project root + app dir to sys.path
entrypoint.sh           # Container entrypoint (migrations, Redis flush, start)
bp/
  blog/                 #   Post listing, Ghost CMS sync, webhooks
  post/                 #   Single post view and admin
  admin/                #   Settings admin interface
  menu_items/           #   Navigation menu management
  snippets/             #   Reusable content snippets
  fragments/            #   nav-tree fragment for cross-app navigation
models/                 # Re-export stubs pointing to shared/models/
services/               # register_domain_services() — wires blog + calendar + market + cart
templates/              # Blog-specific templates (override shared/)

Cross-domain communication

All inter-app communication uses typed service contracts (no HTTP APIs):

  • services.calendar.* — calendar/entry queries via CalendarService protocol
  • services.market.* — marketplace queries via MarketService protocol
  • services.cart.* — cart summary via CartService protocol
  • services.federation.* — AP publishing via FederationService protocol

Fragments served

  • nav-tree — site navigation tree, fetched by all other apps

Fragments consumed

  • cart-mini (from cart) — cart icon + badge
  • auth-menu (from account) — sign-in / user menu
  • container-nav (from events, market) — sidebar widgets
  • container-cards (from events) — event cards on listing pages