< Summary

Class:WinSolutions.Sveta.Server.Services.Implements.ConfigurationService
Assembly:WinSolutions.Sveta.Server
File(s):/opt/dev/sveta_api_build/WinSolutions.Sveta.Server/Services/Implements/ConfigurationService.cs
Covered lines:62
Uncovered lines:3
Coverable lines:65
Total lines:172
Line coverage:95.3% (62 of 65)
Covered branches:13
Total branches:34
Branch coverage:38.2% (13 of 34)

Metrics

MethodLine coverage Branch coverage
.ctor(...)100%100%
PrepareConfigurations()100%100%
GetConfiguration()100%100%
GetConfiguration()100%100%
GetConfigurations()100%50%
CreateConfiguration()100%50%
UpdateConfiguration()71.42%50%
DeleteConfiguration()85.71%50%
ConfigurationExists()100%100%
Sort(...)100%21.42%
GetDataTypes()100%100%
GetDataType()100%100%
GetCountConfTypes()100%100%

File(s)

/opt/dev/sveta_api_build/WinSolutions.Sveta.Server/Services/Implements/ConfigurationService.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using System.Linq;
 3using System.Threading.Tasks;
 4using Microsoft.EntityFrameworkCore;
 5using Microsoft.Extensions.Logging;
 6using WinSolutions.Sveta.Server.Data.DataModel.Contexts;
 7using WinSolutions.Sveta.Server.Data.DataModel.Entities;
 8using WinSolutions.Sveta.Server.Data.DataModel.Kinds;
 9using WinSolutions.Sveta.Server.Domain;
 10using WinSolutions.Sveta.Server.Services.Interfaces;
 11using WinSolutions.Sveta.Common;
 12using System;
 13using Org.BouncyCastle.Math.EC.Rfc7748;
 14
 15namespace WinSolutions.Sveta.Server.Services.Implements
 16{
 17    public class ConfigurationService : SvetaServiceBase, IConfigurationService
 18    {
 19        private readonly SvetaDbContext _db;
 20        private readonly ILogger<ConfigurationService> _logger;
 21
 22        public ConfigurationService(SvetaDbContext db, ILogger<ConfigurationService> logger, IAuthenticationService auth
 223            : base(authenticationService)
 224        {
 225            _db = db;
 226            _logger = logger;
 227        }
 28
 29        /// <summary>
 30        /// предварительная выборка конфигураций
 31        /// </summary>
 32        /// <returns></returns>
 1133        private IQueryable<Configuration> PrepareConfigurations() => _db.sysConfigurations
 1134            .Include(x=>x.ValueType)
 1135            .Where(x => !x.IsDeleted).AsQueryable();
 36
 37        /// <summary>
 38        /// получить конфигурацию по id
 39        /// </summary>
 40        /// <param name="confId">id конфигурации</param>
 41        /// <returns></returns>
 342        public async Task<Configuration> GetConfiguration(long confId) => await PrepareConfigurations().FirstOrDefaultAs
 43
 44        /// <summary>
 45        /// получить конфигурацию по названию секции и ключа
 46        /// </summary>
 47        /// <param name="section">название секции</param>
 48        /// <param name="key">название ключа</param>
 49        /// <returns></returns>
 250        public async Task<Configuration> GetConfiguration(string section, string key) => await PrepareConfigurations()
 251            .FirstOrDefaultAsync(x=>x.Section == section && x.Key == key);
 52
 53        /// <summary>
 54        /// получить конфигурации с пагинацией
 55        /// </summary>
 56        /// <param name="page">номер страницы</param>
 57        /// <param name="limit">размер страницы</param>
 58        /// <param name="filter">фильтр (секция, ключ, тип значения, значение)</param>
 59        /// <param name="sort">сортировка</param>
 60        /// <param name="encrypted">выводить только зашифрованные записи</param>
 61        /// <returns></returns>
 62        public async Task<PaginatedData<List<Configuration>>> GetConfigurations(int page, int limit, string filter, stri
 363        {
 364            var confs = PrepareConfigurations().AsNoTracking();
 365            int total = await confs?.CountAsync();
 366            confs = confs.Where(x=> !encrypted || x.Encrypted)
 367                .Where(x => string.IsNullOrWhiteSpace(filter) || x.Section.ToUpper().Contains(filter.ToUpper()) || x.Key
 368                || x.ValueType.Name.ToUpper().Contains(filter.ToUpper()) || x.Value.ToUpper().Contains(filter.ToUpper())
 369            int totalFiltered = await confs?.CountAsync();
 370            confs = Sort(confs, sort?.ToLower());
 371            return new PaginatedData<List<Configuration>>
 372            {
 373                Result = await confs.Skip(page * limit).Take(limit).ToListAsync(),
 374                TotalCount = total,
 375                TotalFilteredCount = totalFiltered
 376            };
 377        }
 78
 79        /// <summary>
 80        /// создать конфигурацию
 81        /// </summary>
 82        /// <param name="data">конф-ция</param>
 83        /// <returns></returns>
 84        public async Task CreateConfiguration(Configuration data)
 785        {
 786            await _db.sysConfigurations.AddAsync(data);
 787            await _db.SaveChangesAsync(CurrentUserId);
 788        }
 89
 90        /// <summary>
 91        /// обновить конфигурацию
 92        /// </summary>
 93        /// <param name="data">конф-ция</param>
 94        /// <returns></returns>
 95        public async Task UpdateConfiguration(Configuration data)
 196        {
 197            if (!(await ConfigurationExists(data.Id)))
 098            {
 099                throw new ArgumentException($"Конфигурация с id={data.Id} не найдена");
 100            }
 1101            _db.sysConfigurations.Update(data);
 1102            await _db.SaveChangesAsync(CurrentUserId);
 1103        }
 104
 105        /// <summary>
 106        /// удалить конфигурацию
 107        /// </summary>
 108        /// <param name="data">конф-ция</param>
 109        /// <returns></returns>
 110        public async Task DeleteConfiguration(long id)
 1111        {
 1112            Configuration rec = await _db.sysConfigurations.FindAsync(id);
 1113            if (rec == null)
 0114                throw new KeyNotFoundException($"Конфигурация с id={id} не найдена");
 1115            rec.IsDeleted = true;
 1116            await _db.SaveChangesAsync(CurrentUserId);
 1117        }
 118
 119        /// <summary>
 120        /// проверяет существование конф-ции
 121        /// </summary>
 122        /// <param name="confId">id конф-ции</param>
 123        /// <returns></returns>
 3124        public async Task<bool> ConfigurationExists(long confId) => await PrepareConfigurations().AsNoTracking().AnyAsyn
 125
 126        /// <summary>
 127        /// сортировка
 128        /// </summary>
 129        /// <param name="items">конф-ции</param>
 130        /// <param name="sort">тип сортировки</param>
 131        /// <returns></returns>
 3132        private IQueryable<Configuration> Sort(IQueryable<Configuration> items, string sort = default) => (sort ?? "").T
 3133        {
 3134            "key|desc" => items.OrderByDescending(d => d.Key),
 3135            "section" => items.OrderBy(d => d.Section),
 3136            "section|desc" => items.OrderByDescending(d => d.Section),
 3137            "valuetype" => items.OrderBy(d => d.ValueType.Name),
 3138            "valuetype|desc" => items.OrderByDescending(d => d.ValueType.Name),
 3139            _ => items.OrderBy(d => d.Key)
 3140        };
 141
 142        /// <summary>
 143        /// получает типы значений
 144        /// </summary>
 145        /// <param name="typeId">id типа.0 если все выводить</param>
 146        /// <param name="filter">фильтр по названию</param>
 147        /// <returns></returns>
 148        public async Task<List<ConfigurationsDataType>> GetDataTypes(long typeId, string filter = null)
 2149        {
 2150            var data = _db.ConfigurationsDataTypes
 2151             .AsNoTracking()
 2152             .Where(x => typeId == 0 || x.Id == typeId)
 2153             .Where(x => string.IsNullOrWhiteSpace(filter) || x.Name.ToLower().Contains(filter.ToLower()))
 2154             .Where(d => !d.IsDeleted);
 2155            return await data.ToListAsync();
 2156        }
 157
 158        /// <summary>
 159        /// получить тип значения
 160        /// </summary>
 161        /// <param name="id">id значения</param>
 162        /// <returns></returns>
 1163        public async Task<ConfigurationsDataType> GetDataType(long id) => await _db.ConfigurationsDataTypes
 1164             .Where(d => !d.IsDeleted && d.Id == id).FirstOrDefaultAsync();
 165
 166        /// <summary>
 167        /// получить кол-во конфигураций
 168        /// </summary>
 169        /// <returns></returns>
 1170        public async Task<int> GetCountConfTypes() => await _db.ConfigurationsDataTypes.CountAsync();
 171    }
 172}