using FluentValidation; using MealPlan.Api.DTOs.Diet; namespace MealPlan.Api.Validators; public class UserDailyGoalsValidator : AbstractValidator { public UserDailyGoalsValidator() { RuleFor(x => x.CalorieGoal).GreaterThanOrEqualTo(0).When(x => x.CalorieGoal.HasValue); RuleFor(x => x.ProteinGoalG).GreaterThanOrEqualTo(0).When(x => x.ProteinGoalG.HasValue); RuleFor(x => x.FatGoalG).GreaterThanOrEqualTo(0).When(x => x.FatGoalG.HasValue); RuleFor(x => x.CarbsGoalG).GreaterThanOrEqualTo(0).When(x => x.CarbsGoalG.HasValue); RuleFor(x => x.WaterGoalMl).GreaterThan(0).When(x => x.WaterGoalMl.HasValue); } } public class LogMealValidator : AbstractValidator { public LogMealValidator() { RuleFor(x => x.MealCategory).InclusiveBetween(0, 4); RuleFor(x => x.Portions).GreaterThan(0); RuleFor(x => x.Name).MaximumLength(255).When(x => x.Name != null); RuleFor(x => x) .Must(x => x.RecipeId.HasValue || (x.CatalogItemId.HasValue && x.Grams is > 0) || !string.IsNullOrWhiteSpace(x.Name)) .WithMessage("Provide recipeId, catalogItemId with grams, or name."); RuleFor(x => x.Grams).GreaterThan(0).When(x => x.CatalogItemId.HasValue); RuleFor(x => x.Calories).GreaterThanOrEqualTo(0).When(x => x.Calories.HasValue); } } public class LogDrinkValidator : AbstractValidator { public LogDrinkValidator() { RuleFor(x => x.VolumeMl).GreaterThan(0); RuleFor(x => x.Name).MaximumLength(255).When(x => x.Name != null); RuleFor(x => x) .Must(x => x.DrinkCatalogId.HasValue || !string.IsNullOrWhiteSpace(x.Name)) .WithMessage("Provide either drinkCatalogId or name."); RuleFor(x => x.Calories).GreaterThanOrEqualTo(0).When(x => x.Calories.HasValue); } } public class CreateDietReminderValidator : AbstractValidator { public CreateDietReminderValidator() { RuleFor(x => x.ReminderType).InclusiveBetween(0, 3); RuleFor(x => x.Title).NotEmpty().MaximumLength(120); RuleFor(x => x.Message).MaximumLength(500).When(x => x.Message != null); RuleFor(x => x.DaysOfWeekMask).InclusiveBetween(1, 127); RuleFor(x => x.MealCategory).InclusiveBetween(0, 4).When(x => x.MealCategory.HasValue); } } public class UpdateDietReminderValidator : AbstractValidator { public UpdateDietReminderValidator() { Include(new CreateDietReminderValidator()); } }