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

loresoft / MediatR.CommandQuery / 11937278774

20 Nov 2024 04:10PM UTC coverage: 59.17% (-0.1%) from 59.302%
11937278774

push

github

pwelter34
make HybridCache optional

389 of 745 branches covered (52.21%)

Branch coverage included in aggregate %.

0 of 6 new or added lines in 2 files covered. (0.0%)

1 existing line in 1 file now uncovered.

1208 of 1954 relevant lines covered (61.82%)

19.52 hits per line

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

0.0
/src/MediatR.CommandQuery.Cosmos/DomainServiceExtensions.cs
1
using Cosmos.Abstracts;
2

3
using MediatR.CommandQuery.Behaviors;
4
using MediatR.CommandQuery.Commands;
5
using MediatR.CommandQuery.Cosmos.Handlers;
6
using MediatR.CommandQuery.Definitions;
7
using MediatR.CommandQuery.Extensions;
8
using MediatR.CommandQuery.Queries;
9
using MediatR.CommandQuery.Services;
10

11
using Microsoft.Extensions.DependencyInjection;
12
using Microsoft.Extensions.DependencyInjection.Extensions;
13

14
namespace MediatR.CommandQuery.Cosmos;
15

16
public static class DomainServiceExtensions
17
{
18
    public static IServiceCollection AddEntityQueries<TRepository, TEntity, TReadModel>(this IServiceCollection services)
19
        where TRepository : ICosmosRepository<TEntity>
20
        where TEntity : class, IHaveIdentifier<string>, new()
21
        where TReadModel : class
22
    {
23
        ArgumentNullException.ThrowIfNull(services);
×
24

25
        // standard queries
26
        services.TryAddTransient<IRequestHandler<EntityIdentifierQuery<string, TReadModel>, TReadModel>, EntityIdentifierQueryHandler<TRepository, TEntity, TReadModel>>();
×
27
        services.TryAddTransient<IRequestHandler<EntityIdentifiersQuery<string, TReadModel>, IReadOnlyCollection<TReadModel>>, EntityIdentifiersQueryHandler<TRepository, TEntity, TReadModel>>();
×
28
        services.TryAddTransient<IRequestHandler<EntityPagedQuery<TReadModel>, EntityPagedResult<TReadModel>>, EntityPagedQueryHandler<TRepository, TEntity, TReadModel>>();
×
29
        services.TryAddTransient<IRequestHandler<EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>, EntitySelectQueryHandler<TRepository, TEntity, TReadModel>>();
×
30

31
        // pipeline registration, run in order registered
32
        bool supportsTenant = typeof(TReadModel).Implements<IHaveTenant<string>>();
×
33
        if (supportsTenant)
×
34
        {
35
            services.AddTransient<IPipelineBehavior<EntityPagedQuery<TReadModel>, EntityPagedResult<TReadModel>>, TenantPagedQueryBehavior<string, TReadModel>>();
×
36
            services.AddTransient<IPipelineBehavior<EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>, TenantSelectQueryBehavior<string, TReadModel>>();
×
37
        }
38

39
        bool supportsDeleted = typeof(TReadModel).Implements<ITrackDeleted>();
×
40
        if (supportsDeleted)
×
41
        {
42
            services.AddTransient<IPipelineBehavior<EntityPagedQuery<TReadModel>, EntityPagedResult<TReadModel>>, DeletedPagedQueryBehavior<TReadModel>>();
×
43
            services.AddTransient<IPipelineBehavior<EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>, DeletedSelectQueryBehavior<TReadModel>>();
×
44
        }
45

46
        return services;
×
47
    }
48

49

50
    public static IServiceCollection AddEntityCommands<TRepository, TEntity, TReadModel, TCreateModel, TUpdateModel>(this IServiceCollection services)
51
        where TRepository : ICosmosRepository<TEntity>
52
        where TEntity : class, IHaveIdentifier<string>, new()
53
        where TCreateModel : class
54
        where TUpdateModel : class
55
    {
56
        ArgumentNullException.ThrowIfNull(services);
×
57

58
        services
×
59
            .AddEntityCreateCommand<TRepository, TEntity, TReadModel, TCreateModel>()
×
60
            .AddEntityUpdateCommand<TRepository, TEntity, TReadModel, TUpdateModel>()
×
61
            .AddEntityUpsertCommand<TRepository, TEntity, TReadModel, TUpdateModel>()
×
62
            .AddEntityPatchCommand<TRepository, TEntity, TReadModel>()
×
63
            .AddEntityDeleteCommand<TRepository, TEntity, TReadModel>();
×
64

65
        return services;
×
66
    }
67

68

69
    public static IServiceCollection AddEntityCreateCommand<TRepository, TEntity, TReadModel, TCreateModel>(this IServiceCollection services)
70
        where TRepository : ICosmosRepository<TEntity>
71
        where TEntity : class, IHaveIdentifier<string>, new()
72
        where TCreateModel : class
73
    {
74
        ArgumentNullException.ThrowIfNull(services);
×
75

76
        // standard crud commands
77
        services.TryAddTransient<IRequestHandler<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, EntityCreateCommandHandler<TRepository, TEntity, TCreateModel, TReadModel>>();
×
78

79
        // pipeline registration, run in order registered
80
        var createType = typeof(TCreateModel);
×
81
        bool supportsTenant = createType.Implements<IHaveTenant<string>>();
×
82
        if (supportsTenant)
×
83
        {
84
            services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, TenantDefaultCommandBehavior<string, TCreateModel, TReadModel>>();
×
85
            services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, TenantAuthenticateCommandBehavior<string, TCreateModel, TReadModel>>();
×
86
        }
87

88
        bool supportsTracking = createType.Implements<ITrackCreated>();
×
89
        if (supportsTracking)
×
90
            services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, TrackChangeCommandBehavior<TCreateModel, TReadModel>>();
×
91

92
        services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, ValidateEntityModelCommandBehavior<TCreateModel, TReadModel>>();
×
93
        services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<string, TCreateModel, TReadModel>>();
×
94

95
        return services;
×
96
    }
97

98
    public static IServiceCollection AddEntityUpdateCommand<TRepository, TEntity, TReadModel, TUpdateModel>(this IServiceCollection services)
99
        where TRepository : ICosmosRepository<TEntity>
100
        where TEntity : class, IHaveIdentifier<string>, new()
101
        where TUpdateModel : class
102
    {
103
        ArgumentNullException.ThrowIfNull(services);
×
104

105
        // allow query for update models
106
        services.TryAddTransient<IRequestHandler<EntityIdentifierQuery<string, TUpdateModel>, TUpdateModel>, EntityIdentifierQueryHandler<TRepository, TEntity, TUpdateModel>>();
×
107
        services.TryAddTransient<IRequestHandler<EntityIdentifiersQuery<string, TUpdateModel>, IReadOnlyCollection<TUpdateModel>>, EntityIdentifiersQueryHandler<TRepository, TEntity, TUpdateModel>>();
×
108

109
        // standard crud commands
110
        services.TryAddTransient<IRequestHandler<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, EntityUpdateCommandHandler<TRepository, TEntity, TUpdateModel, TReadModel>>();
×
111

112
        // pipeline registration, run in order registered
113
        var updateType = typeof(TUpdateModel);
×
114
        bool supportsTenant = updateType.Implements<IHaveTenant<string>>();
×
115
        if (supportsTenant)
×
116
        {
117
            services.AddTransient<IPipelineBehavior<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, TenantDefaultCommandBehavior<string, TUpdateModel, TReadModel>>();
×
118
            services.AddTransient<IPipelineBehavior<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, TenantAuthenticateCommandBehavior<string, TUpdateModel, TReadModel>>();
×
119
        }
120

121
        bool supportsTracking = updateType.Implements<ITrackUpdated>();
×
122
        if (supportsTracking)
×
123
            services.AddTransient<IPipelineBehavior<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, TrackChangeCommandBehavior<TUpdateModel, TReadModel>>();
×
124

125
        services.AddTransient<IPipelineBehavior<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, ValidateEntityModelCommandBehavior<TUpdateModel, TReadModel>>();
×
126
        services.AddTransient<IPipelineBehavior<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<string, TUpdateModel, TReadModel>>();
×
127

128
        return services;
×
129
    }
130

131
    public static IServiceCollection AddEntityUpsertCommand<TRepository, TEntity, TReadModel, TUpdateModel>(this IServiceCollection services)
132
        where TRepository : ICosmosRepository<TEntity>
133
        where TEntity : class, IHaveIdentifier<string>, new()
134
        where TUpdateModel : class
135
    {
136
        ArgumentNullException.ThrowIfNull(services);
×
137

138
        // standard crud commands
139
        services.TryAddTransient<IRequestHandler<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, EntityUpsertCommandHandler<TRepository, TEntity, TUpdateModel, TReadModel>>();
×
140

141
        // pipeline registration, run in order registered
142
        var updateType = typeof(TUpdateModel);
×
143
        bool supportsTenant = updateType.Implements<IHaveTenant<string>>();
×
144
        if (supportsTenant)
×
145
        {
146
            services.AddTransient<IPipelineBehavior<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, TenantDefaultCommandBehavior<string, TUpdateModel, TReadModel>>();
×
147
            services.AddTransient<IPipelineBehavior<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, TenantAuthenticateCommandBehavior<string, TUpdateModel, TReadModel>>();
×
148
        }
149

150
        bool supportsTracking = updateType.Implements<ITrackUpdated>();
×
151
        if (supportsTracking)
×
152
            services.AddTransient<IPipelineBehavior<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, TrackChangeCommandBehavior<TUpdateModel, TReadModel>>();
×
153

154
        services.AddTransient<IPipelineBehavior<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, ValidateEntityModelCommandBehavior<TUpdateModel, TReadModel>>();
×
155
        services.AddTransient<IPipelineBehavior<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<string, TUpdateModel, TReadModel>>();
×
156

157
        return services;
×
158
    }
159

160
    public static IServiceCollection AddEntityPatchCommand<TRepository, TEntity, TReadModel>(this IServiceCollection services)
161
        where TRepository : ICosmosRepository<TEntity>
162
        where TEntity : class, IHaveIdentifier<string>, new()
163
    {
164
        ArgumentNullException.ThrowIfNull(services);
×
165

166
        // standard crud commands
167
        services.TryAddTransient<IRequestHandler<EntityPatchCommand<string, TReadModel>, TReadModel>, EntityPatchCommandHandler<TRepository, TEntity, TReadModel>>();
×
168

169
        // pipeline registration, run in order registered
170
        services.AddTransient<IPipelineBehavior<EntityPatchCommand<string, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<string, TEntity, TReadModel>>();
×
171

172
        return services;
×
173
    }
174

175
    public static IServiceCollection AddEntityDeleteCommand<TRepository, TEntity, TReadModel>(this IServiceCollection services)
176
        where TRepository : ICosmosRepository<TEntity>
177
        where TEntity : class, IHaveIdentifier<string>, new()
178
    {
179
        ArgumentNullException.ThrowIfNull(services);
×
180

181
        // standard crud commands
182
        services.TryAddTransient<IRequestHandler<EntityDeleteCommand<string, TReadModel>, TReadModel>, EntityDeleteCommandHandler<TRepository, TEntity, TReadModel>>();
×
183

184
        // pipeline registration, run in order registered
185
        services.AddTransient<IPipelineBehavior<EntityDeleteCommand<string, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<string, TEntity, TReadModel>>();
×
186

187
        return services;
×
188
    }
189
}
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