public static ProductIdentityQueryDTO From(Product product) { var specs = product.OwnProductSpecs.Select(x => ProductSpecificationDTO.From(x)).ToList(); return(new ProductIdentityQueryDTO { Id = product.Id, Name = product.Name, Icon = product.Icon, CategoryId = product.CategoryId, Description = product.Description, Creator = product.Creator, Modifier = product.Modifier, CreatedTime = product.CreatedTime, ModifiedTime = product.ModifiedTime, OrganizationId = product.OrganizationId, Brand = product.Brand, Unit = product.Unit, Specifications = specs, MinPrice = product.MinPrice, MaxPrice = product.MaxPrice, MinPartnerPrice = product.MinPartnerPrice, MaxPartnerPrice = product.MaxPartnerPrice, MinPurchasePrice = product.MinPurchasePrice, MaxPurchasePrice = product.MaxPurchasePrice }); }
public IEnumerable <string> Resolve(Usr_Pratri source, ProductSpecificationDTO destination, IEnumerable <string> member, ResolutionContext context) { if (source.Usr_Pratri_Valor.IndexOf(";") == -1) { return(new List <string> { source.Usr_Pratri_Valor }); } return(source.Usr_Pratri_Valor.Split(';').Select(p => p.Trim()).ToList()); }
public async Task <VTEXNewIDResponse> PostSKUSpecificationWithNewIDAsync(TResource data, int Id, CancellationToken cancellationToken) { var contentString = JsonSerializer.Serialize(data); var request = new HttpRequestMessage(HttpMethod.Post, $"{_path}/{Id}/specification") { Content = new StringContent(contentString, Encoding.UTF8, "application/json") }; request.Headers.Add("X-VTEX-API-AppKey", _appKey); request.Headers.Add("X-VTEX-API-AppToken", _appToken); request.Headers.Add("Accept", "application/json"); var response = await _httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { try { var content = await JsonSerializer.DeserializeAsync <VTEXErrorResponse>(await response.Content.ReadAsStreamAsync()); _logger.Error($"No se pudo dar de alta el recurso {contentString} en la ruta `{_path}`, el statuscode fue `{response.StatusCode}` y el mensaje de VTEX:`{content.Message}`"); } catch { _logger.Error($"No se pudo dar de alta el recurso {contentString} en la ruta `{_path}`, el statuscode fue `{response.StatusCode}`"); } } else { ProductSpecificationDTO responseContent = await JsonSerializer.DeserializeAsync <ProductSpecificationDTO>(await response.Content.ReadAsStreamAsync()); _logger.Information($"Recurso {contentString} dado de alta en la ruta {_path} exitosamente y se le dió el id {responseContent.Id}"); return(new VTEXNewIDResponse() { Success = response.IsSuccessStatusCode, NewId = responseContent.Id }); } return(new VTEXNewIDResponse() { Success = response.IsSuccessStatusCode, NewId = 0 }); }
public void Save(ProductDTO productDTO, ProductSpecificationDTO productSpecificationDTO) { if (string.IsNullOrWhiteSpace(productDTO.Id)) { productDTO.Id = NewId.Next().ToString(); var productImages = new List <Image>(); if (productDTO.Images != null && productDTO.Images.Count > 0) { foreach (var image in productDTO.Images) { productImages.Add(new Image { ProductId = productDTO.Id, Path = image }); } } var metaTitle = productDTO.Name.GenerateSlug(); if (_context.Products.Any(p => p.MetaTitle == metaTitle)) { metaTitle += "-" + NewId.Next().ToString().Split('-').Last(); } productDTO.MetaTitle = metaTitle; productDTO.DateAdded = DateTime.Now; var product = _mapper.Map <ProductDTO, Product>(productDTO); productSpecificationDTO.ProductId = productDTO.Id; var productSepcification = _mapper.Map <ProductSpecificationDTO, ProductSpecification>(productSpecificationDTO); _context.Products.Add(product); _context.Images.AddRange(productImages); _context.ProductSpecifications.Add(productSepcification); } else { var product = _context.Products.First(p => p.Id == productDTO.Id); var dbEntryImages = GetImages(productDTO.Id); var newImages = productDTO.Images.ToList(); // Update metatitle if (product.Name != productDTO.Name) { var metaTitle = productDTO.Name.GenerateSlug(); if (_context.Products.Any(p => (p.MetaTitle != product.MetaTitle) && (p.MetaTitle == metaTitle))) { metaTitle += "-" + NewId.Next().ToString().Split('-').Last(); } productDTO.MetaTitle = metaTitle; } // Remove image foreach (var path in dbEntryImages) { if (!newImages.Any(i => i == path)) { var image = _context.Images.First(i => i.ProductId == productDTO.Id && i.Path == path); _context.Images.Remove(image); continue; } } // Add image foreach (var newImg in newImages) { if (!dbEntryImages.Any(path => path == newImg)) { var image = new Image { ProductId = product.Id, Path = newImg }; _context.Images.Add(image); } } // Update specification var productSpecification = _context.ProductSpecifications.First(ps => ps.ProductId == product.Id); productSpecification = _mapper.Map(productSpecificationDTO, productSpecification); product = _mapper.Map(productDTO, product); product.DateModified = DateTime.Now; } _context.SaveChanges(); }