< Summary

Information
Class: Services.DataServices.WarehouseMappingDataServices
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/DataServices/WarehouseMappingDataServices.cs
Line coverage
50%
Covered lines: 26
Uncovered lines: 26
Coverable lines: 52
Total lines: 127
Line coverage: 50%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

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

#LineLine coverage
 1using Microsoft.Extensions.Caching.Memory;
 2using OzonDomains.Models;
 3using OzonRepositories.Data;
 4
 5namespace Services.DataServices;
 6
 7public class WarehouseMappingDataServices : IDataServices
 8{
 9    private readonly WarehouseMappingRepository _repository;
 10    private readonly IMemoryCache _cache;
 11    private const string AllMappingsCacheKey = "warehouse_mappings_all";
 12
 2913    public WarehouseMappingDataServices(WarehouseMappingRepository repository, IMemoryCache cache)
 14    {
 2915        _repository = repository;
 2916        _cache = cache;
 2917    }
 18
 19    public async Task<int> AddWarehouseMapping(WarehouseMapping value)
 20    {
 621        var result = await _repository.Add(value);
 622        _cache.Remove(AllMappingsCacheKey);
 623        return result;
 624    }
 25
 26    public async Task<int> DeleteWarehouseMapping(WarehouseMapping value)
 27    {
 128        var result = await _repository.Delete(value);
 129        _cache.Remove(AllMappingsCacheKey);
 130        return result;
 131    }
 32
 33    public async Task<List<WarehouseMapping>> GetWarehouseMappings()
 34    {
 1535        return await _cache.GetOrCreateAsync(AllMappingsCacheKey, async entry =>
 1536        {
 1437            entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(60);
 1438            return await _repository.Get();
 2939        }) ?? [];
 1540    }
 41
 42    public async Task<WarehouseMapping?> GetWarehouseMappingAsync(int id)
 43    {
 044        return await _repository.GetAsync(id);
 045    }
 46
 47    public async Task<WarehouseMapping?> GetByOzonName(string ozonName)
 48    {
 049        return await _repository.GetByOzonName(ozonName);
 050    }
 51
 52    // Изменено на асинхронную версию
 53    public async Task<List<string>> GetByOzonNameAndClient(string ozonName, string clientName)
 54    {
 055        return await _repository.GetByOzonNameAndClient(ozonName, clientName);
 056    }
 57
 58    public async Task<List<string>> GetByNamByClient(OzonClient client, List<string> warehouseNames)
 59    {
 060        return await _repository.GetByNamByClient(client, warehouseNames);
 061    }
 62
 63    public async Task<List<WarehouseMapping>> GetListByBitrixName(string bitrixName)
 64    {
 065        return await _repository.GetListByBitrixName(bitrixName);
 066    }
 67
 68    public async Task<int> UpdateWarehouseMapping(WarehouseMapping value)
 69    {
 770        var result = await _repository.Update(value);
 771        _cache.Remove(AllMappingsCacheKey);
 772        return result;
 773    }
 74
 75    public Task<int> SaveChanges()
 76    {
 077        return _repository.SaveChanges();
 78    }
 79
 80    // Новые методы для батчинга и оптимизации
 81
 82    public async Task<List<WarehouseMapping>> GetByOzonNamesAndClient(List<string> ozonNames, string clientName)
 83    {
 084        return await _repository.GetByOzonNamesAndClient(ozonNames, clientName);
 085    }
 86
 87    public async Task<List<WarehouseMapping>> GetByBitrixNamesAndClient(List<string> bitrixNames, string clientName)
 88    {
 089        return await _repository.GetByBitrixNamesAndClient(bitrixNames, clientName);
 090    }
 91
 92    public async Task<List<string>> GetOzonWarehouseNamesByClient(string clientName)
 93    {
 094        return await _repository.GetOzonWarehouseNamesByClient(clientName);
 095    }
 96
 97    public async Task<List<WarehouseMapping>> GetByClientIdAsync(int clientId)
 98    {
 3499        return await _repository.GetByClientIdAsync(clientId);
 34100    }
 101
 102    public async Task<WarehouseMapping?> GetExactAsync(string bitrixName, string ozonName, int clientId)
 103    {
 5104        return await _repository.GetExactAsync(bitrixName, ozonName, clientId);
 5105    }
 106
 107    // Метод для массового получения маппингов по нескольким Ozon названиям
 108    public async Task<Dictionary<string, List<WarehouseMapping>>> GetWarehouseMappingsBatch(
 109        List<string> ozonNames,
 110        string clientName)
 111    {
 0112        var mappings = await _repository.GetByOzonNamesAndClient(ozonNames, clientName);
 113
 0114        return mappings
 0115            .GroupBy(m => m.OzonWarehouseName)
 0116            .ToDictionary(g => g.Key, g => g.ToList());
 0117    }
 118
 119    // Метод для получения всех маппингов клиента в виде словаря
 120    public async Task<Dictionary<string, WarehouseMapping>> GetClientMappingsDictionary(string clientName)
 121    {
 0122        var ozonNames = await _repository.GetOzonWarehouseNamesByClient(clientName);
 0123        var mappings = await _repository.GetByOzonNamesAndClient(ozonNames, clientName);
 124
 0125        return mappings.ToDictionary(m => m.OzonWarehouseName, m => m);
 0126    }
 127}