using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using PepperBot.Application.Interfaces; using PepperBot.Application.Services; namespace PepperBot; public class BotWorker : BackgroundService { private readonly DealService _dealService; private readonly IDealRepository _repository; private readonly ISubscriptionRepository _subscriptionRepository; private readonly ITelegramNotifier _telegramNotifier; private readonly ILogger _logger; public BotWorker( DealService dealService, IDealRepository repository, ISubscriptionRepository subscriptionRepository, ITelegramNotifier telegramNotifier, ILogger logger) { _dealService = dealService; _repository = repository; _subscriptionRepository = subscriptionRepository; _telegramNotifier = telegramNotifier; _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await _repository.InitializeAsync(stoppingToken); await _subscriptionRepository.InitializeAsync(stoppingToken); // Вся работа с Telegram вынесена в TelegramNotifier await _telegramNotifier.StartAsync(stoppingToken); _logger.LogInformation("PepperBot запущен. Опрос скидок каждые 30 секунд."); while (!stoppingToken.IsCancellationRequested) { try { await _dealService.CheckAndNotifyAsync(stoppingToken); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при обработке скидок"); } await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken); } } }