Files
git.stella-ops.org/src/Signals/StellaOps.Signals/Options/SignalsGateMultiplierOptions.cs
2026-02-01 21:37:40 +02:00

49 lines
1.6 KiB
C#

using StellaOps.Signals.Models;
using System;
namespace StellaOps.Signals.Options;
/// <summary>
/// Gate multiplier configuration in basis points (10000 = 100%).
/// </summary>
public sealed class SignalsGateMultiplierOptions
{
public int AuthRequiredMultiplierBps { get; set; } = 3000;
public int FeatureFlagMultiplierBps { get; set; } = 2000;
public int AdminOnlyMultiplierBps { get; set; } = 1500;
public int NonDefaultConfigMultiplierBps { get; set; } = 5000;
public int MinimumMultiplierBps { get; set; } = 500;
public int GetMultiplierBps(CallgraphGateType gateType) => gateType switch
{
CallgraphGateType.AuthRequired => AuthRequiredMultiplierBps,
CallgraphGateType.FeatureFlag => FeatureFlagMultiplierBps,
CallgraphGateType.AdminOnly => AdminOnlyMultiplierBps,
CallgraphGateType.NonDefaultConfig => NonDefaultConfigMultiplierBps,
_ => 10000
};
public void Validate()
{
EnsureBps(nameof(AuthRequiredMultiplierBps), AuthRequiredMultiplierBps);
EnsureBps(nameof(FeatureFlagMultiplierBps), FeatureFlagMultiplierBps);
EnsureBps(nameof(AdminOnlyMultiplierBps), AdminOnlyMultiplierBps);
EnsureBps(nameof(NonDefaultConfigMultiplierBps), NonDefaultConfigMultiplierBps);
EnsureBps(nameof(MinimumMultiplierBps), MinimumMultiplierBps);
}
private static void EnsureBps(string name, int value)
{
if (value < 0 || value > 10000)
{
throw new ArgumentOutOfRangeException(name, value, "Value must be between 0 and 10000.");
}
}
}