Files
imprink/src/Imprink.Application/Validation/ProductVariants/UpdateProductVariantCommandValidator.cs
2025-06-21 20:53:49 +03:00

45 lines
1.6 KiB
C#

using FluentValidation;
using Imprink.Application.Commands.ProductVariants;
namespace Imprink.Application.Validation.ProductVariants;
public class UpdateProductVariantCommandValidator : AbstractValidator<UpdateProductVariantCommand>
{
public UpdateProductVariantCommandValidator()
{
RuleFor(x => x.Id)
.NotEmpty().WithMessage("Id is required.")
.NotEqual(Guid.Empty).WithMessage("Id must be a valid GUID.");
RuleFor(x => x.ProductId)
.NotEmpty().WithMessage("ProductId is required.")
.NotEqual(Guid.Empty).WithMessage("ProductId must be a valid GUID.");
RuleFor(x => x.Size)
.NotEmpty().WithMessage("Size is required.")
.Length(1, 50).WithMessage("Size must be between 1 and 50 characters.");
RuleFor(x => x.Color)
.Length(1, 50).WithMessage("Color must be between 1 and 50 characters.")
.When(x => !string.IsNullOrWhiteSpace(x.Color));
RuleFor(x => x.Price)
.GreaterThan(0).WithMessage("Price must be greater than 0.");
RuleFor(x => x.ImageUrl)
.Must(BeValidUrl).When(x => !string.IsNullOrWhiteSpace(x.ImageUrl))
.WithMessage("ImageUrl must be a valid URL.");
RuleFor(x => x.Sku)
.NotEmpty().WithMessage("SKU is required.")
.Length(1, 50).WithMessage("SKU must be between 1 and 50 characters.");
RuleFor(x => x.StockQuantity)
.GreaterThanOrEqualTo(0).WithMessage("StockQuantity cannot be negative.");
}
private static bool BeValidUrl(string? url)
{
return Uri.TryCreate(url, UriKind.Absolute, out _);
}
}