private async Task CheckPriceAsync(Advert advert, ApplicationContext context) { var grabber = _grabbers.First(x => advert.Url.Contains(x.Url)); var freshAdvert = await grabber.ParseAdvert(advert.Url); if (freshAdvert.LowPrice != default && freshAdvert.LowPrice != advert.LowPrice) { await NotifyUserOfPriceCut(advert, freshAdvert, DateTime.Now); advert.LowPrice = freshAdvert.LowPrice; advert.LastCheckDate = DateTime.Now; context.Attach(advert); context.Entry(advert).State = EntityState.Modified; var priceHistory = new AdvertPriceHistory { AdvertId = advert.Id, Price = advert.LowPrice, ChangeDate = advert.LastCheckDate }; await context.AdvertPriceHistories.AddAsync(priceHistory); await context.SaveChangesAsync(); } }
public override async Task ExecuteAsync(Message msg) { var url = msg.Text.Trim(); if (await _context.Adverts.AnyAsync(x => x.UserId == _chatService.Chats[msg.Chat.Id].Id && x.Url == url)) { await _client.SendTextMessageAsync(msg.Chat.Id, "У вас уже есть данное объявление", replyMarkup : GetDefaultReplyButtons()); } else { var grabber = _grabbers.FirstOrDefault(x => url.Contains(x.Url)) ?? throw new TelegramException("Пожалуйста, введите коректную ссылку", msg.Chat.Id); var advert = await grabber.ParseAdvert(msg.Text); advert.UserId = _chatService.Chats[msg.Chat.Id].Id; advert.IsActual = true; advert.Complete = false; advert.CreateDate = DateTime.Now; advert.LastCheckDate = DateTime.Now; await _context.Adverts.AddAsync(advert); await _context.SaveChangesAsync(); var priceHistory = new AdvertPriceHistory { AdvertId = advert.Id, Price = advert.LowPrice, ChangeDate = advert.LastCheckDate }; await _context.AdvertPriceHistories.AddAsync(priceHistory); await _context.SaveChangesAsync(); var message = $"Название: {advert.Name}\nМинимальная цена: {advert.LowPrice}\nДобавлено: {advert.CreateDate}"; await _client.SendTextMessageAsync(msg.Chat.Id, message, replyMarkup : GetDefaultReplyButtons()); } }