- Emit calendar_entry.created events when entries are added
- Updated shared with federation handlers, delivery, anchoring
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Register StubFederationService in services/__init__.py
- Add federation to CI sibling list
- Add federation URL to app-config.yaml
- Update shared submodule with federation models/contracts/services
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The mini macro was imported without context, so cart_count was invisible
to the macro. Pass count explicitly in _adjust_response.html and add
'with context' to _buy_result.html. Update shared submodule.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Pass cart_count directly to the template instead of relying on the
context processor, which may not resolve correctly for the /tickets/
URL prefix.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The OOB swap was replacing the cart display with empty/wrong content.
Cart count updates naturally on next page navigation instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Entry page shows tickets sold count, remaining, and "in basket" count
- Replace numeric input + Buy button with add-to-basket / +/- controls
- New POST /tickets/adjust/ route creates/cancels tickets to target count
- Keep buy form active after adding (no confirmation replacement)
- New service functions: get_sold_ticket_count, get_user_reserved_count,
cancel_latest_reserved_ticket
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>