< Summary

Information
Class: MRA.Services.Models.Drawings.DrawingTagManager
Assembly: MRA.Services
File(s): D:\a\MiguelRomerART\MiguelRomerART\MRA.Services\Models\Drawings\DrawingTagManager.cs
Line coverage
100%
Covered lines: 51
Uncovered lines: 0
Coverable lines: 51
Total lines: 136
Line coverage: 100%
Branch coverage
91%
Covered branches: 11
Total branches: 12
Branch coverage: 91.6%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

D:\a\MiguelRomerART\MiguelRomerART\MRA.Services\Models\Drawings\DrawingTagManager.cs

#LineLine coverage
 1using MRA.DTO.Enums.Drawing;
 2using MRA.DTO.Enums.DrawingFilter;
 3using MRA.DTO.Models;
 4using MRA.Infrastructure.Enums;
 5using MRA.Infrastructure.Settings;
 6using static MRA.Infrastructure.Settings.Options.DatabaseSettings.DatabaseDrawingsTagsOptions;
 7
 8namespace MRA.Services.Models.Drawings;
 9
 10public class DrawingTagManager
 11{
 12    public const string TAG_SEPARATOR = " ";
 13
 14    private readonly AppSettings _appConfig;
 15
 16
 2017    public DrawingTagManager(AppSettings appConfig)
 18    {
 2019        _appConfig = appConfig;
 2020    }
 21
 22
 23    public DrawingModel SetAutomaticTags(DrawingModel document)
 24    {
 125        var list = new List<string>();
 126        list = SetAutomaticTags_Name(document, list).ToList();
 127        list = SetAutomaticTags_ModelName(document, list).ToList();
 128        list = SetAutomaticTags_Title(document, list).ToList();
 129        list = SetAutomaticTags_Software(document, list).ToList();
 130        list = SetAutomaticTags_Paper(document, list).ToList();
 131        list = SetAutomaticTags_Type(document, list).ToList();
 132        list = SetAutomaticTags_ProductType(document, list).ToList();
 133        list = SetAutomaticTags_ProductName(document, list).ToList();
 134        list = SetAutomaticTags_Tags(document, list).ToList();
 135        document.Tags = DeleteAndAdjustTags(list);
 36
 137        return document;
 38    }
 39
 40    private static IEnumerable<string> SetAutomaticTags_Name(DrawingModel document, List<string> list)
 41    {
 342        list.AddRange(document.Name.Split(TAG_SEPARATOR).Select(x => x.ToLower()));
 143        return list;
 44    }
 45
 46    private static IEnumerable<string> SetAutomaticTags_ModelName(DrawingModel document, List<string> list)
 47    {
 348        list.AddRange(document.ModelName.Split(TAG_SEPARATOR).Select(x => x.ToLower()));
 149        return list;
 50    }
 51
 52    private static IEnumerable<string> SetAutomaticTags_Title(DrawingModel document, List<string> list)
 53    {
 554        list.AddRange(document.Title.Split(TAG_SEPARATOR).Select(x => x.ToLower()));
 155        return list;
 56    }
 57
 58    private static IEnumerable<string> SetAutomaticTags_Software(DrawingModel document, List<string> list)
 59    {
 160        if (document.Software != (int) EnumExtensions.GetDefaultValue<DrawingSoftwares>())
 61        {
 462            list.AddRange(document.SoftwareName.Split(TAG_SEPARATOR).Select(x => x.ToLower()));
 63        }
 164        return list;
 65    }
 66
 67    private static IEnumerable<string> SetAutomaticTags_Paper(DrawingModel document, List<string> list)
 68    {
 169        if (document.Paper != (int) EnumExtensions.GetDefaultValue<DrawingPaperSizes>())
 70        {
 271            list.AddRange(document.PaperHuman.Split(TAG_SEPARATOR).Select(x => x.ToLower()));
 72        }
 173        return list;
 74    }
 75
 76    private static IEnumerable<string> SetAutomaticTags_Type(DrawingModel document, List<string> list)
 77    {
 178        if (document.Type != (int) EnumExtensions.GetDefaultValue<DrawingTypes>())
 79        {
 280            list.AddRange(document.TypeName.Split(TAG_SEPARATOR).Select(x => x.ToLower()));
 81        }
 182        return list;
 83    }
 84
 85    private static IEnumerable<string> SetAutomaticTags_ProductType(DrawingModel document, List<string> list)
 86    {
 187        if (document.ProductType != (int) EnumExtensions.GetDefaultValue<DrawingProductTypes>())
 88        {
 289            list.AddRange(document.ProductTypeName.Split(TAG_SEPARATOR).Select(x => x.ToLower()));
 90        }
 191        return list;
 92    }
 93
 94    private static IEnumerable<string> SetAutomaticTags_ProductName(DrawingModel document, List<string> list)
 95    {
 496        list.AddRange(document.ProductName.Split(TAG_SEPARATOR).Select(x => x.ToLower()));
 197        return list;
 98    }
 99
 100    private static IEnumerable<string> SetAutomaticTags_Tags(DrawingModel document, List<string> list)
 101    {
 1102        list.AddRange(document.Tags);
 1103        return list;
 104    }
 105
 106    public IEnumerable<string> DeleteAndAdjustTags(IEnumerable<string> tags)
 107    {
 2108        var toDelete = _appConfig.Database.Drawings.Tags.Delete;
 2109        var toReplace = _appConfig.Database.Drawings.Tags.Replace;
 110
 80111        var processedTags = tags.Select(tag => ReplaceCharacters(tag, toReplace));
 112
 2113        var filteredTags = processedTags
 78114            .SelectMany(tag => SplitAndFilter(tag, toDelete))
 2115            .Distinct();
 116
 2117        return filteredTags;
 118    }
 119
 120    private static string ReplaceCharacters(string tag, IEnumerable<DatabaseDrawingsTagsReplaceOptions> toReplace)
 121    {
 78122        var result = tag.ToLower();
 468123        foreach (var change in toReplace)
 124        {
 156125            result = result.Replace(change.Key, change.Value);
 126        }
 78127        return result;
 128    }
 129
 130    private static IEnumerable<string> SplitAndFilter(string tag, IEnumerable<string> toDelete)
 131    {
 78132        return tag.Split(TAG_SEPARATOR)
 78133                  .Select(part => part.Trim().ToLower())
 156134                  .Where(part => !string.IsNullOrEmpty(part) && !toDelete.Contains(part));
 135    }
 136}