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