< Summary

Information
Class: Services.ApiSupplierSettingsServices.MlAutoRuDeliveryAddressMappingService
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiSupplierSettings/MlAutoRuDeliveryAddressMappingService.cs
Line coverage
50%
Covered lines: 12
Uncovered lines: 12
Coverable lines: 24
Total lines: 50
Line coverage: 50%
Branch coverage
50%
Covered branches: 3
Total branches: 6
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor(...)100%11100%
ResolveAsync()75%44100%
ResolveWarehouseAsync(...)100%11100%
GetAsync(...)100%210%
ReplaceAsync()0%4260%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiSupplierSettings/MlAutoRuDeliveryAddressMappingService.cs

#LineLine coverage
 1using Microsoft.EntityFrameworkCore;
 2using OzonDomains.Models;
 3using OzonRepositories.Context;
 4
 5namespace Services.ApiSupplierSettingsServices;
 6
 7public sealed record MlAutoRuDeliveryAddressMappingInput(int ShipmentWarehouseId, string? DeliveryAddressId);
 8
 9public sealed class MlAutoRuDeliveryAddressMappingService
 10{
 11    private readonly ApplicationDbContext _context;
 12    private readonly ApiSupplierDeliveryWarehouseResolver _warehouseResolver;
 13    public MlAutoRuDeliveryAddressMappingService(ApplicationDbContext context)
 13214        : this(context, new ApiSupplierDeliveryWarehouseResolver(context)) { }
 6615    public MlAutoRuDeliveryAddressMappingService(ApplicationDbContext context, ApiSupplierDeliveryWarehouseResolver ware
 16    {
 6617        _context = context;
 6618        _warehouseResolver = warehouseResolver;
 6619    }
 20
 21    public async Task<MlAutoDeliveryAddressSelection?> ResolveAsync(int orderId, string? zasylWarehouseName = null, Canc
 22    {
 1923        var warehouse = await ResolveWarehouseAsync(orderId, zasylWarehouseName, ct);
 2324        if (!warehouse.WarehouseId.HasValue) return null;
 1525        var mapping = await _context.MlAutoRuDeliveryAddressMappings.AsNoTracking()
 1526            .SingleOrDefaultAsync(x => x.ShipmentWarehouseId == warehouse.WarehouseId.Value, ct);
 1527        return mapping is null ? null : new MlAutoDeliveryAddressSelection(warehouse.WarehouseId.Value, mapping.Delivery
 1928    }
 29
 30    public Task<ApiSupplierDeliveryWarehouseResolution> ResolveWarehouseAsync(int orderId,
 31        string? zasylWarehouseName = null, CancellationToken ct = default) =>
 1932        _warehouseResolver.ResolveAsync(orderId, zasylWarehouseName, ct);
 33
 34    public Task<List<MlAutoRuDeliveryAddressMapping>> GetAsync(CancellationToken ct = default) =>
 035        _context.MlAutoRuDeliveryAddressMappings.AsNoTracking().Include(x => x.ShipmentWarehouse)
 036            .OrderBy(x => x.ShipmentWarehouse.Name).ToListAsync(ct);
 37
 38    public async Task ReplaceAsync(IReadOnlyCollection<MlAutoRuDeliveryAddressMappingInput> inputs, CancellationToken ct
 39    {
 040        var selected = inputs.Where(x => !string.IsNullOrWhiteSpace(x.DeliveryAddressId))
 041            .Select(x => new MlAutoRuDeliveryAddressMappingInput(x.ShipmentWarehouseId, x.DeliveryAddressId!.Trim())).To
 042        var ids = selected.Select(x => x.ShipmentWarehouseId).ToList();
 043        if (ids.Any(x => x <= 0) || ids.Distinct().Count() != ids.Count) throw new InvalidOperationException("Склад ML-A
 044        if (await _context.Warehouses.CountAsync(x => ids.Contains(x.Id), ct) != ids.Count) throw new InvalidOperationEx
 045        var existing = await _context.MlAutoRuDeliveryAddressMappings.ToListAsync(ct);
 046        _context.MlAutoRuDeliveryAddressMappings.RemoveRange(existing);
 047        _context.MlAutoRuDeliveryAddressMappings.AddRange(selected.Select(x => new MlAutoRuDeliveryAddressMapping { Ship
 048        await _context.SaveChangesAsync(ct);
 049    }
 50}