// 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;
}
}