< Summary

Information
Class: OzonOrdersWeb.WebServices.Transactions.Grid.Commit.Steps.CachesAndNotifyStep
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Transactions/Grid/Commit/Steps/CachesAndNotifyStep.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 28
Coverable lines: 28
Total lines: 63
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 16
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
get_Key()100%210%
ExecuteAsync()0%156120%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Transactions/Grid/Commit/Steps/CachesAndNotifyStep.cs

#LineLine coverage
 1using OzonDomains.Models;
 2using OzonOrdersWeb.Areas.Studio2.Controllers.Base;
 3using OzonRepositories.Data;
 4using Services.CacheServices.Cache;
 5using Services.CacheServices.Cache.OzonOrdersCache;
 6using Services.SignalRServices;
 7
 8namespace OzonOrdersWeb.WebServices.Transactions.Grid.Commit.Steps;
 9
 10/// <summary>Обновление кэшей заказов/транзакций и SignalR-уведомление всем о проведённом документе.</summary>
 11public sealed class CachesAndNotifyStep : ITransactionCommitStep
 12{
 13    private readonly CacheUpdater<Order> _cacheUpdater;
 14    private readonly OrderCache _orderCache;
 15    private readonly TransactionCache _transactionCache;
 16    private readonly IOrderChangeNotifier _changeNotifier;
 17
 018    public CachesAndNotifyStep(CacheUpdater<Order> cacheUpdater, OrderCache orderCache, TransactionCache transactionCach
 19    {
 020        _changeNotifier = changeNotifier;
 021        _cacheUpdater = cacheUpdater;
 022        _orderCache = orderCache;
 023        _transactionCache = transactionCache;
 024    }
 25
 026    public string Key => TransactionCommitStepKeys.CachesAndNotify;
 27
 28    public async Task ExecuteAsync(TransactionCommitContext ctx)
 29    {
 30        // TransactOrder сохраняет напрямую (мимо OrderRepository.Update) — без явного уведомления индекс ES
 31        // (по нему фильтруется список заказов по статусу) отстаёт до минутного incremental sync.
 032        var changedIds = ctx.Orders.Select(o => o.Id)
 033            .Concat(ctx.UpdatedOrders.Select(o => o.Id))
 034            .Concat(ctx.OrdersToTransaction.Select(o => o.Id))
 035            .Concat(ctx.DeferredOrderIds)
 036            .Where(id => id > 0)
 037            .Distinct()
 038            .ToList();
 039        if (changedIds.Count > 0)
 40        {
 041            _changeNotifier.NotifyOrdersChanged(changedIds);
 42        }
 43
 044        if (ctx.ChangedCount > 0)
 45        {
 046            await _cacheUpdater.Update(_orderCache);
 47
 048            var statusName = string.Join(", ", ctx.OrdersToTransaction.Select(o => o.AppStatus?.Name).Where(n => !string
 049            if (string.IsNullOrWhiteSpace(statusName))
 50            {
 051                statusName = ctx.TargetStatus?.Name ?? ctx.Definition.Title;
 52            }
 53
 054            var cancelCount = ctx.OrdersToTransaction.Count(o => o.AppStatus?.Name == "Отменен");
 055            var msg = TransactionConfig.BuildStandardSuccessMessage(
 056                ctx.ChangedCount, cancelCount, ctx.TransactionDateTime, ctx.User.Name, ctx.UserComment,
 057                ctx.OrdersToTransaction, statusName, ctx.SummaryBlocks.Count > 0 ? string.Join("<br/>", ctx.SummaryBlock
 058            await NotificationService.NotifyAllAsync(msg);
 59        }
 60
 061        await _transactionCache.Update();
 062    }
 63}