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); }
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")); } }