< Summary

Information
Class: Services.ApiSupplierSettingsServices.MlAutoDeliveryAddressMappingService
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiSupplierSettings/MlAutoDeliveryAddressMappingService.cs
Line coverage
100%
Covered lines: 24
Uncovered lines: 0
Coverable lines: 24
Total lines: 51
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
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()100%44100%
ResolveWarehouseAsync(...)100%11100%
GetAsync(...)100%11100%
ReplaceAsync()100%66100%

File(s)

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

#LineLine coverage
 1using Microsoft.EntityFrameworkCore;
 2using OzonDomains.Models;
 3using OzonRepositories.Context;
 4
 5namespace Services.ApiSupplierSettingsServices;
 6
 7public sealed record MlAutoDeliveryAddressSelection(int ShipmentWarehouseId, string DeliveryAddressId);
 8public sealed record MlAutoDeliveryAddressMappingInput(int ShipmentWarehouseId, string? DeliveryAddressId);
 9
 10public sealed class MlAutoDeliveryAddressMappingService
 11{
 12    private readonly ApplicationDbContext _context;
 13    private readonly ApiSupplierDeliveryWarehouseResolver _warehouseResolver;
 14    public MlAutoDeliveryAddressMappingService(ApplicationDbContext context)
 6215        : this(context, new ApiSupplierDeliveryWarehouseResolver(context)) { }
 3216    public MlAutoDeliveryAddressMappingService(ApplicationDbContext context, ApiSupplierDeliveryWarehouseResolver wareho
 17    {
 3218        _context = context;
 3219        _warehouseResolver = warehouseResolver;
 3220    }
 21
 22    public async Task<MlAutoDeliveryAddressSelection?> ResolveAsync(int orderId, string? zasylWarehouseName = null, Canc
 23    {
 1424        var warehouse = await ResolveWarehouseAsync(orderId, zasylWarehouseName, ct);
 2125        if (!warehouse.WarehouseId.HasValue) return null;
 526        var mapping = await _context.MlAutoDeliveryAddressMappings.AsNoTracking()
 527            .SingleOrDefaultAsync(x => x.ShipmentWarehouseId == warehouse.WarehouseId.Value, ct);
 528        return mapping is null ? null : new MlAutoDeliveryAddressSelection(warehouse.WarehouseId.Value, mapping.Delivery
 1329    }
 30
 31    public Task<ApiSupplierDeliveryWarehouseResolution> ResolveWarehouseAsync(int orderId,
 32        string? zasylWarehouseName = null, CancellationToken ct = default) =>
 1633        _warehouseResolver.ResolveAsync(orderId, zasylWarehouseName, ct);
 34
 35    public Task<List<MlAutoDeliveryAddressMapping>> GetAsync(CancellationToken ct = default) =>
 1036        _context.MlAutoDeliveryAddressMappings.AsNoTracking().Include(x => x.ShipmentWarehouse)
 1037            .OrderBy(x => x.ShipmentWarehouse.Name).ToListAsync(ct);
 38
 39    public async Task ReplaceAsync(IReadOnlyCollection<MlAutoDeliveryAddressMappingInput> inputs, CancellationToken ct =
 40    {
 2941        var selected = inputs.Where(x => !string.IsNullOrWhiteSpace(x.DeliveryAddressId))
 2442            .Select(x => new MlAutoDeliveryAddressMappingInput(x.ShipmentWarehouseId, x.DeliveryAddressId!.Trim())).ToLi
 2443        var ids = selected.Select(x => x.ShipmentWarehouseId).ToList();
 2844        if (ids.Any(x => x <= 0) || ids.Distinct().Count() != ids.Count) throw new InvalidOperationException("Склад ML-A
 1045        if (await _context.Warehouses.CountAsync(x => ids.Contains(x.Id), ct) != ids.Count) throw new InvalidOperationEx
 546        var existing = await _context.MlAutoDeliveryAddressMappings.ToListAsync(ct);
 547        _context.MlAutoDeliveryAddressMappings.RemoveRange(existing);
 948        _context.MlAutoDeliveryAddressMappings.AddRange(selected.Select(x => new MlAutoDeliveryAddressMapping { Shipment
 549        await _context.SaveChangesAsync(ct);
 550    }
 51}