示例#1
0
        public async Task <ActionResult> GetStoreAsync()
        {
            try
            {
                await _topicBus.SendAsync(TopicType.Log.ToString(), "Calling Get Store..");

                var store = await _storeService.CheckStoreStatus();

                if (store != null)
                {
                    return(Ok(store));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception ex)
            {
                await _topicBus.SendAsync(TopicType.Log.ToString(), ex.ToString());

                return(BadRequest(ex));
            }
            finally
            {
                await _topicBus.SendAsync(TopicType.Log.ToString(), "Returning Get Store..");
            }
        }
示例#2
0
        public async Task <ActionResult> GetProductAsync([FromQuery] ProductRequest productRequest)
        {
            try
            {
                await _topicBus.SendAsync(TopicType.Log.ToString(), "Calling Get Products..");

                var products = await _productService.GetProductsAsync(productRequest);

                if (products != null)
                {
                    return(Ok(_mapper.Map <IEnumerable <ProductResponse> >(products)));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception ex)
            {
                await _topicBus.SendAsync(TopicType.Log.ToString(), ex.ToString());

                return(BadRequest(ex));
            }
            finally
            {
                await _topicBus.SendAsync(TopicType.Log.ToString(), "Returning Get Products..");
            }
        }
        public async Task <ActionResult> GetAreasAsync()
        {
            try
            {
                await _topicBus.SendAsync(TopicType.Log.ToString(), "Calling Get Areas..");

                var response = await _areaService.GetAreaAsync();

                if (response != null)
                {
                    return(Ok(_mapper.Map <AreasResponse>(response)));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception ex)
            {
                await _topicBus.SendAsync(TopicType.Log.ToString(), ex.ToString());

                return(BadRequest(ex));
            }
            finally
            {
                await _topicBus.SendAsync(TopicType.Log.ToString(), "Returning Get Areas..");
            }
        }
示例#4
0
        private Task HandleProduct(Message message, CancellationToken arg2)
        {
            var logs = new List <string>
            {
                $"message Label: {message.Label}",
                $"message CorrelationId: {message.CorrelationId}"
            };

            var json    = Encoding.UTF8.GetString(message.Body);
            var product = JsonConvert.DeserializeObject <ProductToGet>(json);

            _product.Upsert(product);

            logs.Add($"Message Received");

            _topicBus.SendAsync(_option.ServiceBus.TopicLog, logs);
            return(Task.CompletedTask);
        }
示例#5
0
        public async Task <Ready> CheckStoreStatus()
        {
            var products = await _productService.GetProductsAsync(new ProductRequest()
            {
                StoreName = "Los Angeles - Pasadena"
            });

            var area = await _areaService.GetAreaAsync();

            if ((products != null && products.Count() > 0) && area != null)
            {
                var storeId = products.FirstOrDefault().StoreId;

                await _topicBus.SendAsync(TopicType.StoreCatalogReady.GetDescription(), $"Store: {storeId}. Status: {true}");

                return(new Ready()
                {
                    IsReady = true,
                    StoreId = storeId
                });
            }

            return(null);
        }
示例#6
0
        public async Task <IEnumerable <ProductToGet> > GetProductsAsync(ProductRequest productRequest)
        {
            var cacheOptions = new MemoryCacheEntryOptions()
            {
                AbsoluteExpiration = DateTime.Now.AddHours(6)
            };

            if (!_memoryCache.TryGetValue(_cacheName, out Dictionary <Guid, ProductToGet> products))
            {
                using (var httpClient = _httpClientFactory.CreateClient("Products"))
                {
                    var response = await httpClient.GetAsync($"api/products?storeName={productRequest.StoreName}");

                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        var productsToGet = await response.Content.ReadAsJsonAsync <IEnumerable <ProductToGet> >();

                        products = productsToGet.ToDictionary(p => p.ProductId, p => p);
                    }

                    if (null != products && products.Count > 0)
                    {
                        _memoryCache.Set(_cacheName, products, cacheOptions);
                    }
                }
            }

            if (productRequest.Restrictions?.Count > 0)
            {
                using (var httpClient = _httpClientFactory.CreateClient("Ingredients"))
                {
                    var storeId = products.Values.FirstOrDefault().StoreId;

                    var restrictionsParameters = string.Empty;

                    foreach (var restriction in productRequest.Restrictions)
                    {
                        restrictionsParameters += $"&Restrictions={restriction}";
                    }

                    var response = await httpClient.GetAsync($"api/products/byrestrictions/?StoreId=${storeId}{restrictionsParameters}");

                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        var productsRestriction = await response.Content.ReadAsJsonAsync <IEnumerable <ProductRestrictionResponse> >();

                        foreach (var product in productsRestriction)
                        {
                            var p = products[product.ProductId];

                            p.Items = product.Ingredients.Select(i => new ItemToGet()
                            {
                                Name = i
                            }).ToList();

                            products[product.ProductId] = p;
                        }

                        _memoryCache.Set(_cacheName, products, cacheOptions);

                        var productsId = productsRestriction.Select(p => p.ProductId);

                        await _topicBus.SendAsync(TopicType.UserWithLessOffer.GetDescription(), "Products with restriction find!");

                        return(products.Where(p => productsId.Contains(p.Key)).Select(v => v.Value));
                    }
                }
            }

            return(products.Values);
        }