public override async Task TrackProductStream(TrackProductRequest request, IServerStreamWriter <TrackProductResponse> responseStream, ServerCallContext context)
        {
            while (!context.CancellationToken.IsCancellationRequested)
            {
                var product = await _productLoaderService.LoadProductAsync(request.ProductUrl);

                if (product != null)
                {
                    await responseStream.WriteAsync(
                        new TrackProductResponse
                    {
                        Description = product.Description,
                        Discount    = product.Discount,
                        Id          = (int)product.Id,
                        ImageUrl    = product.ImageUrl,
                        Price       = (float)product.Price,
                        Title       = product.Title,
                        Url         = product.Href,
                        SellStatus  = product.SellStatus,
                        Status      = product.Status,
                    });
                }

                await Task.Delay(TimeSpan.FromSeconds(15));
            }

            if (context.CancellationToken.IsCancellationRequested)
            {
                Console.WriteLine("Stream canceled");
            }
        }
        public ApiResponse <TrackProductResponse> TrackProduct(TrackProductRequest request)
        {
            var response = new ApiResponse <TrackProductResponse>();
            var result   = _productService.TrackProduct(request);

            if (!result.Success)
            {
                response.IsSuccess = false;
                response.ErrorList.Add(new ApiError()
                {
                    ErrorMessage = result.Message
                });
            }

            return(response);
        }
        public override async Task <TrackProductResponse> TrackProduct(TrackProductRequest request, ServerCallContext context)
        {
            try
            {
                var product = await _productLoaderService.LoadProductAsync(request.ProductUrl);

                if (product != null)
                {
                    var savedProduct = await _productsService.AddOrUpdateProductAsync(product);

                    if (savedProduct != null)
                    {
                        var productResponse = new TrackProductResponse
                        {
                            Description = savedProduct.Description,
                            Discount    = savedProduct.Discount,
                            Id          = (int)savedProduct.Id,
                            ImageUrl    = savedProduct.ImageUrl,
                            Price       = (float)savedProduct.Price,
                            Title       = savedProduct.Title,
                            Url         = savedProduct.Href,
                            SellStatus  = savedProduct.SellStatus,
                            Status      = savedProduct.Status,
                            PrevPrice   = (float)(savedProduct.PriceHistory?.OrderByDescending(x => x.LastUpdated).FirstOrDefault()?.Price ?? savedProduct.Price)
                        };

                        productResponse.AdditionalPrices.AddRange(savedProduct.AdditionalPrices.Select(x => new ProductAdditionalPricesResponse
                        {
                            Description   = x.Description,
                            DiscountPrice = (float)x.DiscountPrice,
                            Id            = x.Id,
                            LastUpdatedOn = Timestamp.FromDateTime(x.LastUpdated),
                            ProductId     = x.ProductId,
                            Title         = x.Title
                        }));

                        return(productResponse);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"An error has occurred when trying to add product for price tracking. {ex}");
            }

            return(null);
        }
Ejemplo n.º 4
0
        public Result TrackProduct(TrackProductRequest request)
        {
            var product = _productDal.Get(x => x.Url == request.Url).FirstOrDefault();

            //ürün zaten var,takipçi listesini kontrol et isteği gönderen kullanıcı takipçi listesinde var mı
            if (product != null)
            {
                //isteği gönderen kullanıcı takipçi listesinde var mı
                if (!product.FollowerList.Contains(request.UserId))
                {
                    product.FollowerList.Add(request.UserId);
                    _productDal.UpdateAsync(product.Id, product);

                    return(new SuccessResult("Successfull"));
                }
                else
                {
                    return(new ErrorResult(MessageConstants.UserAlreadyTrackingThisProduct));
                }
            }
            //ürün hiç eklenmemiş takibe başla
            else
            {
                product              = new DtProduct();
                product.CreatedDate  = new DateTime();
                product.CreatedUser  = request.UserId;
                product.CurrentPrice = 0;
                product.FirstPrice   = 0;
                product.FollowerList.Add(request.UserId);
                product.IsTransferred = false;
                product.Url           = request.Url;
                product.WebSite       = request.WebSite;

                _productDal.AddAsync(product);

                return(new SuccessResult("Successfull"));
            }
        }