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