public CreateChannelRequestValidator( IWorkspaceUserRepository workspaceUserRepository, IHttpContextAccessor httpContextAccessor, IImageContentValidator imageContentValidator, IImageExtensionValidator imageExtensionValidator) { _httpContextAccessor = httpContextAccessor; _workspaceUserRepository = workspaceUserRepository; RuleFor(x => x.WorkspaceId) .NotEmpty().WithMessage("Workspase id must not be empty."); RuleFor(x => x.Name.Trim()) .NotEmpty().WithMessage("Channel name must not be empty."); RuleFor(x => x.Users) .NotNull().WithMessage("Users can not be null."); When(x => x.Users != null && x.Users.Count > 0, () => { RuleFor(w => w) .Must(w => w.Users.Select(i => i.UserId).ToHashSet().Count() == w.Users.Count()) .WithMessage("A user cannot be added to the channel twice.") .Must(w => { return(w.Users.FirstOrDefault(i => i.UserId == _httpContextAccessor.HttpContext.GetUserId()) == null); }) .WithMessage("User can not add himself to request users list.") .MustAsync(async(w, _) => await AreUsersInWorkspace(w.Users.Select(u => u.UserId).ToList(), w.WorkspaceId)) .WithMessage("Some users are not available for adding to the channel."); }); When(w => w.Image != null, () => { RuleFor(w => w.Image.Content) .SetValidator(imageContentValidator); RuleFor(w => w.Image.Extension) .SetValidator(imageExtensionValidator); }); }
public CreateWorkspaceRequestValidator( IHttpContextAccessor httpContextAccessor, IRequestClient <ICheckUsersExistence> rcCheckUsersExistence, ILogger <CreateWorkspaceRequestValidator> logger, IImageContentValidator imageContentValidator, IImageExtensionValidator imageExtensionValidator) { _httpContextAccessor = httpContextAccessor; _rcCheckUsersExistence = rcCheckUsersExistence; _logger = logger; RuleFor(workspace => workspace.Name) .NotEmpty().WithMessage("Workspace name cannot be empty."); When(w => w.Image != null, () => { RuleFor(w => w.Image.Content) .SetValidator(imageContentValidator); RuleFor(w => w.Image.Extension) .SetValidator(imageExtensionValidator); }); RuleFor(w => w.Users) .NotNull().WithMessage("Users cannot be null"); When(w => w.Users != null && w.Users.Count > 0, () => { RuleFor(w => w.Users) .Must(u => u.Select(i => i.UserId).ToHashSet().Count() == u.Count()) .WithMessage("A user cannot be added to the workspace twice.") .Must(u => u.FirstOrDefault(i => i.UserId == _httpContextAccessor.HttpContext.GetUserId()) == null) .WithMessage("Creator cannot be added to workspace users request.") .MustAsync(async(u, _) => await CheckUserExistence(u.Select(i => i.UserId).ToList())) .WithMessage("Some users are not available for adding to the workspace."); }); }