using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Health; public sealed class PostgresHealthCheck(IConfiguration configuration) : IHealthCheck { private readonly string connectionString = configuration.GetConnectionString(DatabaseConfigName)!; public async Task CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) { try { await using var dataSource = NpgsqlDataSource.Create(connectionString); await using var connection = await dataSource.OpenConnectionAsync(cancellationToken); await using var command = connection.CreateCommand(); command.CommandText = "SELECT 1"; await command.ExecuteScalarAsync(cancellationToken); return HealthCheckResult.Healthy($"{DatabaseConfigName} is responsive."); } catch (Exception ex) { return HealthCheckResult.Unhealthy($"{DatabaseConfigName} is unreachable.", ex); } } }