< Summary

Information
Class: Services.DataServices.SupplierDataServices
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/DataServices/SupplierDataServices.cs
Line coverage
100%
Covered lines: 40
Uncovered lines: 0
Coverable lines: 40
Total lines: 100
Line coverage: 100%
Branch coverage
94%
Covered branches: 17
Total branches: 18
Branch coverage: 94.4%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
AddSupplier(...)100%11100%
DeleteSupplier(...)100%11100%
GetSuppliers()100%11100%
GetSupplierAsync()100%11100%
GetSupplierNoTrackingAsync()100%11100%
GetSupplierAsync()100%11100%
GetSuppliersWithUrlAsync()100%11100%
GetSupplierBySiteAsync()100%11100%
UpdateSupplier()100%11100%
SaveChanges()100%11100%
FindOrCreateAsync()100%44100%
SetAdditionalTerm()92.85%1414100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/DataServices/SupplierDataServices.cs

#LineLine coverage
 1using Microsoft.EntityFrameworkCore;
 2using OzonDomains.Models;
 3using OzonRepositories.Data;
 4using Services.ApiServices.TradesoftApi.Models.Response;
 5
 6namespace Services.DataServices
 7{
 8    public class SupplierDataServices : IDataServices
 9    {
 10        private readonly SupplierRepository _repository;
 11
 2712        public SupplierDataServices(SupplierRepository repository)
 13        {
 2714            _repository = repository;
 2715        }
 16
 17        public Task<int> AddSupplier(Supplier value)
 18        {
 119            return _repository.Add(value);
 20        }
 21
 22        public Task<int> DeleteSupplier(Supplier value)
 23        {
 124            return (_repository.Delete(value));
 25        }
 26
 27        public async Task<List<Supplier>> GetSuppliers()
 28        {
 229            return await _repository.Get();
 230        }
 31
 32        public async Task<Supplier?> GetSupplierAsync(int id)
 33        {
 234            return await _repository.GetAsync(id);
 235        }
 36
 37        public async Task<Supplier?> GetSupplierNoTrackingAsync(int id)
 38        {
 239            return await _repository.GetAsyncNoTracking(id);
 240        }
 41
 42        public async Task<Supplier?> GetSupplierAsync(Supplier value)
 43        {
 244            return await _repository.GetAsync(value);
 245        }
 46
 47        public async Task<List<Supplier>> GetSuppliersWithUrlAsync()
 48        {
 249            return await _repository.GetWithUrls();
 250        }
 51        public async Task<Supplier?> GetSupplierBySiteAsync(string url)
 52        {
 853            return await _repository.GetBySiteAsync(new Supplier(){Site = url});
 854        }
 55
 56        public async Task<int> UpdateSupplier(Supplier value)
 57        {
 258            return (await _repository.Update(value));
 259        }
 60        public async Task<int> SaveChanges()
 61        {
 162            return await _repository.SaveChanges();
 163        }
 64
 65        public async Task<Supplier> FindOrCreateAsync(string name)
 66        {
 467            var supplier = await _repository.GetByNameAsync(name);
 568            if (supplier != null) return supplier;
 69
 70            try
 71            {
 372                var newSupplier = new Supplier { Name = name };
 373                await _repository.Add(newSupplier);
 174                return newSupplier;
 75            }
 76            catch (DbUpdateException)
 77            {
 78                // Concurrent request already created the same supplier — read it back
 279                return await _repository.GetByNameAsync(name)
 280                       ?? throw new InvalidOperationException($"Supplier '{name}' not found after insert conflict.");
 81            }
 382        }
 83
 84        public async Task<List<PreOrderItem>> SetAdditionalTerm(List<PreOrderItem> preOrderItems)
 85        {
 886            if (preOrderItems.Count == 0) return preOrderItems;
 687            var targetSupplier = await GetSupplierBySiteAsync(preOrderItems[0].SiteUrl ?? string.Empty);
 988            if (targetSupplier?.AdditionalTerm == null) return preOrderItems;
 1489            foreach (var item in preOrderItems)
 90            {
 491                var originalDeliveryDaysMax = item.DeliveryDays ?? "0";
 492                item.DeliveryDays = (int.Parse(originalDeliveryDaysMax) + targetSupplier.AdditionalTerm).ToString();
 493                item.DeliveryDaysMax += targetSupplier.AdditionalTerm.Value;
 494                item.DeliveryDaysMin += targetSupplier.AdditionalTerm.Value;
 495                item.Description += $"\nВ срок {originalDeliveryDaysMax} добавлено {targetSupplier.AdditionalTerm} дней 
 96            }
 397            return preOrderItems;
 798        }
 99    }
 100}