< Summary

Information
Class: Services.StockSyncServices.WarehouseStockSyncJob
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/StockSyncServices/WarehouseStockSyncJob.cs
Line coverage
91%
Covered lines: 22
Uncovered lines: 2
Coverable lines: 24
Total lines: 56
Line coverage: 91.6%
Branch coverage
60%
Covered branches: 6
Total branches: 10
Branch coverage: 60%
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()60%101088.88%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/StockSyncServices/WarehouseStockSyncJob.cs

#LineLine coverage
 1using Hangfire;
 2using Microsoft.Extensions.Logging;
 3using OzonDomains.Models;
 4using Services.HangfireService;
 5
 6namespace Services.StockSyncServices;
 7
 8public class WarehouseStockSyncJob
 9{
 10    public const string JobId = "warehouse-stock-sync";
 11    public const string QueueName = HangfireQueueNames.Main;
 12
 13    private readonly IWarehouseStockSyncService _syncService;
 14    private readonly ILogger<WarehouseStockSyncJob> _logger;
 15
 216    public WarehouseStockSyncJob(
 217        IWarehouseStockSyncService syncService,
 218        ILogger<WarehouseStockSyncJob> logger)
 19    {
 220        _syncService = syncService;
 221        _logger = logger;
 222    }
 23
 24    [Queue(QueueName)]
 25    [DisableConcurrentExecution(timeoutInSeconds: 0)]
 26    [AutomaticRetry(Attempts = 0)]
 27    public async Task ExecuteAsync(string? triggeredBy = null)
 28    {
 29        try
 30        {
 231            var run = await _syncService.SyncFromGoogleSheetAsync(
 232                string.IsNullOrWhiteSpace(triggeredBy) ? "ManualTrigger" : triggeredBy);
 33
 34            // Если синхронизация прошла успешно — сразу запускаем все пресеты
 135            if (run?.Status == WarehouseStockSyncRunStatus.Success)
 36            {
 037                BackgroundJob.Enqueue<RunAllPresetsJob>(
 038                    job => job.ExecuteAsync(CancellationToken.None));
 39            }
 140            else if (run?.Status == WarehouseStockSyncRunStatus.Failed)
 41            {
 142                _logger.LogWarning(
 143                    "WarehouseStockSyncJob: синхронизация остатков (run {RunId}) завершилась со статусом Failed: {Error}
 144                    run.Id,
 145                    run.ErrorMessage);
 46            }
 147        }
 148        catch (Exception ex) when (WarehouseStockSyncService.IsTransientGoogleException(ex))
 49        {
 150            _logger.LogWarning(
 151                ex,
 152                "WarehouseStockSyncJob: запуск пропущен из-за временной недоступности Google Sheets: {Error}",
 153                ex.Message);
 154        }
 255    }
 56}