Files
mic-check/src/api/MicCheck.Api/Segments/CreateSegmentRequest.cs
2026-04-08 14:25:10 -07:00

40 lines
1.3 KiB
C#

using FluentValidation;
namespace MicCheck.Api.Segments;
public record CreateSegmentConditionRequest(
string Property,
string Operator,
string Value);
public record CreateSegmentRuleRequest(
string Type,
IReadOnlyList<CreateSegmentConditionRequest> Conditions,
IReadOnlyList<CreateSegmentRuleRequest>? ChildRules = null);
public record CreateSegmentRequest(
string Name,
IReadOnlyList<CreateSegmentRuleRequest> Rules);
public class CreateSegmentRequestValidator : AbstractValidator<CreateSegmentRequest>
{
public CreateSegmentRequestValidator()
{
RuleFor(x => x.Name).NotEmpty().MaximumLength(200);
RuleFor(x => x.Rules).NotNull();
RuleForEach(x => x.Rules).ChildRules(rule =>
{
rule.RuleFor(r => r.Type)
.Must(t => Enum.TryParse<SegmentRuleType>(t, true, out _))
.WithMessage("Rule type must be 'All', 'Any', or 'None'.");
rule.RuleForEach(r => r.Conditions).ChildRules(cond =>
{
cond.RuleFor(c => c.Property).NotEmpty();
cond.RuleFor(c => c.Operator)
.Must(o => Enum.TryParse<SegmentConditionOperator>(o, true, out _))
.WithMessage("Invalid operator.");
});
});
}
}