feat: wire NATS event publisher into bootstrap + worker

- Both binaries connect to NATS on startup, ensure JetStream stream
- EventPublisherAdapter<NatsTransport> replaces LogEventPublisher
- nats_url config with default nats://localhost:4222
- Deleted bootstrap's LogEventPublisher (no longer needed)
This commit is contained in:
2026-05-31 11:53:51 +02:00
parent 0e9911ebfc
commit 838ed9a3f8
11 changed files with 35 additions and 36 deletions

View File

@@ -24,12 +24,19 @@ async fn main() -> anyhow::Result<()> {
let pool = adapters_postgres::connect(&config.database_url).await?;
adapters_postgres::run_migrations(&pool).await?;
let nats_client = async_nats::connect(&config.nats_url).await?;
adapters_nats::ensure_stream(&nats_client).await?;
info!(nats_url = %config.nats_url, "NATS connected");
let repos = Repos::new(pool);
let file_storage = Arc::new(adapters_storage::LocalFileStorage::new(
&config.storage_path,
));
let sidecar_writer: Arc<dyn domain::ports::SidecarWriterPort> = Arc::new(LogSidecarWriter);
let event_pub: Arc<dyn domain::ports::EventPublisher> = Arc::new(LogEventPublisher);
let transport = adapters_nats::NatsTransport::new(nats_client);
let event_pub: Arc<dyn domain::ports::EventPublisher> =
Arc::new(event_transport::EventPublisherAdapter::new(transport));
let registry = Arc::new(build_plugin_registry(&repos, file_storage, sidecar_writer));
let process_next = build_process_next_handler(&repos, registry, event_pub);
@@ -49,19 +56,6 @@ async fn main() -> anyhow::Result<()> {
}
}
struct LogEventPublisher;
#[async_trait::async_trait]
impl domain::ports::EventPublisher for LogEventPublisher {
async fn publish(
&self,
event: &domain::events::DomainEvent,
) -> Result<(), domain::errors::DomainError> {
info!(event = ?event, "domain event");
Ok(())
}
}
struct LogSidecarWriter;
#[async_trait::async_trait]