< Summary

Information
Class: Services.FeedPriceServices.FeedBatchOrder
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/FeedPriceServices/FeedBatchPicker.cs
Line coverage
100%
Covered lines: 1
Uncovered lines: 0
Coverable lines: 1
Total lines: 45
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
get_Id()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/FeedPriceServices/FeedBatchPicker.cs

#LineLine coverage
 1namespace Services.FeedPriceServices;
 2
 3/// <summary>Заказ пачки: ключи артикула для фида, клиент и склад отгрузки.</summary>
 544public sealed record FeedBatchOrder(int Id, IReadOnlyList<string> Keys, string? Client, string? Warehouse);
 5
 6/// <summary>Итог по заказу пачки: <c>ok</c> (в <see cref="ForOrder"/> выбранная строка или причина её отсутствия), <c>n
 7public sealed class FeedBatchItem
 8{
 9    public const string Ok = "ok";
 10    public const string NoAccess = "noAccess";
 11    public const string Error = "error";
 12
 13    public int Id { get; init; }
 14    public string Status { get; init; } = Ok;
 15    public FeedOrderPick? ForOrder { get; init; }
 16}
 17
 18/// <summary>Раскладывает строки фида пачки по заказам: для каждого — строка его кабинета и склада.</summary>
 19public static class FeedBatchPicker
 20{
 21    public static IReadOnlyList<FeedBatchItem> Build(IReadOnlyCollection<FeedBatchOrder> orders, FeedRowsResult rows)
 22    {
 23        var items = new List<FeedBatchItem>(orders.Count);
 24        foreach (var order in orders)
 25        {
 26            if (order.Keys.Count == 0)
 27            {
 28                items.Add(new FeedBatchItem { Id = order.Id, ForOrder = FeedOrderRowPicker.Pick([], order.Keys, order.Cl
 29                continue;
 30            }
 31
 32            var current = order.Keys.Where(key => rows.Rows.ContainsKey(key)).SelectMany(key => rows.Rows[key]).ToArray(
 33            // Часть ключей не получили ответ и по остальным ничего нет: «нет в фиде» было бы неверным диагнозом.
 34            if (current.Length == 0 && order.Keys.Any(rows.Failed.Contains))
 35            {
 36                items.Add(new FeedBatchItem { Id = order.Id, Status = FeedBatchItem.Error });
 37                continue;
 38            }
 39
 40            items.Add(new FeedBatchItem { Id = order.Id, ForOrder = FeedOrderRowPicker.Pick(current, order.Keys, order.C
 41        }
 42
 43        return items;
 44    }
 45}

Methods/Properties

get_Id()