< Summary

Information
Class: Services.SupplierStatusServices.Providers.JapartsSupplierStatusProvider
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/SupplierStatusServices/Providers/JapartsSupplierStatusProvider.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 28
Coverable lines: 28
Total lines: 53
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
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_ProviderKey()100%210%
FetchCartAsync()100%210%
FetchOrderAsync()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/SupplierStatusServices/Providers/JapartsSupplierStatusProvider.cs

#LineLine coverage
 1using OzonDomains.Models;
 2using OzonDomains.Models.SupplierStatuses;
 3using Services.ApiServices.JapartsApi;
 4
 5namespace Services.SupplierStatusServices.Providers;
 6
 7/// <summary>Статусы Japarts: серверная корзина и заказ сопоставляются по комментарию Studio2.</summary>
 08public sealed class JapartsSupplierStatusProvider(JapartsDataManager japarts) : ISupplierStatusProvider
 9{
 010    public string ProviderKey => ApiSupplierSettings.JapartsProviderKey;
 11
 12    public async Task<IReadOnlyList<SupplierStatusSnapshot>> FetchCartAsync(IReadOnlyList<OrderSupplierStateRef> states,
 13    {
 14        try
 15        {
 016            var basket = await japarts.GetBasketAsync(ct);
 017            var present = basket.Select(x => StudioOrderCommentLink.ExtractOrderId(x.Comment)).OfType<int>().ToHashSet()
 018            return states.Select(x => new SupplierStatusSnapshot
 019            {
 020                OrderId = x.OrderId, Kind = SupplierStatusKind.Cart,
 021                ExternalCode = present.Contains(x.OrderId) ? SupplierCartStatusCode.Pending : SupplierCartStatusCode.Rem
 022                StatusName = present.Contains(x.OrderId) ? "В корзине Japarts" : "Удалён из корзины"
 023            }).ToList();
 24        }
 025        catch (Exception ex) when (ex is JapartsApiException or HttpRequestException or TaskCanceledException)
 26        {
 027            return states.Select(x => new SupplierStatusSnapshot { OrderId = x.OrderId, Kind = SupplierStatusKind.Cart, 
 28        }
 029    }
 30
 31    public async Task<IReadOnlyList<SupplierStatusSnapshot>> FetchOrderAsync(IReadOnlyList<OrderSupplierStateRef> states
 32    {
 33        try
 34        {
 035            var orders = await japarts.GetOrdersAsync(60, ct);
 036            var byStudioOrder = orders.Select(x => new { Item = x, OrderId = StudioOrderCommentLink.ExtractOrderId(x.Com
 037                .Where(x => x.OrderId.HasValue).GroupBy(x => x.OrderId!.Value)
 038                .ToDictionary(x => x.Key, x => x.OrderByDescending(y => y.Item.LastUpdated).First().Item);
 039            return states.Where(x => byStudioOrder.ContainsKey(x.OrderId)).Select(x =>
 040            {
 041                var item = byStudioOrder[x.OrderId];
 042                return new SupplierStatusSnapshot { OrderId = x.OrderId, Kind = SupplierStatusKind.Order, ExternalCode =
 043                    StatusName = item.Status, ExternalOrderNumber = item.OrderNumber, ExternalOrderId = item.OrderNumber
 044                    ExternalLineId = item.GlobalId, QuantityConfirmed = item.QuantityBought, QuantityShipped = item.Quan
 045                    StatusChangedAt = item.LastUpdated };
 046            }).ToList();
 47        }
 048        catch (Exception ex) when (ex is JapartsApiException or HttpRequestException or TaskCanceledException)
 49        {
 050            return states.Select(x => new SupplierStatusSnapshot { OrderId = x.OrderId, Kind = SupplierStatusKind.Order,
 51        }
 052    }
 53}