Exemple #1
0
        public async Task <ProductAttributeItemServiceModel> CreateProductAttributeItemAsync(CreateUpdateProductAttributeItemServiceModel model)
        {
            var existingProductItemAttribute = this.context.ProductAttributeItems.FirstOrDefault(x => x.ProductAttributeItemTranslations.Any(y => y.Name == model.Name) && x.ProductAttributeId == model.ProductAttributeId && x.SellerId == model.OrganisationId && x.IsActive);

            if (existingProductItemAttribute != null)
            {
                throw new CustomException(this.productLocalizer.GetString("ProductAttributeItemConflict"), (int)HttpStatusCode.Conflict);
            }

            var productAttributeItem = new ProductAttributeItem
            {
                ProductAttributeId = model.ProductAttributeId.Value,
                Order    = model.Order,
                SellerId = model.OrganisationId.Value
            };

            this.context.ProductAttributeItems.Add(productAttributeItem.FillCommonProperties());

            var productAttributeItemTranslation = new ProductAttributeItemTranslation
            {
                ProductAttributeItemId = productAttributeItem.Id,
                Name     = model.Name,
                Language = model.Language
            };

            this.context.ProductAttributeItemTranslations.Add(productAttributeItemTranslation.FillCommonProperties());

            await this.context.SaveChangesAsync();

            await this.RebuildCategorySchemasAsync(
                model.OrganisationId.Value,
                model.Language,
                model.Username);

            return(await this.GetProductAttributeItemByIdAsync(new GetProductAttributeItemByIdServiceModel
            {
                Id = productAttributeItem.Id,
                Language = model.Language,
                OrganisationId = model.OrganisationId,
                Username = model.Username
            }));
        }
        public async Task <IActionResult> Save([FromBody] ProductAttributeItemRequestModel request)
        {
            var sellerClaim = this.User.Claims.FirstOrDefault(x => x.Type == AccountConstants.Claims.OrganisationIdClaim);

            var serviceModel = new CreateUpdateProductAttributeItemServiceModel
            {
                Id = request.Id,
                ProductAttributeId = request.ProductAttributeId,
                Name           = request.Name,
                Username       = this.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value,
                OrganisationId = GuidHelper.ParseNullable(sellerClaim?.Value),
                Language       = CultureInfo.CurrentCulture.Name
            };

            if (request.Id.HasValue)
            {
                var validator = new UpdateProductAttributeItemModelValidator();

                var validationResult = await validator.ValidateAsync(serviceModel);

                if (validationResult.IsValid)
                {
                    var productAttributeItem = await this.productAttributesService.UpdateProductAttributeItemAsync(serviceModel);

                    if (productAttributeItem != null)
                    {
                        var response = new ProductAttributeItemResponseModel
                        {
                            Id               = productAttributeItem.Id,
                            Name             = productAttributeItem.Name,
                            Order            = productAttributeItem.Order,
                            LastModifiedDate = productAttributeItem.LastModifiedDate,
                            CreatedDate      = productAttributeItem.CreatedDate
                        };

                        return(this.StatusCode((int)HttpStatusCode.OK, response));
                    }
                }

                throw new CustomException(string.Join(ErrorConstants.ErrorMessagesSeparator, validationResult.Errors.Select(x => x.ErrorMessage)), (int)HttpStatusCode.UnprocessableEntity);
            }
            else
            {
                var validator = new CreateProductAttributeItemModelValidator();

                var validationResult = await validator.ValidateAsync(serviceModel);

                if (validationResult.IsValid)
                {
                    var productAttributeItem = await this.productAttributesService.CreateProductAttributeItemAsync(serviceModel);

                    if (productAttributeItem != null)
                    {
                        var response = new ProductAttributeItemResponseModel
                        {
                            Id               = productAttributeItem.Id,
                            Name             = productAttributeItem.Name,
                            Order            = productAttributeItem.Order,
                            LastModifiedDate = productAttributeItem.LastModifiedDate,
                            CreatedDate      = productAttributeItem.CreatedDate
                        };

                        return(this.StatusCode((int)HttpStatusCode.Created, response));
                    }
                }

                throw new CustomException(string.Join(ErrorConstants.ErrorMessagesSeparator, validationResult.Errors.Select(x => x.ErrorMessage)), (int)HttpStatusCode.UnprocessableEntity);
            }
        }