public async Task UpdateProduct(int hostId, HostProduct hostProduct) { var db = _redisCache.GetDatabase(RedisDatabases.CacheData); await db.HashSetAsync("Host_" + hostId.ToString() + "_Products", hostProduct.Id.ToString(), Newtonsoft.Json.JsonConvert.SerializeObject(hostProduct)); }
public async Task <string> UpdateProducts([FromBody] ProductLog logData) { try { var fiProducts = logData.ProductData.OrderByDescending(c => c.ProductId).Take(20); var host = await _hostCache.GetHostByIdAsync(logData.HostId).ConfigureAwait(false); if (host == null || host.Id == 0) { return(CommonStrings.NoHost); } #region SecurityCheck if (_configurations.SecurityCheck) { var origin = Request.Headers[CommonStrings.Origin].ToString(); if (!string.IsNullOrEmpty(origin)) { var aut = new Uri(origin).Host; aut = aut.ToLower(); var topdomain = string.Empty; if (aut.IndexOf(CommonStrings.Dot) == aut.LastIndexOf(CommonStrings.Dot)) { topdomain = aut; } else { topdomain = aut.Substring(aut.IndexOf(CommonStrings.Dot) + 1); } if (host.Host != topdomain) { return(CommonStrings.NoHostAccess); } } } #endregion if (logData != null && (await _crowlerCache.IsCrowler(logData.UserId))) { return(string.Empty); } List <Task> tasks = new List <Task> { _totalVisitUpdater.UpdateTotalVisit(logData.HostId) }; await _hostScriptChecker.UpdateProductValidation(logData.HostId); var categoriesforlog = logData.ProductData.Where(c => !string.IsNullOrEmpty(c.Category)).GroupBy(c => c.Category).Select(v => new KeyValuePair <string, int>(v.Key, v.Count())); foreach (var category in categoriesforlog) { tasks.Add(_categoryLogger.LogCategory(host.Id, category.Key, category.Value)); } foreach (var item in fiProducts) { var updateedProduct = new HostProduct() { Description = item.Description, ImageAddress = item.ImageAddress, IsAvailable = item.Available, Price = item.Price, Url = item.PageAddress, Id = item.ProductId, ProductName = item.Name, CategoryName = item.Category, UpdateDate = DateTime.Now }; tasks.Add(_productCache.UpdateProduct(logData.HostId, updateedProduct)); } #region Log Into Kafka foreach (var item in logData.ProductData) { await _kafkaLogger.SendMessage(new DruidData() { CategoryName = item.Category, Date = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:sszzz"), HostName = host.Host, ImageAddress = item.ImageAddress, Price = item.Price, ProductName = item.Name, PageAddress = item.PageAddress, ProductId = item.ProductId, StatType = StatTypes.ProductView, UserId = logData.UserId.ToString(), HostId = logData.HostId.ToString(), }); } #endregion await Task.WhenAll(tasks).ConfigureAwait(false); } catch (Exception ex) { await _errorLogger.LogError("Operation:ProductUpdate =>" + ex.Message); } return(string.Empty); }