< Summary

Information
Class: MRA.Services.Models.Drawings.DrawingService
Assembly: MRA.Services
File(s): D:\a\MiguelRomerART\MiguelRomerART\MRA.Services\Models\Drawings\DrawingService.cs
Line coverage
100%
Covered lines: 51
Uncovered lines: 0
Coverable lines: 51
Total lines: 125
Line coverage: 100%
Branch coverage
100%
Covered branches: 10
Total branches: 10
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%
GetAllDrawingsAsync()100%22100%
FindDrawingAsync()100%66100%
GetProductsAsync()100%11100%
GetCharactersAsync()100%11100%
GetModelsAsync()100%11100%
SaveDrawingAsync()100%11100%
UpdateViewsAsync()100%11100%
UpdateLikesAsync()100%11100%
VoteDrawingAsync()100%11100%
CheckIfExistsDrawingAsync()100%22100%
ExistsDrawing()100%11100%
DeleteAndAdjustTags(...)100%11100%

File(s)

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

#LineLine coverage
 1using MRA.Infrastructure.Settings;
 2using MRA.DTO.Exceptions;
 3using MRA.DTO.Models;
 4using MRA.DTO.ViewModels.Art.Select;
 5using MRA.Services.Models.Documents;
 6using MRA.DTO.ViewModels.Art;
 7using MRA.Infrastructure.Database.Providers.Interfaces;
 8using MRA.Infrastructure.Database.Documents.Interfaces;
 9using MRA.DTO.Mapper;
 10
 11namespace MRA.Services.Models.Drawings;
 12
 13public class DrawingService : DocumentModelService<DrawingModel, IDrawingDocument>, IDrawingService
 14{
 15    private readonly DrawingTagManager _drawingTagManager;
 16
 17    public DrawingService(
 18        AppSettings appConfig,
 19        IDocumentsDatabase db)
 2020        : base(collectionName: appConfig.Database.Collections.Drawings, new DrawingMapper(appConfig), db)
 21    {
 2022        _drawingTagManager = new DrawingTagManager(appConfig);
 2023    }
 24
 25    public async Task<IEnumerable<DrawingModel>> GetAllDrawingsAsync(bool onlyIfVisible)
 26    {
 227        var drawings = await GetAllAsync();
 28
 229        if (onlyIfVisible)
 430            drawings = drawings.Where(d => d.Visible);
 31
 232        return drawings;
 233    }
 34
 35    public async Task<DrawingModel> FindDrawingAsync(string id, bool onlyIfVisible, bool updateViews)
 36    {
 437        await CheckIfExistsDrawingAsync(id);
 38
 339        var drawing = (updateViews ? await UpdateViewsAsync(id) : await FindAsync(id));
 40
 341        if (onlyIfVisible && !drawing.Visible)
 142            throw new DrawingNotFoundException(id);
 43
 244        return drawing;
 245    }
 46
 47    public async Task<IEnumerable<ProductListItem>> GetProductsAsync()
 48    {
 149        var drawings = await GetAllAsync();
 150        return ProductListItem.GetProductsFromDrawings(drawings);
 151    }
 52
 53    public async Task<IEnumerable<CharacterListItem>> GetCharactersAsync()
 54    {
 155        var drawings = await GetAllAsync();
 156        return CharacterListItem.GetCharactersFromDrawings(drawings);
 157    }
 58
 59    public async Task<IEnumerable<ModelListItem>> GetModelsAsync()
 60    {
 161        var drawings = await GetAllAsync();
 162        return ModelListItem.GetModelsFromDrawings(drawings);
 163    }
 64
 65    public async Task<DrawingModel> SaveDrawingAsync(DrawingModel model)
 66    {
 167        var drawingWithTags = _drawingTagManager.SetAutomaticTags(model);
 168        await SetAsync(model.Id, drawingWithTags);
 69
 170        return drawingWithTags;
 171    }
 72
 73    public async Task<DrawingModel> UpdateViewsAsync(string id)
 74    {
 175        var drawing = await FindAsync(id);
 176        drawing.Views++;
 77
 178        await SetAsync(id, drawing);
 79
 180        return drawing;
 181    }
 82
 83    public async Task<DrawingModel> UpdateLikesAsync(string id)
 84    {
 285        await CheckIfExistsDrawingAsync(id);
 86
 187        var drawing = await FindAsync(id);
 188        drawing.Likes++;
 89
 190        await SetAsync(id, drawing);
 91
 192        return drawing;
 193    }
 94
 95
 96    public async Task<VoteSubmittedModel> VoteDrawingAsync(string documentId, int score)
 97    {
 498        await CheckIfExistsDrawingAsync(documentId);
 99
 4100        var drawing = await FindAsync(documentId);
 4101        drawing.UpdateDrawingScore(score);
 102
 4103        var success = await SetAsync(documentId, drawing);
 104
 4105        return new VoteSubmittedModel(drawing, success);
 4106    }
 107
 108    private async Task CheckIfExistsDrawingAsync(string id)
 109    {
 10110        var exists = await ExistsAsync(id);
 10111        if (!exists)
 2112            throw new DrawingNotFoundException(id);
 8113    }
 114
 115    public async Task<bool> ExistsDrawing(string id)
 116    {
 2117        return await ExistsAsync(id);
 2118    }
 119
 120
 121    public IEnumerable<string> DeleteAndAdjustTags(IEnumerable<string> tags)
 122    {
 1123        return _drawingTagManager.DeleteAndAdjustTags(tags);
 124    }
 125}