using FluentValidation; using MealPlan.Api.DTOs.Recipe; namespace MealPlan.Api.Validators; public class CreateRecipeValidator : AbstractValidator { public CreateRecipeValidator() { RuleFor(x => x.Name).NotEmpty().MaximumLength(255); RuleFor(x => x.MealCategory).InclusiveBetween(0, 3); RuleFor(x => x.Calories).GreaterThanOrEqualTo(0).When(x => x.Calories.HasValue); RuleFor(x => x.PrepTimeMinutes).GreaterThanOrEqualTo(0).When(x => x.PrepTimeMinutes.HasValue); RuleForEach(x => x.Ingredients).SetValidator(new CreateIngredientValidator()); RuleForEach(x => x.Steps).SetValidator(new CreateRecipeStepValidator()); } } public class CreateIngredientValidator : AbstractValidator { public CreateIngredientValidator() { RuleFor(x => x.Name).NotEmpty().MaximumLength(255); RuleFor(x => x.Unit).MaximumLength(50).When(x => x.Unit != null); RuleFor(x => x.AmountGrams).GreaterThanOrEqualTo(0).When(x => x.AmountGrams.HasValue); } } public class CreateRecipeStepValidator : AbstractValidator { public CreateRecipeStepValidator() { RuleFor(x => x.StepNumber).GreaterThan(0); RuleFor(x => x.Description).NotEmpty(); } }