• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

loresoft / MediatR.CommandQuery / 8911801772

01 May 2024 04:09PM CUT coverage: 57.379% (-1.8%) from 59.163%
8911801772

push

github

pwelter34
tweak build

342 of 700 branches covered (48.86%)

Branch coverage included in aggregate %.

1011 of 1658 relevant lines covered (60.98%)

18.48 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/MediatR.CommandQuery.Cosmos/Handlers/EntitySelectQueryHandler.cs
1
using System.Linq.Dynamic.Core;
2

3
using AutoMapper;
4

5
using Cosmos.Abstracts;
6
using Cosmos.Abstracts.Extensions;
7

8
using MediatR.CommandQuery.Extensions;
9
using MediatR.CommandQuery.Queries;
10

11
using Microsoft.Extensions.Logging;
12

13
namespace MediatR.CommandQuery.Cosmos.Handlers;
14

15
public class EntitySelectQueryHandler<TRepository, TEntity, TReadModel>
16
    : RepositoryHandlerBase<TRepository, TEntity, EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>
17
    where TRepository : ICosmosRepository<TEntity>
18
    where TEntity : class
19
{
20
    public EntitySelectQueryHandler(ILoggerFactory loggerFactory, TRepository repository, IMapper mapper)
21
        : base(loggerFactory, repository, mapper)
×
22
    {
23
    }
×
24

25
    protected override async Task<IReadOnlyCollection<TReadModel>> Process(EntitySelectQuery<TReadModel> request, CancellationToken cancellationToken)
26
    {
27
        if (request is null)
×
28
            throw new ArgumentNullException(nameof(request));
×
29

30
        var cosmosQuery = await Repository
×
31
            .GetQueryableAsync()
×
32
            .ConfigureAwait(false);
×
33

34
        // build query from filter
35
        var query = BuildQuery(request, cosmosQuery);
×
36

37
        // page the query and convert to read model
38
        var result = await QueryList(request, query, cancellationToken).ConfigureAwait(false);
×
39

40
        return result;
×
41
    }
×
42

43

44
    protected virtual IQueryable<TEntity> BuildQuery(EntitySelectQuery<TReadModel> request, IQueryable<TEntity> query)
45
    {
46
        if (request is null)
×
47
            throw new ArgumentNullException(nameof(request));
×
48
        if (query is null)
×
49
            throw new ArgumentNullException(nameof(query));
×
50

51
        var entitySelect = request?.Select;
×
52

53
        // build query from filter
54
        if (entitySelect?.Filter != null)
×
55
            query = query.Filter(entitySelect.Filter);
×
56

57
        // add raw query
58
        if (!string.IsNullOrEmpty(entitySelect?.Query))
×
59
            query = query.Where(entitySelect.Query);
×
60

61
        return query;
×
62
    }
63

64
    protected virtual async Task<IReadOnlyCollection<TReadModel>> QueryList(EntitySelectQuery<TReadModel> request, IQueryable<TEntity> query, CancellationToken cancellationToken)
65
    {
66
        if (request is null)
×
67
            throw new ArgumentNullException(nameof(request));
×
68

69
        var results = await query
×
70
            .Sort(request.Select?.Sort)
×
71
            .ToListAsync(cancellationToken)
×
72
            .ConfigureAwait(false);
×
73

74
        return Mapper.Map<IList<TEntity>, IReadOnlyCollection<TReadModel>>(results);
×
75
    }
×
76

77
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc