< Summary

Information
Class: Services.SupplierStatusServices.SupplierOrderStatusSyncJob
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/SupplierStatusServices/SupplierOrderStatusSyncJob.cs
Line coverage
100%
Covered lines: 11
Uncovered lines: 0
Coverable lines: 11
Total lines: 39
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ExecuteAsync()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/SupplierStatusServices/SupplierOrderStatusSyncJob.cs

#LineLine coverage
 1using Hangfire;
 2using Microsoft.Extensions.Logging;
 3using Services.HangfireService;
 4
 5namespace Services.SupplierStatusServices;
 6
 7/// <summary>
 8/// Периодически подтягивает статусы заказов и корзин у API-поставщиков.
 9/// Push-уведомлений поставщики не присылают, поэтому только опрос.
 10/// </summary>
 11public sealed class SupplierOrderStatusSyncJob
 12{
 13    public const string JobId = "supplier-order-status-sync";
 14    public const string DefaultCron = "*/20 * * * *";
 15    public const string QueueName = HangfireQueueNames.OrderStatusSync;
 16
 17    private readonly IOrderSupplierStatusSyncService _service;
 18    private readonly ILogger<SupplierOrderStatusSyncJob> _logger;
 19
 120    public SupplierOrderStatusSyncJob(
 121        IOrderSupplierStatusSyncService service,
 122        ILogger<SupplierOrderStatusSyncJob> logger)
 23    {
 124        _service = service;
 125        _logger = logger;
 126    }
 27
 28    // Hangfire-хранилище общее на двух прод-инстансах: без этого атрибута ручной запуск
 29    // и очередной cron-тик могут пойти одновременно на разных серверах и удвоить запросы к API.
 30    [Queue(QueueName)]
 31    [DisableConcurrentExecution(timeoutInSeconds: 0)]
 32    public async Task<string> ExecuteAsync()
 33    {
 134        var changed = await _service.SyncAsync();
 135        var result = $"Обновлено статусов поставщиков: {changed}";
 136        _logger.LogInformation("{JobId}: {Result}", JobId, result);
 137        return result;
 138    }
 39}