The buy_tickets response now includes an OOB swap of #cart-mini
so the cart badge count updates immediately when tickets are reserved.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Calendar entries route now uses services.cart.cart_summary() instead of
internal HTTP API call to cart app. Market CRUD delegates to
services.market.create_marketplace() / soft_delete_marketplace().
Updates shared submodule.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The services singleton was used in before_request closures but the
import was removed when refactoring to domain_services_fn.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The glue layer's models (MenuNode, ContainerRelation), services
(navigation, relationships), and event handlers have been absorbed
into shared/. The glue submodule caused duplicate SQLAlchemy table
registration for 'menu_nodes'.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace direct Post, MarketPlace, Calendar model queries and HTTP API
calls with typed service calls. Events registers all 4 services via
domain_services_fn with has() guards.
Key changes:
- app.py: use domain_services_fn, Post/Calendar/MarketPlace queries
→ services.blog/calendar/market, HTTP cart API → services.cart
- calendars/markets services: Post → services.blog
- post_associations: Post → services.blog, direct queries → services
- markets routes: remove unused MarketPlace import
- glue imports → shared imports throughout
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Context processor now sums product + calendar counts from cart API
- add_entry route returns OOB cart-mini swap with correct count,
querying pending entries from local session (sees uncommitted entry)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
content_id is a loose reference (no FK to posts.id), so SQLAlchemy
cannot infer the join condition automatically.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace all imports from blog.models and cart.models
with shared.models equivalents
- Convert events/models/calendars.py to re-export stub
- Update shared + glue submodule pointers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
List specific model imports, glue services, and internal APIs
that events code actually references. Remove descriptions of what
other apps do to events data (that belongs in those apps' docs).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document all 12 blueprints, all 6 models with table, submodules,
cross-app integration via glue services, and migration ownership.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
shared: migration to drop cross-domain FK constraints
glue: order lifecycle services, cart adoption, login/order handlers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- CalendarEntry.order_id: plain Integer column (no FK to orders)
- CalendarEntry: remove order relationship
- Ticket.order_id: plain Integer column (no FK to orders)
- Ticket: remove order relationship
Cross-domain bridging now handled by glue services.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Previous runs left self-copies (e.g. events/events/) that caused
'Table already defined' errors. Split into two loops: first rm -rf
all sibling dirs, then copy only non-self siblings.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Each app has its own models/ at the root (imported as bare `models.X`).
The CI copy was also creating {app}/models/ (imported as `{app}.models.X`),
causing SQLAlchemy to see the same table defined twice.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The cp approach failed when sibling repos were mid-update from
their own CI runs. git archive reads directly from git objects,
and git fetch ensures origin/decoupling is available even if the
sibling working tree is on a different branch.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phases 1-3 split models by domain ownership, but cross-app imports
still exist (e.g. cart imports market.models.CartItem). In Docker
each app only has its own code. The CI step now copies sibling app
model packages into the build context before docker build.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 1-3 of decoupling:
- path_setup.py adds project root to sys.path
- Events-owned models in events/models/ (calendars with all related models)
- All imports updated: shared.infrastructure, shared.db, shared.browser, etc.
- Calendar uses container_type/container_id instead of post_id FK
- CalendarEntryPost uses content_type/content_id (generic content refs)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>