using static LiteCharms.Features.Extensions.Postgres; namespace LiteCharms.Features.HealthChecks; public class PostgresShopHealthCheck(IConfiguration configuration) : IHealthCheck { private readonly string connectionString = configuration.GetConnectionString(ShopDbConfigName)!; 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($"{ShopDbConfigName} is responsive."); } catch (Exception ex) { return HealthCheckResult.Unhealthy($"{ShopDbConfigName} is unreachable.", ex); } } }