From 9d6a4581152b6a7c8c452b3dc911745503192b1e Mon Sep 17 00:00:00 2001 From: giles Date: Sat, 21 Feb 2026 22:52:36 +0000 Subject: [PATCH] Wire real FederationService + add page federation events - Blog app now registers SqlFederationService (was stub/no-op) - sync_single_page emits post.published/updated events for pages - Updated shared submodule: fix sign_request in AP delivery handler Co-Authored-By: Claude Opus 4.6 --- bp/blog/ghost/ghost_sync.py | 20 +++++++++++++++++++- services/__init__.py | 4 ++-- shared | 2 +- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/bp/blog/ghost/ghost_sync.py b/bp/blog/ghost/ghost_sync.py index 4bb799b..0e1d6ec 100644 --- a/bp/blog/ghost/ghost_sync.py +++ b/bp/blog/ghost/ghost_sync.py @@ -1066,7 +1066,25 @@ async def sync_single_page(sess: AsyncSession, ghost_id: str) -> None: tag_obj = await _upsert_tag(sess, pt) tag_map[pt["id"]] = tag_obj - await _upsert_post(sess, gp, author_map, tag_map) + post = await _upsert_post(sess, gp, author_map, tag_map) + + # Emit federation event for published pages + if post.status == "published" and post.user_id: + from shared.events import emit_event + from shared.infrastructure.urls import app_url + event_type = "post.published" if post.created_at == post.updated_at else "post.updated" + await emit_event( + sess, + event_type=event_type, + aggregate_type="Post", + aggregate_id=post.id, + payload={ + "user_id": post.user_id, + "title": post.title or "", + "excerpt": post.custom_excerpt or post.excerpt or "", + "url": app_url("coop", f"/{post.slug}/"), + }, + ) async def sync_single_author(sess: AsyncSession, ghost_id: str) -> None: diff --git a/services/__init__.py b/services/__init__.py index effaa97..d1baee4 100644 --- a/services/__init__.py +++ b/services/__init__.py @@ -24,5 +24,5 @@ def register_domain_services() -> None: if not services.has("cart"): services.cart = SqlCartService() if not services.has("federation"): - from shared.services.stubs import StubFederationService - services.federation = StubFederationService() + from shared.services.federation_impl import SqlFederationService + services.federation = SqlFederationService() diff --git a/shared b/shared index 1d83a33..68941b9 160000 --- a/shared +++ b/shared @@ -1 +1 @@ -Subproject commit 1d83a339b6008b1743846ea5ab32fe15abe644a9 +Subproject commit 68941b97f6b3cdcfb33de598c0b5d227e58e22cd