namespace NeonSprawl.Server.Game.PositionState;
/// Registers position authority: PostgreSQL when ConnectionStrings:NeonSprawl is set, otherwise in-memory (NS-15 / NS-17).
public static class PositionStateServiceCollectionExtensions
{
private const string NeonSprawlConnectionStringName = "NeonSprawl";
public static IServiceCollection AddPositionStateStore(this IServiceCollection services, IConfiguration configuration)
{
services.Configure(configuration.GetSection(GamePositionOptions.SectionName));
var cs = configuration.GetConnectionString(NeonSprawlConnectionStringName);
if (!string.IsNullOrWhiteSpace(cs))
{
var trimmed = cs.Trim();
services.AddSingleton(_ => Npgsql.NpgsqlDataSource.Create(trimmed));
services.AddHostedService();
services.AddSingleton();
}
else
{
services.AddSingleton();
}
return services;
}
}