// Copyright (c) StellaOps. Licensed under the BUSL-1.1. using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Npgsql; using StellaOps.Infrastructure.Postgres.Connections; using StellaOps.Infrastructure.Postgres.Options; namespace StellaOps.Eventing.Postgres; /// /// PostgreSQL data source for the Eventing module. /// Manages connections for timeline event storage and outbox processing. /// public sealed class EventingDataSource : DataSourceBase { /// /// Default schema name for Eventing tables. /// public const string DefaultSchemaName = "timeline"; /// /// Creates a new Eventing data source. /// public EventingDataSource(IOptions options, ILogger logger) : base(CreateOptions(options.Value), logger) { } /// protected override string ModuleName => "Eventing"; /// protected override void ConfigureDataSourceBuilder(NpgsqlDataSourceBuilder builder) { base.ConfigureDataSourceBuilder(builder); // No custom enum mappings required for the Eventing module. } private static PostgresOptions CreateOptions(PostgresOptions baseOptions) { if (string.IsNullOrWhiteSpace(baseOptions.SchemaName)) { baseOptions.SchemaName = DefaultSchemaName; } return baseOptions; } }