Files
pepper_bot/PepperBot/Presentation/BotWorker.cs
T
2026-03-10 16:24:21 +03:00

55 lines
1.8 KiB
C#

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<BotWorker> _logger;
public BotWorker(
DealService dealService,
IDealRepository repository,
ISubscriptionRepository subscriptionRepository,
ITelegramNotifier telegramNotifier,
ILogger<BotWorker> 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);
}
}
}