Skip to content

Conversation

@lukas-kd
Copy link
Contributor

This pull request introduces significant improvements to the NanoId value type, focusing on enhanced (de)serialization support, nullability handling, and code simplification. It also introduces a new extensible YAML type converter attribute and updates related persistence abstractions to support these changes. The most important changes are grouped below.

Serialization and Type Conversion Enhancements

  • Added NanoIdJsonConverter and NanoIdYamlConverter to enable seamless JSON and YAML (de)serialization of NanoId values, and decorated the NanoId struct with the appropriate attributes for automatic converter registration. (NanoId.cs, Dosaic.Extensions.NanoIds.csproj, [1] [2]
  • Introduced YamlTypeConverterAttribute and IYamlConverter in Dosaic.Hosting.Abstractions.Attributes, and updated YAML serialization extensions to support type-based converter discovery. (YamlTypeConverterAttribute.cs, SerializationExtensions.cs, [1] [2]

NanoId Struct Improvements

  • Refactored NanoId from a class to a readonly struct, improved nullability handling (e.g., Parse now returns NanoId?), simplified equality and comparison logic, and removed support for inheritance. (NanoId.cs, [1] [2] [3] [4]
  • Updated and expanded unit tests to cover new (de)serialization logic, nullability, and removed tests for inheritance scenarios. (NanoIdTests.cs, [1] [2] [3] [4] [5] [6] [7] [8] [9]

Persistence Model and Database Changes

@github-actions
Copy link

github-actions bot commented Dec 16, 2025

Test Results

 21 files  ±0   21 suites  ±0   43s ⏱️ -1s
640 tests ±0  636 ✅ ±0  4 💤 ±0  0 ❌ ±0 
641 runs  ±0  637 ✅ ±0  4 💤 ±0  0 ❌ ±0 

Results for commit 21c453f. ± Comparison against base commit 8657270.

This pull request removes 1 and adds 1 tests. Note that renamed tests count towards both.
Dosaic.Extensions.NanoIds.Tests.NanoIdTests ‑ EqualsWithDerivedTypeShouldReturnFalse
Dosaic.Extensions.NanoIds.Tests.NanoIdTests ‑ SerializesAsString

♻️ This comment has been updated with latest results.

@github-actions
Copy link

github-actions bot commented Dec 16, 2025

.NET Code Coverage

Coverage Type Threshold Actual Coverage Status
Line 80% 97% Generic badge
Branch 0% 0% N/A

Code Coverage Summary

Code Coverage Details
Generated on: 12/16/2025 - 09:44:54
Parser: MultiReportParser (21x DynamicCodeCoverageParser)
Assemblies: 26
Classes: 300
Files: 188
Covered lines: 5143
Uncovered lines: 118
Coverable lines: 5261
Total lines: 9055
Line coverage: 97.7% (5143 of 5261)
Tag: 130_20263386961
Name Covered Uncovered Coverable Total Line coverage
Dosaic.Api.OpenApi.dll 166 2 168 428 98.8%
Dosaic.Api.OpenApi.Filters.Document.ValueObjectDocumentFilter 20 0 20 47 100%
Dosaic.Api.OpenApi.Filters.Operation.FormFileFilter 29 0 29 44 100%
Dosaic.Api.OpenApi.Filters.Schema.ReadOnlyPropertySchemaFilter 8 0 8 26 100%
Dosaic.Api.OpenApi.Filters.Schema.ValueObjectSchemaFilter 50 0 50 105 100%
Dosaic.Api.OpenApi.OpenApiConfiguration 4 0 4 103 100%
Dosaic.Api.OpenApi.OpenApiPlugin 55 2 57 103 96.4%
Dosaic.Extensions.Abstractions.dll 33 2 35 72 94.2%
Dosaic.Extensions.Abstractions.CurrencyValue 10 0 10 18 100%
Dosaic.Extensions.Abstractions.Page 13 1 14 29 92.8%
Dosaic.Extensions.Abstractions.PagedList 8 1 9 17 88.8%
Dosaic.Extensions.Abstractions.Quantity 1 0 1 4 100%
Dosaic.Extensions.Abstractions.QuantityCount 1 0 1 4 100%
Dosaic.Extensions.NanoIds 35 1 36 427 97.2%
Dosaic.Extensions.NanoIds.NanoId 22 1 23 139 95.6%
Dosaic.Extensions.NanoIds.NanoIdAttribute 4 0 4 10 100%
Dosaic.Extensions.NanoIds.NanoIdJsonConverter 4 0 4 139 100%
Dosaic.Extensions.NanoIds.NanoIdYamlConverter 5 0 5 139 100%
Dosaic.Extensions.NanoIds.dll 35 1 36 427 97.2%
Dosaic.Extensions.NanoIds.NanoId 22 1 23 139 95.6%
Dosaic.Extensions.NanoIds.NanoIdAttribute 4 0 4 10 100%
Dosaic.Extensions.NanoIds.NanoIdJsonConverter 4 0 4 139 100%
Dosaic.Extensions.NanoIds.NanoIdYamlConverter 5 0 5 139 100%
Dosaic.Extensions.RestEase.dll 95 0 95 218 100%
Dosaic.Extensions.RestEase.Authentication.AuthenticationConfig 8 0 8 14 100%
Dosaic.Extensions.RestEase.Authentication.AuthHandler 42 0 42 75 100%
Dosaic.Extensions.RestEase.Authentication.OAuth2Model 10 0 10 29 100%
Dosaic.Extensions.RestEase.RestClientFactory 15 0 15 35 100%
Dosaic.Extensions.RestEase.RestClientMessageHandler 20 0 20 65 100%
Dosaic.Extensions.Sqids 13 0 13 36 100%
Dosaic.Extensions.Sqids.SqidExtensions 13 0 13 36 100%
Dosaic.Extensions.Sqids.dll 13 0 13 36 100%
Dosaic.Extensions.Sqids.SqidExtensions 13 0 13 36 100%
Dosaic.Hosting.Abstractions 522 28 550 2578 94.9%
Dosaic.Hosting.Abstractions.Attributes.ConfigurationAttribute 6 0 6 20 100%
Dosaic.Hosting.Abstractions.Attributes.HealthCheckAttribute 6 0 6 15 100%
Dosaic.Hosting.Abstractions.Attributes.LivenessCheckAttribute 3 0 3 10 100%
Dosaic.Hosting.Abstractions.Attributes.MiddlewareAttribute 4 0 4 13 100%
Dosaic.Hosting.Abstractions.Attributes.ReadinessCheckAttribute 3 0 3 10 100%
Dosaic.Hosting.Abstractions.Attributes.YamlTypeConverterAttribute 2 0 2 17 100%
Dosaic.Hosting.Abstractions.Configuration.EnvConfigurationExtensions 1 0 1 40 100%
Dosaic.Hosting.Abstractions.Configuration.EnvConfigurationProvider 12 1 13 40 92.3%
Dosaic.Hosting.Abstractions.Configuration.EnvConfigurationSource 1 0 1 40 100%
Dosaic.Hosting.Abstractions.DependencyInjection.Factory 7 0 7 28 100%
Dosaic.Hosting.Abstractions.DosaicDiagnostic 4 0 4 18 100%
Dosaic.Hosting.Abstractions.Exceptions.ConflictDosaicException 3 0 3 12 100%
Dosaic.Hosting.Abstractions.Exceptions.DosaicException 18 0 18 42 100%
Dosaic.Hosting.Abstractions.Exceptions.NotFoundDosaicException 8 3 11 26 72.7%
Dosaic.Hosting.Abstractions.Exceptions.ValidationDosaicException 11 0 11 26 100%
Dosaic.Hosting.Abstractions.Extensions.AssemblyExtensions 3 0 3 37 100%
Dosaic.Hosting.Abstractions.Extensions.ConfigurationExtensions 24 0 24 60 100%
Dosaic.Hosting.Abstractions.Extensions.EnumerableExtensions 3 0 3 11 100%
Dosaic.Hosting.Abstractions.Extensions.EnumExtensions 3 0 3 14 100%
Dosaic.Hosting.Abstractions.Extensions.FactoryExtensions 4 4 8 30 50%
Dosaic.Hosting.Abstractions.Extensions.ImplementationResolverExtensions 9 0 9 23 100%
Dosaic.Hosting.Abstractions.Extensions.KindSpecifierConverterFactory 8 1 9 249 88.8%
Dosaic.Hosting.Abstractions.Extensions.KindSpecifierConverterFactory.KindSpecifierConverter 21 0 21 249 100%
Dosaic.Hosting.Abstractions.Extensions.KindSpecifierYamlTypeConverter 23 1 24 249 95.8%
Dosaic.Hosting.Abstractions.Extensions.ObjectExtensions 32 0 32 87 100%
Dosaic.Hosting.Abstractions.Extensions.PluginActivateableExtensions 9 0 9 27 100%
Dosaic.Hosting.Abstractions.Extensions.SerializationExtensions 42 3 45 249 93.3%
Dosaic.Hosting.Abstractions.Extensions.StringExtensions 10 0 10 35 100%
Dosaic.Hosting.Abstractions.Extensions.TracingExtensions 27 0 27 71 100%
Dosaic.Hosting.Abstractions.Extensions.TypeAttributeYamlTypeConverter 9 0 9 249 100%
Dosaic.Hosting.Abstractions.Extensions.TypeExtensions 37 0 37 76 100%
Dosaic.Hosting.Abstractions.Extensions.ValueObjectYamlTypeConverter 11 0 11 249 100%
Dosaic.Hosting.Abstractions.GlobalStatusCodeOptions 17 0 17 46 100%
Dosaic.Hosting.Abstractions.Metrics.Metrics 16 0 16 69 100%
Dosaic.Hosting.Abstractions.Middlewares.EnrichRequestMetricsMiddleware 8 0 8 26 100%
Dosaic.Hosting.Abstractions.Middlewares.ExceptionMiddleware 26 0 26 54 100%
Dosaic.Hosting.Abstractions.Middlewares.Models.ErrorResponse 1 0 1 4 100%
Dosaic.Hosting.Abstractions.Middlewares.Models.FieldValidationError 1 0 1 4 100%
Dosaic.Hosting.Abstractions.Middlewares.Models.ValidationErrorResponse 4 1 5 15 80%
Dosaic.Hosting.Abstractions.Middlewares.RequestContentLengthLimitMiddleware 9 0 9 38 100%
System.Text.RegularExpressions.Generated 76 14 90 0 84.4%
Dosaic.Hosting.Abstractions.dll 527 25 552 2329 95.4%
Dosaic.Hosting.Abstractions.Attributes.ConfigurationAttribute 6 0 6 20 100%
Dosaic.Hosting.Abstractions.Attributes.HealthCheckAttribute 6 0 6 15 100%
Dosaic.Hosting.Abstractions.Attributes.LivenessCheckAttribute 3 0 3 10 100%
Dosaic.Hosting.Abstractions.Attributes.MiddlewareAttribute 4 0 4 13 100%
Dosaic.Hosting.Abstractions.Attributes.ReadinessCheckAttribute 3 0 3 10 100%
Dosaic.Hosting.Abstractions.Attributes.YamlTypeConverterAttribute 2 0 2 17 100%
Dosaic.Hosting.Abstractions.Configuration.EnvConfigurationExtensions 1 0 1 40 100%
Dosaic.Hosting.Abstractions.Configuration.EnvConfigurationProvider 12 1 13 40 92.3%
Dosaic.Hosting.Abstractions.Configuration.EnvConfigurationSource 1 0 1 40 100%
Dosaic.Hosting.Abstractions.DependencyInjection.Factory 7 0 7 28 100%
Dosaic.Hosting.Abstractions.DosaicDiagnostic 4 0 4 18 100%
Dosaic.Hosting.Abstractions.Exceptions.ConflictDosaicException 3 0 3 12 100%
Dosaic.Hosting.Abstractions.Exceptions.DosaicException 18 0 18 42 100%
Dosaic.Hosting.Abstractions.Exceptions.NotFoundDosaicException 8 3 11 26 72.7%
Dosaic.Hosting.Abstractions.Exceptions.ValidationDosaicException 11 0 11 26 100%
Dosaic.Hosting.Abstractions.Extensions.AssemblyExtensions 3 0 3 37 100%
Dosaic.Hosting.Abstractions.Extensions.ConfigurationExtensions 24 0 24 60 100%
Dosaic.Hosting.Abstractions.Extensions.EnumerableExtensions 3 0 3 11 100%
Dosaic.Hosting.Abstractions.Extensions.EnumExtensions 3 0 3 14 100%
Dosaic.Hosting.Abstractions.Extensions.FactoryExtensions 4 4 8 30 50%
Dosaic.Hosting.Abstractions.Extensions.ImplementationResolverExtensions 9 0 9 23 100%
Dosaic.Hosting.Abstractions.Extensions.KindSpecifierConverterFactory 31 1 32 249 96.8%
Dosaic.Hosting.Abstractions.Extensions.KindSpecifierYamlTypeConverter 23 1 24 249 95.8%
Dosaic.Hosting.Abstractions.Extensions.ObjectExtensions 32 0 32 87 100%
Dosaic.Hosting.Abstractions.Extensions.PluginActivateableExtensions 9 0 9 27 100%
Dosaic.Hosting.Abstractions.Extensions.SerializationExtensions 45 0 45 249 100%
Dosaic.Hosting.Abstractions.Extensions.StringExtensions 10 0 10 35 100%
Dosaic.Hosting.Abstractions.Extensions.TracingExtensions 27 0 27 71 100%
Dosaic.Hosting.Abstractions.Extensions.TypeAttributeYamlTypeConverter 9 0 9 249 100%
Dosaic.Hosting.Abstractions.Extensions.TypeExtensions 37 0 37 76 100%
Dosaic.Hosting.Abstractions.Extensions.ValueObjectYamlTypeConverter 11 0 11 249 100%
Dosaic.Hosting.Abstractions.GlobalStatusCodeOptions 17 0 17 46 100%
Dosaic.Hosting.Abstractions.Metrics.Metrics 16 0 16 69 100%
Dosaic.Hosting.Abstractions.Middlewares.EnrichRequestMetricsMiddleware 8 0 8 26 100%
Dosaic.Hosting.Abstractions.Middlewares.ExceptionMiddleware 26 0 26 54 100%
Dosaic.Hosting.Abstractions.Middlewares.Models.ErrorResponse 1 0 1 4 100%
Dosaic.Hosting.Abstractions.Middlewares.Models.FieldValidationError 1 0 1 4 100%
Dosaic.Hosting.Abstractions.Middlewares.Models.ValidationErrorResponse 4 1 5 15 80%
Dosaic.Hosting.Abstractions.Middlewares.RequestContentLengthLimitMiddleware 9 0 9 38 100%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FB75DD1CFA8BD501DA3524A5CB478444E68B403A58B5254A421E127191C747E39__RegexNames_1 44 10 54 0 81.4%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FB75DD1CFA8BD501DA3524A5CB478444E68B403A58B5254A421E127191C747E39__RegexUnderscores_0 30 4 34 0 88.2%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FB75DD1CFA8BD501DA3524A5CB478444E68B403A58B5254A421E127191C747E39__Utilities 2 0 2 0 100%
Dosaic.Hosting.WebHost.dll 650 12 662 1322 98.1%
Dosaic.Hosting.WebHost.Configurators.AppConfigurator 51 0 51 95 100%
Dosaic.Hosting.WebHost.Configurators.HostConfigurator 66 0 66 137 100%
Dosaic.Hosting.WebHost.Configurators.ServiceConfigurator 220 1 221 320 99.5%
Dosaic.Hosting.WebHost.Extensions.ConfigurationManagerExtensions 5 0 5 15 100%
Dosaic.Hosting.WebHost.Extensions.CorsPolicyExtensions 9 0 9 19 100%
Dosaic.Hosting.WebHost.Extensions.PluginExtensions 8 0 8 19 100%
Dosaic.Hosting.WebHost.Extensions.SystemExtensions 5 0 5 15 100%
Dosaic.Hosting.WebHost.Formatters.CustomMediaTypes 4 0 4 14 100%
Dosaic.Hosting.WebHost.Formatters.YamlInputFormatter 14 0 14 34 100%
Dosaic.Hosting.WebHost.Formatters.YamlOutputFormatter 12 0 12 26 100%
Dosaic.Hosting.WebHost.Logging.GelfJsonFormatter 46 0 46 88 100%
Dosaic.Hosting.WebHost.Logging.LoggingMetricSink 7 0 7 24 100%
Dosaic.Hosting.WebHost.Logging.OpentelemetryTraceEnricher 21 0 21 49 100%
Dosaic.Hosting.WebHost.Logging.RemovePropertiesEnricher 4 0 4 16 100%
Dosaic.Hosting.WebHost.Logging.StructuredLoggingExtensions 79 2 81 228 97.5%
Dosaic.Hosting.WebHost.PluginWebHostBuilder 46 2 48 97 95.8%
Dosaic.Hosting.WebHost.Services.TypeImplementationResolver 53 7 60 126 88.3%
Dosaic.Plugins.Authorization.Abstractions.dll 9 6 15 47 60%
Dosaic.Plugins.Authorization.Abstractions.AuthPolicy 0 2 2 15 0%
Dosaic.Plugins.Authorization.Abstractions.PolicyExtensions 9 4 13 32 69.2%
Dosaic.Plugins.Authorization.Keycloak.dll 164 6 170 487 96.4%
Dosaic.Plugins.Authorization.Keycloak.HealthCheckConfig 4 0 4 52 100%
Dosaic.Plugins.Authorization.Keycloak.KeycloakPlugin 31 0 31 67 100%
Dosaic.Plugins.Authorization.Keycloak.KeycloakPluginConfiguration 17 2 19 52 89.4%
Dosaic.Plugins.Authorization.Keycloak.RealmsConfig 2 0 2 52 100%
Dosaic.Plugins.Authorization.Keycloak.Scheme.ClaimsPrincipalExtensions 20 0 20 44 100%
Dosaic.Plugins.Authorization.Keycloak.Scheme.KeycloakAuthenticationHandler 57 1 58 121 98.2%
Dosaic.Plugins.Authorization.Keycloak.Scheme.KeycloakDefaults 3 3 6 24 50%
Dosaic.Plugins.Authorization.Keycloak.Scheme.PublicKeyService 30 0 30 75 100%
Dosaic.Plugins.Caching.Redis.dll 21 0 21 49 100%
Dosaic.Plugins.Caching.Redis.RedisCacheConfiguration 2 0 2 11 100%
Dosaic.Plugins.Caching.Redis.RedisCachePlugin 19 0 19 38 100%
Dosaic.Plugins.Jobs.Hangfire.dll 352 4 356 1019 98.8%
Dosaic.Plugins.Jobs.Hangfire.Attributes.EnabledByFeatureFilter 12 0 12 37 100%
Dosaic.Plugins.Jobs.Hangfire.Attributes.JobCleanupExpirationTimeAttribute 7 0 7 27 100%
Dosaic.Plugins.Jobs.Hangfire.Attributes.JobTimeoutAttribute 13 0 13 41 100%
Dosaic.Plugins.Jobs.Hangfire.Attributes.JobTimeZoneAttribute 4 0 4 13 100%
Dosaic.Plugins.Jobs.Hangfire.Attributes.LogJobExecutionFilter 9 0 9 28 100%
Dosaic.Plugins.Jobs.Hangfire.Attributes.RecurringJobAttribute 6 0 6 17 100%
Dosaic.Plugins.Jobs.Hangfire.Attributes.UniquePerQueueAttribute 40 0 40 76 100%
Dosaic.Plugins.Jobs.Hangfire.Extensions.HangfirePageOptions 2 0 2 28 100%
Dosaic.Plugins.Jobs.Hangfire.Extensions.MonitoringApiExtensions 8 0 8 28 100%
Dosaic.Plugins.Jobs.Hangfire.HangfireConfiguration 14 0 14 24 100%
Dosaic.Plugins.Jobs.Hangfire.HangfireExtensions 2 0 2 12 100%
Dosaic.Plugins.Jobs.Hangfire.HangFirePlugin 80 0 80 137 100%
Dosaic.Plugins.Jobs.Hangfire.HangfireStatisticsMetricsReporter 37 0 37 82 100%
Dosaic.Plugins.Jobs.Hangfire.Job.AsyncHangfireJob 7 0 7 24 100%
Dosaic.Plugins.Jobs.Hangfire.Job.AsyncJob 14 0 14 29 100%
Dosaic.Plugins.Jobs.Hangfire.Job.HangfireJob 4 4 8 29 50%
Dosaic.Plugins.Jobs.Hangfire.Job.ParameterizedAsyncJob 14 0 14 29 100%
Dosaic.Plugins.Jobs.Hangfire.JobEntity 3 0 3 175 100%
Dosaic.Plugins.Jobs.Hangfire.JobManager 74 0 74 175 100%
Dosaic.Plugins.Jobs.Hangfire.JobOptions 2 0 2 8 100%
Dosaic.Plugins.Management.Unleash.dll 119 4 123 285 96.7%
Dosaic.Plugins.Management.Unleash.UnleashConfiguration 4 0 4 13 100%
Dosaic.Plugins.Management.Unleash.UnleashFeatureDefinitionProvider 34 1 35 78 97.1%
Dosaic.Plugins.Management.Unleash.UnleashFilter 20 0 20 51 100%
Dosaic.Plugins.Management.Unleash.UnleashMiddlware 18 0 18 46 100%
Dosaic.Plugins.Management.Unleash.UnleashPlugin 43 3 46 97 93.4%
Dosaic.Plugins.Mapping.Mapster.dll 60 4 64 131 93.7%
Dosaic.Plugins.Mapping.Mapster.MapFromAttribute 3 0 3 15 100%
Dosaic.Plugins.Mapping.Mapster.MapsterInitializer 54 4 58 102 93.1%
Dosaic.Plugins.Mapping.Mapster.MapsterPlugin 3 0 3 14 100%
Dosaic.Plugins.Messaging.MassTransit.dll 205 0 205 431 100%
Dosaic.Plugins.Messaging.MassTransit.MessageBusConfiguration 11 0 11 19 100%
Dosaic.Plugins.Messaging.MassTransit.MessageBusPlugin 83 0 83 112 100%
Dosaic.Plugins.Messaging.MassTransit.MessageConsumer 15 0 15 38 100%
Dosaic.Plugins.Messaging.MassTransit.MessageConsumer 3 0 3 38 100%
Dosaic.Plugins.Messaging.MassTransit.MessageDeduplicateKeyProvider 17 0 17 42 100%
Dosaic.Plugins.Messaging.MassTransit.MessageSender 60 0 60 104 100%
Dosaic.Plugins.Messaging.MassTransit.MessageValidator 2 0 2 8 100%
Dosaic.Plugins.Messaging.MassTransit.QueueNameAttribute 2 0 2 35 100%
Dosaic.Plugins.Messaging.MassTransit.QueueResolver 12 0 12 35 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions 594 8 602 1599 98.6%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.AuditableModel 5 0 5 17 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.ChangeSet 10 0 10 29 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.ChangeTrackerExtensions 18 0 18 54 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.History 7 0 7 25 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.History 1 0 1 25 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.HistoryTrigger 5 0 5 37 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.HistoryTrigger 14 0 14 37 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.ObjectChanges 61 3 64 131 95.3%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.OldNewValue 2 0 2 8 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.DbEnumAttribute 4 0 4 13 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.DbExtensions 66 1 67 127 98.5%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.DbModel 23 0 23 54 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.EfCoreDbContext 24 0 24 98 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.ModelExtensions 3 0 3 14 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.ModelProperty 1 0 1 54 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.QueryableExtensions 15 0 15 39 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.EfCorePlugin 47 0 47 99 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Eventsourcing.AggregateEvent 6 0 6 20 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Eventsourcing.AggregateEvent 1 0 1 20 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Eventsourcing.EventTypeMapperFactory 3 0 3 14 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Identifiers.DbNanoIdPrimaryKeyAttribute 1 0 1 11 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Interceptors.BusinessLogicInterceptor 11 0 11 28 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Interceptors.IBusinessLogic 20 0 20 33 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Interceptors.SaveInterceptor 28 1 29 71 96.5%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Models.Model 1 0 1 9 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Models.ModelBuilderExtensions 96 3 99 180 96.9%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Models.ModelChange 6 0 6 28 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Models.ModelChange 5 0 5 28 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Monitoring.MetricsObserver 45 0 45 105 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.ServiceCollectionExtensions 39 0 39 87 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Transactions.EntityTransaction 17 0 17 40 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Triggers.BusinessLogicTrigger 6 0 6 22 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Triggers.BusinessLogicTrigger 1 0 1 22 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Triggers.TriggerContext 1 0 1 9 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Triggers.TriggerOrderAttribute 1 0 1 11 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.dll 598 5 603 1599 99.1%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.AuditableModel 5 0 5 17 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.ChangeSet 10 0 10 29 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.ChangeTrackerExtensions 18 0 18 54 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.History 7 0 7 25 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.History 1 0 1 25 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.HistoryTrigger 5 0 5 37 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.HistoryTrigger 15 0 15 37 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.ObjectChanges 63 1 64 131 98.4%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Audit.OldNewValue 2 0 2 8 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.DbEnumAttribute 4 0 4 13 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.DbExtensions 66 1 67 127 98.5%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.DbModel 23 0 23 54 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.EfCoreDbContext 24 0 24 98 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.ModelExtensions 3 0 3 14 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.ModelProperty 1 0 1 54 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Database.QueryableExtensions 15 0 15 39 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.EfCorePlugin 47 0 47 99 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Eventsourcing.AggregateEvent 6 0 6 20 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Eventsourcing.AggregateEvent 1 0 1 20 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Eventsourcing.EventTypeMapperFactory 3 0 3 14 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Identifiers.DbNanoIdPrimaryKeyAttribute 1 0 1 11 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Interceptors.BusinessLogicInterceptor 11 0 11 28 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Interceptors.IBusinessLogic 20 0 20 33 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Interceptors.SaveInterceptor 29 0 29 71 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Models.Model 1 0 1 9 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Models.ModelBuilderExtensions 96 3 99 180 96.9%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Models.ModelChange 6 0 6 28 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Models.ModelChange 5 0 5 28 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Monitoring.MetricsObserver 45 0 45 105 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.ServiceCollectionExtensions 39 0 39 87 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Transactions.EntityTransaction 17 0 17 40 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Triggers.BusinessLogicTrigger 6 0 6 22 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Triggers.BusinessLogicTrigger 1 0 1 22 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Triggers.TriggerContext 1 0 1 9 100%
Dosaic.Plugins.Persistence.EfCore.Abstractions.Triggers.TriggerOrderAttribute 1 0 1 11 100%
Dosaic.Plugins.Persistence.EfCore.NpgSql.dll 104 0 104 372 100%
Dosaic.Plugins.Persistence.EfCore.NpgSql.EfCoreNpgSqlConfiguration 13 0 13 77 100%
Dosaic.Plugins.Persistence.EfCore.NpgSql.NpgSqlConfiguration 12 0 12 114 100%
Dosaic.Plugins.Persistence.EfCore.NpgSql.PostgresEnumExtensions 33 0 33 67 100%
Dosaic.Plugins.Persistence.EfCore.NpgSql.ServiceCollectionExtensions 46 0 46 114 100%
Dosaic.Plugins.Persistence.MongoDb.dll 90 0 90 341 100%
Dosaic.Plugins.Persistence.MongoDb.MongoDbConfiguration 6 0 6 98 100%
Dosaic.Plugins.Persistence.MongoDb.MongoDbInstance 37 0 37 98 100%
Dosaic.Plugins.Persistence.MongoDb.MongoDbPlugin 23 0 23 47 100%
Dosaic.Plugins.Persistence.MongoDb.SnakeCase 2 0 2 98 100%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FC6D4220528D29B5ED802E2FAB161B18D2CDAE695E0A39AC1B7CFE28FD85F11CE__SnakeCaseRegex_0 22 0 22 0 100%
Dosaic.Plugins.Persistence.S3.dll 322 8 330 1358 97.5%
Dosaic.Plugins.Persistence.S3.Blob.BaseBlobFile 10 0 10 76 100%
Dosaic.Plugins.Persistence.S3.Blob.BlobFile 5 8 13 76 38.4%
Dosaic.Plugins.Persistence.S3.Blob.BlobFile 9 0 9 76 100%
Dosaic.Plugins.Persistence.S3.Blob.BlobFileMetaDataStore 25 0 25 64 100%
Dosaic.Plugins.Persistence.S3.Blob.BlobStorageBucketMigrationService 31 0 31 61 100%
Dosaic.Plugins.Persistence.S3.Blob.BlobStorageBucketMigrationService 3 0 3 61 100%
Dosaic.Plugins.Persistence.S3.File.DefaultFileTypeDefinitionResolver 11 0 11 43 100%
Dosaic.Plugins.Persistence.S3.File.FileBucketAttribute 3 0 3 8 100%
Dosaic.Plugins.Persistence.S3.File.FileBucketExtensions 9 0 9 25 100%
Dosaic.Plugins.Persistence.S3.File.FileId 12 0 12 82 100%
Dosaic.Plugins.Persistence.S3.File.FileId 13 0 13 82 100%
Dosaic.Plugins.Persistence.S3.File.FileIdExtensions 3 0 3 82 100%
Dosaic.Plugins.Persistence.S3.File.FileStorage 139 0 139 229 100%
Dosaic.Plugins.Persistence.S3.File.FileStorage 4 0 4 229 100%
Dosaic.Plugins.Persistence.S3.File.IComputeHash 3 0 3 43 100%
Dosaic.Plugins.Persistence.S3.S3Configuration 7 0 7 15 100%
Dosaic.Plugins.Persistence.S3.S3FileStoragePlugin 23 0 23 44 100%
Dosaic.Plugins.Persistence.S3.ServiceCollectionExtensions 12 0 12 62 100%
Dosaic.Plugins.Persistence.Smb.dll 30 0 30 84 100%
Dosaic.Plugins.Persistence.Smb.SmbStorageConfiguration 9 0 9 20 100%
Dosaic.Plugins.Persistence.Smb.SmbStorageExtensions 19 0 19 51 100%
Dosaic.Plugins.Persistence.Smb.SmbStoragePlugin 2 0 2 13 100%
Dosaic.Plugins.Persistence.VaultSharp.dll 155 2 157 620 98.7%
Dosaic.Plugins.Persistence.VaultSharp.Secret.Secret 1 0 1 6 100%
Dosaic.Plugins.Persistence.VaultSharp.Secret.SecretId 16 0 16 37 100%
Dosaic.Plugins.Persistence.VaultSharp.Secret.SecretStorage 59 2 61 163 96.7%
Dosaic.Plugins.Persistence.VaultSharp.Secret.SecretStorage 44 0 44 163 100%
Dosaic.Plugins.Persistence.VaultSharp.ServiceCollectionExtensions 3 0 3 21 100%
Dosaic.Plugins.Persistence.VaultSharp.Types.CertificateSecret 1 0 1 8 100%
Dosaic.Plugins.Persistence.VaultSharp.Types.Totp 1 0 1 30 100%
Dosaic.Plugins.Persistence.VaultSharp.Types.TotpCode 1 0 1 30 100%
Dosaic.Plugins.Persistence.VaultSharp.Types.TotpKey 1 0 1 30 100%
Dosaic.Plugins.Persistence.VaultSharp.Types.UsernamePasswordApiKeySecret 1 0 1 9 100%
Dosaic.Plugins.Persistence.VaultSharp.Types.UsernamePasswordSecret 1 0 1 8 100%
Dosaic.Plugins.Persistence.VaultSharp.Types.UsernamePasswordTotpSecret 1 0 1 30 100%
Dosaic.Plugins.Persistence.VaultSharp.VaultConfiguration 4 0 4 29 100%
Dosaic.Plugins.Persistence.VaultSharp.VaultHealthCheck 9 0 9 26 100%
Dosaic.Plugins.Persistence.VaultSharp.VaultSharpPlugin 12 0 12 30 100%
Dosaic.Plugins.Validations.Abstractions.dll 17 0 17 51 100%
Dosaic.Plugins.Validations.Abstractions.IValidator 1 0 1 8 100%
Dosaic.Plugins.Validations.Abstractions.ValidationContext 5 0 5 11 100%
Dosaic.Plugins.Validations.Abstractions.ValidationError 5 0 5 11 100%
Dosaic.Plugins.Validations.Abstractions.ValidationResult 2 0 2 8 100%
Dosaic.Plugins.Validations.Abstractions.ValueValidatorExtensions 4 0 4 13 100%
Dosaic.Plugins.Validations.AttributeValidation.dll 214 0 214 562 100%
Dosaic.Plugins.Validations.AttributeValidation.AsyncValidationAttribute 1 0 1 21 100%
Dosaic.Plugins.Validations.AttributeValidation.AttributeValidationPlugin 2 0 2 13 100%
Dosaic.Plugins.Validations.AttributeValidation.AttributeValidator 78 0 78 123 100%
Dosaic.Plugins.Validations.AttributeValidation.SyncValidationAttribute 1 0 1 21 100%
Dosaic.Plugins.Validations.AttributeValidation.Validators.Validations 132 0 132 384 100%

Copy link
Contributor

@redbit86k redbit86k left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice improvements

@redbit86k redbit86k merged commit c133d3a into main Dec 16, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants