• 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

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

3
using AutoMapper;
4
using AutoMapper.QueryableExtensions;
5

6
using MediatR.CommandQuery.Extensions;
7
using MediatR.CommandQuery.Queries;
8

9
using Microsoft.EntityFrameworkCore;
10
using Microsoft.Extensions.Logging;
11

12
namespace MediatR.CommandQuery.EntityFrameworkCore.Handlers;
13

14
public class EntitySelectQueryHandler<TContext, TEntity, TReadModel>
15
    : DataContextHandlerBase<TContext, EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>
16
    where TContext : DbContext
17
    where TEntity : class
18
{
19
    public EntitySelectQueryHandler(ILoggerFactory loggerFactory, TContext dataContext, IMapper mapper)
20
        : base(loggerFactory, dataContext, mapper)
3✔
21
    {
22
    }
3✔
23

24

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

30
        var query = DataContext
3✔
31
            .Set<TEntity>()
3✔
32
            .AsNoTracking();
3✔
33

34
        // build query from filter
35
        query = BuildQuery(request, query);
3✔
36

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

40
        return result;
3✔
41
    }
3✔
42

43

44
    protected virtual IQueryable<TEntity> BuildQuery(EntitySelectQuery<TReadModel> request, IQueryable<TEntity> query)
45
    {
46
        var entitySelect = request?.Select;
3!
47

48
        // build query from filter
49
        if (entitySelect?.Filter != null)
3!
50
            query = query.Filter(entitySelect.Filter);
3✔
51

52
        // add raw query
53
        if (!string.IsNullOrEmpty(entitySelect?.Query))
3!
54
            query = query.Where(entitySelect.Query);
×
55

56
        return query;
3✔
57
    }
58

59
    protected virtual async Task<IReadOnlyCollection<TReadModel>> QueryList(EntitySelectQuery<TReadModel> request, IQueryable<TEntity> query, CancellationToken cancellationToken)
60
    {
61
        return await query
3!
62
            .Sort(request?.Select?.Sort)
3✔
63
            .ProjectTo<TReadModel>(Mapper.ConfigurationProvider)
3✔
64
            .ToListAsync(cancellationToken)
3✔
65
            .ConfigureAwait(false);
3✔
66
    }
3✔
67

68
}
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