public async Task <Item> AddNewItemAsync(Message message) { var url = Regex.Match(message.Text, Common.UrlTemplate).Value; if (string.IsNullOrEmpty(url)) { throw new Exception(NEED_INLINE_LINK_EXCEPTION); } if (await _trackingRepository.IsTrackedAsync(url, message.From.Id)) { throw new Exception(Exceptions.ALREADY_TRACKED_EXCEPTION); } var shopName = _shopDefiner.GetShopName(url); var newInfo = shopName switch { PullAndBear.SHOP_NAME => await _pullAndBearClient.GetItemInfoAsync(url), Bershka.SHOP_NAME => await _bershkaClient.GetItemInfoAsync(url), _ => throw new Exception(Exceptions.UNKNOWN_SHOP_EXCEPTION), }; var newItem = _mapper.Map <ItemOnline, Item>(newInfo); newItem.Url = url; newItem.StartTrackingDate = DateTime.Now; newItem.LastUpdateDate = newItem.StartTrackingDate; newItem.Source = shopName; newItem.ChatId = message.Chat.Id; newItem.UserId = message.From.Id; var itemId = await _trackingRepository.AddNewItemAsync(newItem); newItem.ItemId = itemId; _timerService.Enqueue(newItem); return(newItem); }