示例#1
0
        public ValidationResult ValidateThatBrandProductsCanBeAssigned(AssignBrandProductsData data)
        {
            var validator = new AssignBrandProductValidator(_repository,
                                                            _queries.GetAllowedProductsByBrand(data.BrandId));

            return(validator.Validate(data));
        }
示例#2
0
        public IHttpActionResult Assign(AssignBrandProductModel model)
        {
            var data = new AssignBrandProductsData
            {
                BrandId     = model.Brand,
                ProductsIds = model.Products.Select(Guid.Parse).ToArray()
            };

            var validationResult = _brandCommands.ValidateThatBrandProductsCanBeAssigned(data);

            if (!validationResult.IsValid)
            {
                return(Ok(ValidationExceptionResponse(validationResult.Errors)));
            }

            _brandCommands.AssignBrandProducts(data);
            return(Ok(new { result = "success" }));
        }
示例#3
0
        public void AssignBrandProducts(AssignBrandProductsData assignBrandProductsData)
        {
            using (var scope = CustomTransactionScope.GetTransactionScope())
            {
                var validator = new AssignBrandProductValidator(_repository,
                                                                _queries.GetAllowedProductsByBrand(assignBrandProductsData.BrandId));

                var validationResult = validator.Validate(assignBrandProductsData);

                if (!validationResult.IsValid)
                {
                    throw new RegoValidationException(validationResult);
                }

                var brand = _repository.Brands
                            .Include(x => x.Products)
                            .Single(x => x.Id == assignBrandProductsData.BrandId);

                brand.Products.Clear();

                foreach (var product in assignBrandProductsData.ProductsIds)
                {
                    brand.Products.Add(new BrandProduct
                    {
                        Brand     = brand,
                        ProductId = product
                    });
                }

                brand.DateUpdated = DateTimeOffset.Now.ToBrandOffset(brand.TimezoneId);
                brand.UpdatedBy   = _actorInfoProvider.Actor.UserName;

                _eventBus.Publish(new BrandProductsAssigned
                {
                    BrandId      = brand.Id,
                    ProductsIds  = assignBrandProductsData.ProductsIds,
                    EventCreated = DateTimeOffset.Now.ToBrandOffset(brand.TimezoneId),
                });

                _repository.SaveChanges();
                scope.Complete();
            }
        }