using MaksIT.Results; namespace MaksIT.HAMode.Abstractions; internal static class LeaseInputValidation { internal static Result? ValidateAcquireInputs(string leaseName, string holderId, TimeSpan ttl) { if (string.IsNullOrWhiteSpace(leaseName)) return Result.BadRequest(false, "leaseName is required."); if (string.IsNullOrWhiteSpace(holderId)) return Result.BadRequest(false, "holderId is required."); if (ttl <= TimeSpan.Zero) return Result.BadRequest(false, "ttl must be positive."); return null; } internal static Result? ValidateReleaseInputs(string leaseName, string holderId) { if (string.IsNullOrWhiteSpace(leaseName)) return Result.BadRequest("leaseName is required."); if (string.IsNullOrWhiteSpace(holderId)) return Result.BadRequest("holderId is required."); return null; } internal static Result? ValidatePostgreSqlProvider( IRuntimeLeaseConnectionStringProvider connectionStringProvider, bool hasSharedDataSource ) { if (!hasSharedDataSource && string.IsNullOrWhiteSpace(connectionStringProvider.ConnectionString)) return Result.BadRequest(false, "connection string is required."); if (string.IsNullOrWhiteSpace(connectionStringProvider.Schema)) return Result.BadRequest(false, "schema is required."); if (string.IsNullOrWhiteSpace(connectionStringProvider.Table)) return Result.BadRequest(false, "table is required."); return null; } internal static Result? ValidatePostgreSqlProviderForRelease( IRuntimeLeaseConnectionStringProvider connectionStringProvider, bool hasSharedDataSource ) { if (!hasSharedDataSource && string.IsNullOrWhiteSpace(connectionStringProvider.ConnectionString)) return Result.BadRequest("connection string is required."); if (string.IsNullOrWhiteSpace(connectionStringProvider.Schema)) return Result.BadRequest("schema is required."); if (string.IsNullOrWhiteSpace(connectionStringProvider.Table)) return Result.BadRequest("table is required."); return null; } internal static Result? ValidateRedisProvider( IRuntimeLeaseRedisConnectionProvider connectionProvider, bool hasSharedMultiplexer ) { if (!hasSharedMultiplexer && string.IsNullOrWhiteSpace(connectionProvider.Configuration)) return Result.BadRequest(false, "redis configuration is required."); if (string.IsNullOrWhiteSpace(connectionProvider.KeyPrefix)) return Result.BadRequest(false, "redis key prefix is required."); return null; } internal static Result? ValidateRedisProviderForRelease( IRuntimeLeaseRedisConnectionProvider connectionProvider, bool hasSharedMultiplexer ) { if (!hasSharedMultiplexer && string.IsNullOrWhiteSpace(connectionProvider.Configuration)) return Result.BadRequest("redis configuration is required."); if (string.IsNullOrWhiteSpace(connectionProvider.KeyPrefix)) return Result.BadRequest("redis key prefix is required."); return null; } internal static Result? ValidateEtcdProvider( IRuntimeLeaseEtcdConnectionProvider connectionProvider, bool hasSharedClient ) { if (!hasSharedClient && string.IsNullOrWhiteSpace(connectionProvider.Endpoints)) return Result.BadRequest(false, "etcd endpoints are required."); if (string.IsNullOrWhiteSpace(connectionProvider.KeyPrefix)) return Result.BadRequest(false, "etcd key prefix is required."); return null; } internal static Result? ValidateEtcdProviderForRelease( IRuntimeLeaseEtcdConnectionProvider connectionProvider, bool hasSharedClient ) { if (!hasSharedClient && string.IsNullOrWhiteSpace(connectionProvider.Endpoints)) return Result.BadRequest("etcd endpoints are required."); if (string.IsNullOrWhiteSpace(connectionProvider.KeyPrefix)) return Result.BadRequest("etcd key prefix is required."); return null; } }