All cross-service events now flow through ap_activities with a unified EventProcessor. Internal events use visibility="internal"; federation activities use visibility="public" and get delivered by a wildcard handler. - Add processing columns to APActivity (process_state, actor_uri, etc.) - New emit_activity() / register_activity_handler() API - EventProcessor polls ap_activities instead of domain_events - Rewrite all handlers to accept APActivity - Migrate all 7 emit_event call sites to emit_activity - publish_activity() sets process_state=pending directly (no emit_event bridge) - Migration to drop domain_events table Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
20 lines
672 B
Python
20 lines
672 B
Python
from __future__ import annotations
|
|
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from shared.events import register_activity_handler
|
|
from shared.models.federation import APActivity
|
|
from shared.services.navigation import rebuild_navigation
|
|
|
|
|
|
async def on_child_attached(activity: APActivity, session: AsyncSession) -> None:
|
|
await rebuild_navigation(session)
|
|
|
|
|
|
async def on_child_detached(activity: APActivity, session: AsyncSession) -> None:
|
|
await rebuild_navigation(session)
|
|
|
|
|
|
register_activity_handler("Add", on_child_attached, object_type="rose:ContainerRelation")
|
|
register_activity_handler("Remove", on_child_detached, object_type="rose:ContainerRelation")
|