main 6476e1704477 cached
536 files
887.5 KB
216.0k tokens
1476 symbols
1 requests
Download .txt
Showing preview only (1,043K chars total). Download the full file or copy to clipboard to get everything.
Repository: Avanade/Liquid-Application-Framework
Branch: main
Commit: 6476e1704477
Files: 536
Total size: 887.5 KB

Directory structure:
gitextract_r5h2xvzw/

├── .editorconfig
├── .github/
│   ├── dco.yml
│   └── workflows/
│       ├── base-liquid-ci-and-cd.yml
│       ├── liquid-ci-cd-cache-memory.yml
│       ├── liquid-ci-cd-cache-ncache.yml
│       ├── liquid-ci-cd-cache-redis.yml
│       ├── liquid-ci-cd-cache-sqlserver.yml
│       ├── liquid-ci-cd-core-telemetry-elasticapm.yaml
│       ├── liquid-ci-cd-core.yml
│       ├── liquid-ci-cd-dataverse.yml
│       ├── liquid-ci-cd-genai-openai.yml
│       ├── liquid-ci-cd-http.yml
│       ├── liquid-ci-cd-messaging-kafka.yaml
│       ├── liquid-ci-cd-messaging-rabbitmq.yaml
│       ├── liquid-ci-cd-messaging-servicebus.yaml
│       ├── liquid-ci-cd-repository-entityframework.yml
│       ├── liquid-ci-cd-repository-mongodb.yml
│       ├── liquid-ci-cd-repository-odata.yml
│       ├── liquid-ci-cd-storage-azurestorage.yml
│       └── liquid-ci-cd-templates.yaml
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── Liquid.Adapters.sln
├── Liquid.Application.Framework.sln
├── Liquid.WebApi.sln
├── README.md
├── docs/
│   ├── About-Lightweight-Architectures.md
│   ├── About-Liquid-Applications.md
│   ├── About-Liquid.md
│   ├── Business-logic-seggregation.md
│   ├── Introduction.md
│   ├── Key-Concepts.md
│   ├── Platform-Abstraction-Layer.md
│   └── Using-Liquid-for-building-your-application.md
├── nuget.config
├── samples/
│   ├── Liquid.Sample.Dataverse.sln
│   ├── Liquid.Sample.MessagingConsumer.sln
│   ├── Liquid.Sample.WebApi.sln
│   └── src/
│       ├── Liquid.Sample.Api/
│       │   ├── Controllers/
│       │   │   └── SampleController.cs
│       │   ├── Liquid.Sample.Api.csproj
│       │   ├── Program.cs
│       │   ├── appsettings.Development.json
│       │   └── appsettings.json
│       ├── Liquid.Sample.Dataverse.Domain/
│       │   ├── Liquid.Sample.Dataverse.Domain.csproj
│       │   └── PostSampleService.cs
│       ├── Liquid.Sample.Dataverse.Function/
│       │   ├── .gitignore
│       │   ├── DataverseIntegration.cs
│       │   ├── Liquid.Sample.Dataverse.Function.csproj
│       │   ├── Properties/
│       │   │   ├── serviceDependencies.json
│       │   │   └── serviceDependencies.local.json
│       │   ├── Startup.cs
│       │   ├── host.json
│       │   └── local.settings.json
│       ├── Liquid.Sample.Domain/
│       │   ├── Entities/
│       │   │   ├── SampleEntity.cs
│       │   │   └── SampleMessageEntity.cs
│       │   ├── Handlers/
│       │   │   ├── SampleGet/
│       │   │   │   ├── SampleCommandHandler.cs
│       │   │   │   ├── SampleRequest.cs
│       │   │   │   ├── SampleRequestValidator.cs
│       │   │   │   └── SampleResponse.cs
│       │   │   ├── SamplePost/
│       │   │   │   ├── SampleEventCommandHandler.cs
│       │   │   │   ├── SampleEventRequest.cs
│       │   │   │   └── SampleEventRequestValidator.cs
│       │   │   └── SamplePut/
│       │   │       ├── PutCommandHandler.cs
│       │   │       ├── PutCommandRequest.cs
│       │   │       └── PutCommandRequestValidator.cs
│       │   └── Liquid.Sample.Domain.csproj
│       └── Liquid.Sample.MessagingConsumer/
│           ├── Liquid.Sample.MessagingConsumer.csproj
│           ├── Program.cs
│           ├── Worker.cs
│           ├── appsettings.Development.json
│           └── appsettings.json
├── src/
│   ├── Liquid.Cache.Memory/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtension.cs
│   │   └── Liquid.Cache.Memory.csproj
│   ├── Liquid.Cache.NCache/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtension.cs
│   │   ├── Liquid.Cache.NCache.csproj
│   │   ├── client.ncconf
│   │   ├── config.ncconf
│   │   └── tls.ncconf
│   ├── Liquid.Cache.Redis/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtension.cs
│   │   └── Liquid.Cache.Redis.csproj
│   ├── Liquid.Cache.SqlServer/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtension.cs
│   │   └── Liquid.Cache.SqlServer.csproj
│   ├── Liquid.Core/
│   │   ├── AbstractMappers/
│   │   │   ├── LiquidMapper.cs
│   │   │   └── OcrResultMapper.cs
│   │   ├── Attributes/
│   │   │   └── LiquidSectionNameAttribute.cs
│   │   ├── Base/
│   │   │   ├── Enumeration.cs
│   │   │   └── LiquidInterceptorBase.cs
│   │   ├── Decorators/
│   │   │   ├── LiquidContextDecorator.cs
│   │   │   ├── LiquidCultureDecorator.cs
│   │   │   └── LiquidScopedLoggingDecorator.cs
│   │   ├── Entities/
│   │   │   ├── ChatCompletionResult.cs
│   │   │   ├── ClientDictionary.cs
│   │   │   ├── ConsumerErrorEventArgs.cs
│   │   │   ├── ConsumerMessageEventArgs.cs
│   │   │   ├── FunctionBody.cs
│   │   │   ├── LiquidBlob.cs
│   │   │   ├── LiquidEntity.cs
│   │   │   └── OcrResult.cs
│   │   ├── Exceptions/
│   │   │   ├── DataMappingException.cs
│   │   │   ├── DatabaseContextException.cs
│   │   │   ├── ExceptionCustomCodes.cs
│   │   │   ├── LiquidCustomException.cs
│   │   │   ├── LiquidDatabaseSettingsDoesNotExistException.cs
│   │   │   ├── LiquidException.cs
│   │   │   ├── MessagingConsumerException.cs
│   │   │   ├── MessagingMissingConfigurationException.cs
│   │   │   ├── MessagingMissingContextKeysException.cs
│   │   │   ├── MessagingMissingScopedKeysException.cs
│   │   │   ├── MessagingMissingSettingsException.cs
│   │   │   ├── MessagingProducerException.cs
│   │   │   ├── SerializerFailException.cs
│   │   │   ├── UnitOfWorkTransactionNotStartedException.cs
│   │   │   └── UnitOfWorkTransactionWithoutRepositoryException.cs
│   │   ├── Extensions/
│   │   │   ├── ByteExtension.cs
│   │   │   ├── CommonExtensions.cs
│   │   │   ├── DateTimeExtension.cs
│   │   │   ├── DependencyInjection/
│   │   │   │   ├── IServiceCollectionAutoMapperExtensions.cs
│   │   │   │   ├── IServiceCollectionCoreExtensions.cs
│   │   │   │   ├── IServiceCollectionLiquidExtension.cs
│   │   │   │   ├── IServiceCollectionTypeExtensions.cs
│   │   │   │   └── IServiceProviderExtensions.cs
│   │   │   ├── EnumExtension.cs
│   │   │   ├── IEnumerableExtension.cs
│   │   │   ├── IntExtension.cs
│   │   │   ├── ObjectExtension.cs
│   │   │   ├── StreamExtension.cs
│   │   │   ├── StringExtension.cs
│   │   │   └── TypeExtensions.cs
│   │   ├── GenAi/
│   │   │   ├── Entities/
│   │   │   │   ├── LiquidChatContent.cs
│   │   │   │   ├── LiquidChatMessage.cs
│   │   │   │   └── LiquidChatMessages.cs
│   │   │   ├── Enums/
│   │   │   │   ├── LiquidContentKind.cs
│   │   │   │   └── LiquidMessageRole.cs
│   │   │   ├── Interfaces/
│   │   │   │   ├── ILiquidGenAi.cs
│   │   │   │   └── ILiquidGenAiHandler.cs
│   │   │   └── Settings/
│   │   │       └── CompletionsOptions.cs
│   │   ├── Implementations/
│   │   │   ├── LiquidBackgroundService.cs
│   │   │   ├── LiquidCache.cs
│   │   │   ├── LiquidContext.cs
│   │   │   ├── LiquidContextNotifications.cs
│   │   │   ├── LiquidJsonSerializer.cs
│   │   │   ├── LiquidSerializerProvider.cs
│   │   │   ├── LiquidTelemetryInterceptor.cs
│   │   │   ├── LiquidUnitOfWork.cs
│   │   │   └── LiquidXmlSerializer.cs
│   │   ├── Interfaces/
│   │   │   ├── ILiquidCache.cs
│   │   │   ├── ILiquidConsumer.cs
│   │   │   ├── ILiquidContext.cs
│   │   │   ├── ILiquidContextNotifications.cs
│   │   │   ├── ILiquidDataContext.cs
│   │   │   ├── ILiquidMapper.cs
│   │   │   ├── ILiquidOcr.cs
│   │   │   ├── ILiquidProducer.cs
│   │   │   ├── ILiquidRepository.cs
│   │   │   ├── ILiquidSerializer.cs
│   │   │   ├── ILiquidSerializerProvider.cs
│   │   │   ├── ILiquidStorage.cs
│   │   │   ├── ILiquidUnitOfWork.cs
│   │   │   └── ILiquidWorker.cs
│   │   ├── Liquid.Core.csproj
│   │   ├── Localization/
│   │   │   ├── Entities/
│   │   │   │   ├── LocalizationCollection.cs
│   │   │   │   ├── LocalizationItem.cs
│   │   │   │   └── LocalizationValue.cs
│   │   │   ├── ILocalization.cs
│   │   │   ├── JsonFileLocalization.cs
│   │   │   ├── LocalizationException.cs
│   │   │   ├── LocalizationExtensions.cs
│   │   │   └── LocalizationReaderException.cs
│   │   ├── PipelineBehaviors/
│   │   │   ├── LiquidTelemetryBehavior.cs
│   │   │   └── LiquidValidationBehavior.cs
│   │   ├── Settings/
│   │   │   ├── CultureSettings.cs
│   │   │   ├── DatabaseSettings.cs
│   │   │   ├── GenAiOptions.cs
│   │   │   ├── OcrOptions.cs
│   │   │   ├── ScopedContextSettings.cs
│   │   │   ├── ScopedKey.cs
│   │   │   └── ScopedLoggingSettings.cs
│   │   └── Utils/
│   │       ├── TypeUtils.cs
│   │       └── ZipUtils.cs
│   ├── Liquid.Core.Telemetry.ElasticApm/
│   │   ├── Extensions/
│   │   │   ├── DependencyInjection/
│   │   │   │   ├── IApplicationBuilderExtensions.cs
│   │   │   │   └── IServiceCollectionExtensions.cs
│   │   │   └── IConfigurationExtension.cs
│   │   ├── Implementations/
│   │   │   ├── LiquidElasticApmInterceptor.cs
│   │   │   └── LiquidElasticApmTelemetryBehavior.cs
│   │   └── Liquid.Core.Telemetry.ElasticApm.csproj
│   ├── Liquid.Dataverse/
│   │   ├── DataverseClientFactory.cs
│   │   ├── DataverseEntityMapper.cs
│   │   ├── DataverseSettings.cs
│   │   ├── Extensions/
│   │   │   ├── DependencyInjection/
│   │   │   │   └── IServiceCollectionExtensions.cs
│   │   │   └── EntityExtensions.cs
│   │   ├── IDataverseClientFactory.cs
│   │   ├── ILiquidDataverse.cs
│   │   ├── Liquid.Dataverse.csproj
│   │   └── LiquidDataverse.cs
│   ├── Liquid.GenAi.OpenAi/
│   │   ├── Extensions/
│   │   │   └── IServiceCollectionExtension.cs
│   │   ├── IOpenAiClientFactory.cs
│   │   ├── Liquid.GenAi.OpenAi.csproj
│   │   ├── OpenAiAdapter.cs
│   │   ├── OpenAiClientFactory.cs
│   │   └── Settings/
│   │       └── OpenAiOptions.cs
│   ├── Liquid.Messaging.Kafka/
│   │   ├── Extensions/
│   │   │   ├── DependencyInjection/
│   │   │   │   └── IServiceCollectionExtension.cs
│   │   │   └── HeadersExtension.cs
│   │   ├── IKafkaFactory.cs
│   │   ├── KafkaConsumer.cs
│   │   ├── KafkaFactory.cs
│   │   ├── KafkaProducer.cs
│   │   ├── Liquid.Messaging.Kafka.csproj
│   │   └── Settings/
│   │       └── KafkaSettings.cs
│   ├── Liquid.Messaging.RabbitMq/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtension.cs
│   │   ├── IRabbitMqFactory.cs
│   │   ├── Liquid.Messaging.RabbitMq.csproj
│   │   ├── RabbitMqConsumer.cs
│   │   ├── RabbitMqFactory.cs
│   │   ├── RabbitMqProducer.cs
│   │   └── Settings/
│   │       ├── AdvancedSettings.cs
│   │       ├── QueueAckModeEnum.cs
│   │       ├── QueueAckModeSettings.cs
│   │       ├── RabbitMqConsumerSettings.cs
│   │       ├── RabbitMqProducerSettings.cs
│   │       └── RabbitMqSettings.cs
│   ├── Liquid.Messaging.ServiceBus/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtensions.cs
│   │   ├── IServiceBusFactory.cs
│   │   ├── Liquid.Messaging.ServiceBus.csproj
│   │   ├── ServiceBusConsumer.cs
│   │   ├── ServiceBusFactory.cs
│   │   ├── ServiceBusProducer.cs
│   │   └── Settings/
│   │       └── ServiceBusSettings.cs
│   ├── Liquid.Repository.EntityFramework/
│   │   ├── EntityFrameworkDataContext.cs
│   │   ├── EntityFrameworkRepository.cs
│   │   ├── Exceptions/
│   │   │   └── DatabaseDoesNotExistException.cs
│   │   ├── Extensions/
│   │   │   ├── DbContextExtensions.cs
│   │   │   ├── ILiquidRepositoryExtensions.cs
│   │   │   └── IServiceCollectionExtensions.cs
│   │   ├── IEntityFrameworkDataContext.cs
│   │   └── Liquid.Repository.EntityFramework.csproj
│   ├── Liquid.Repository.Mongo/
│   │   ├── Exceptions/
│   │   │   ├── MongoEntitySettingsDoesNotExistException.cs
│   │   │   └── MongoException.cs
│   │   ├── Extensions/
│   │   │   ├── IMongoCollectionExtensions.cs
│   │   │   └── IServiceCollectionExtensions.cs
│   │   ├── IMongoClientFactory.cs
│   │   ├── IMongoDataContext.cs
│   │   ├── Liquid.Repository.Mongo.csproj
│   │   ├── MongoClientFactory.cs
│   │   ├── MongoDataContext.cs
│   │   ├── MongoRepository.cs
│   │   └── Settings/
│   │       └── MongoEntitySettings.cs
│   ├── Liquid.Repository.OData/
│   │   ├── Extensions/
│   │   │   └── IServiceCollectionExtension.cs
│   │   ├── IODataClientFactory.cs
│   │   ├── Liquid.Repository.OData.csproj
│   │   ├── ODataClientFactory.cs
│   │   ├── ODataRepository.cs
│   │   └── ODataSettings.cs
│   ├── Liquid.Storage.AzureStorage/
│   │   ├── BlobClientFactory.cs
│   │   ├── Extensions/
│   │   │   └── IServiceCollectionExtensions.cs
│   │   ├── IBlobClientFactory.cs
│   │   ├── Liquid.Storage.AzureStorage.csproj
│   │   ├── LiquidStorageAzure.cs
│   │   └── StorageSettings.cs
│   └── Liquid.WebApi.Http/
│       ├── Attributes/
│       │   ├── SwaggerAuthorizationHeaderAttribute.cs
│       │   ├── SwaggerBaseHeaderAttribute.cs
│       │   ├── SwaggerChannelHeaderAttribute.cs
│       │   ├── SwaggerCultureHeaderAttribute.cs
│       │   └── SwaggerCustomHeaderAttribute.cs
│       ├── Entities/
│       │   └── LiquidErrorResponse.cs
│       ├── Exceptions/
│       │   ├── LiquidContextKeysException.cs
│       │   └── LiquidScopedKeysException.cs
│       ├── Extensions/
│       │   ├── DependencyInjection/
│       │   │   ├── IApplicationBuilderExtensions.cs
│       │   │   └── IServiceCollectionExtensions.cs
│       │   └── HttpContextExtensions.cs
│       ├── Filters/
│       │   └── Swagger/
│       │       ├── AddHeaderParameterFilter.cs
│       │       ├── DefaultResponseFilter.cs
│       │       ├── DocumentSortFilter.cs
│       │       └── OverloadMethodsSameVerb.cs
│       ├── Implementations/
│       │   ├── LiquidControllerBase.cs
│       │   └── LiquidNotificationHelper.cs
│       ├── Interfaces/
│       │   └── ILiquidNotificationHelper.cs
│       ├── Liquid.WebApi.Http.csproj
│       ├── Middlewares/
│       │   ├── LiquidContextMiddleware.cs
│       │   ├── LiquidCultureMiddleware.cs
│       │   ├── LiquidExceptionMiddleware.cs
│       │   └── LiquidScopedLoggingMiddleware.cs
│       └── Settings/
│           └── SwaggerSettings.cs
├── templates/
│   ├── Liquid.Templates.sln
│   └── src/
│       └── Liquid.Templates/
│           ├── Liquid.Templates.csproj
│           └── Templates/
│               ├── Liquid.Crud.AddEntity/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   ├── PROJECTNAME.Domain/
│               │   │   ├── Entities/
│               │   │   │   └── ENTITYNAME.cs
│               │   │   └── Handlers/
│               │   │       ├── CreateENTITYNAME/
│               │   │       │   ├── CreateENTITYNAMEHandler.cs
│               │   │       │   ├── CreateENTITYNAMERequest.cs
│               │   │       │   └── CreateENTITYNAMEValidator.cs
│               │   │       ├── ListENTITYNAME/
│               │   │       │   ├── ListENTITYNAMEHandler.cs
│               │   │       │   ├── ListENTITYNAMERequest.cs
│               │   │       │   └── ListENTITYNAMEResponse.cs
│               │   │       ├── ReadENTITYNAME/
│               │   │       │   ├── ReadENTITYNAMEHandler.cs
│               │   │       │   ├── ReadENTITYNAMERequest.cs
│               │   │       │   └── ReadENTITYNAMEResponse.cs
│               │   │       ├── RemoveENTITYNAME/
│               │   │       │   ├── RemoveENTITYNAMEHandler.cs
│               │   │       │   ├── RemoveENTITYNAMERequest.cs
│               │   │       │   └── RemoveENTITYNAMEResponse.cs
│               │   │       └── UpdateENTITYNAME/
│               │   │           ├── UpdateENTITYNAMEHandler.cs
│               │   │           ├── UpdateENTITYNAMERequest.cs
│               │   │           ├── UpdateENTITYNAMEResponse.cs
│               │   │           └── UpdateENTITYNAMEValidator.cs
│               │   └── PROJECTNAME.WebApi/
│               │       └── Controllers/
│               │           └── ENTITYNAMEController.cs
│               ├── Liquid.Crud.Solution/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── src/
│               │       ├── PROJECTNAME.Domain/
│               │       │   ├── Entities/
│               │       │   │   └── ENTITYNAME.cs
│               │       │   ├── Handlers/
│               │       │   │   ├── CreateENTITYNAME/
│               │       │   │   │   ├── CreateENTITYNAMEHandler.cs
│               │       │   │   │   ├── CreateENTITYNAMERequest.cs
│               │       │   │   │   └── CreateENTITYNAMEValidator.cs
│               │       │   │   ├── ListENTITYNAME/
│               │       │   │   │   ├── ListENTITYNAMEHandler.cs
│               │       │   │   │   ├── ListENTITYNAMERequest.cs
│               │       │   │   │   └── ListENTITYNAMEResponse.cs
│               │       │   │   ├── ReadENTITYNAME/
│               │       │   │   │   ├── ReadENTITYNAMEHandler.cs
│               │       │   │   │   ├── ReadENTITYNAMERequest.cs
│               │       │   │   │   └── ReadENTITYNAMEResponse.cs
│               │       │   │   ├── RemoveENTITYNAME/
│               │       │   │   │   ├── RemoveENTITYNAMEHandler.cs
│               │       │   │   │   ├── RemoveENTITYNAMERequest.cs
│               │       │   │   │   └── RemoveENTITYNAMEResponse.cs
│               │       │   │   └── UpdateENTITYNAME/
│               │       │   │       ├── UpdateENTITYNAMEHandler.cs
│               │       │   │       ├── UpdateENTITYNAMERequest.cs
│               │       │   │       ├── UpdateENTITYNAMEResponse.cs
│               │       │   │       └── UpdateENTITYNAMEValidator.cs
│               │       │   ├── IDomainInjection.cs
│               │       │   └── PROJECTNAME.Domain.csproj
│               │       ├── PROJECTNAME.Microservice.sln
│               │       └── PROJECTNAME.WebApi/
│               │           ├── Controllers/
│               │           │   └── ENTITYNAMEController.cs
│               │           ├── PROJECTNAME.WebApi.csproj
│               │           ├── PROJECTNAME.WebApi.http
│               │           ├── Program.cs
│               │           ├── appsettings.Development.json
│               │           └── appsettings.json
│               ├── Liquid.DbContext.AddEntity/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.Repository/
│               │       └── Configurations/
│               │           └── ENTITYNAMEConfiguration.cs
│               ├── Liquid.DbContext.Project/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.Repository/
│               │       ├── Configurations/
│               │       │   └── ENTITYNAMEConfiguration.cs
│               │       ├── LiquidDbContext.cs
│               │       └── PROJECTNAME.Repository.csproj
│               ├── Liquid.Domain.AddHandler/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.Domain/
│               │       └── Handlers/
│               │           └── COMMANDNAMEENTITYNAME/
│               │               ├── COMMANDNAMEENTITYNAMEHandler.cs
│               │               ├── COMMANDNAMEENTITYNAMERequest.cs
│               │               ├── COMMANDNAMEENTITYNAMEResponse.cs
│               │               └── COMMANDNAMEENTITYNAMEValidator.cs
│               ├── Liquid.Domain.Project/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.Domain/
│               │       ├── Entities/
│               │       │   └── ENTITYNAME.cs
│               │       ├── Handlers/
│               │       │   └── COMMANDNAMEENTITYNAME/
│               │       │       ├── COMMANDNAMEENTITYNAMEHandler.cs
│               │       │       ├── COMMANDNAMEENTITYNAMERequest.cs
│               │       │       ├── COMMANDNAMEENTITYNAMEResponse.cs
│               │       │       └── COMMANDNAMEENTITYNAMEValidator.cs
│               │       └── PROJECTNAME.Domain.csproj
│               ├── Liquid.WebApi.AddEntity/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   ├── PROJECTNAME.Domain/
│               │   │   ├── Entities/
│               │   │   │   └── ENTITYNAME.cs
│               │   │   └── Handlers/
│               │   │       └── COMMANDNAMEENTITYNAME/
│               │   │           ├── COMMANDNAMEENTITYNAMEHandler.cs
│               │   │           ├── COMMANDNAMEENTITYNAMERequest.cs
│               │   │           ├── COMMANDNAMEENTITYNAMEResponse.cs
│               │   │           └── COMMANDNAMEENTITYNAMEValidator.cs
│               │   └── PROJECTNAME.WebApi/
│               │       └── Controllers/
│               │           └── ENTITYNAMEController.cs
│               ├── Liquid.WebApi.Project/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.WebApi/
│               │       ├── Controllers/
│               │       │   └── ENTITYNAMEController.cs
│               │       ├── PROJECTNAME.WebApi.csproj
│               │       ├── PROJECTNAME.WebApi.http
│               │       ├── Program.cs
│               │       ├── appsettings.Development.json
│               │       └── appsettings.json
│               ├── Liquid.WebApi.Solution/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── src/
│               │       ├── PROJECTNAME.Domain/
│               │       │   ├── Entities/
│               │       │   │   └── ENTITYNAME.cs
│               │       │   ├── Handlers/
│               │       │   │   └── COMMANDNAMEENTITYNAME/
│               │       │   │       ├── COMMANDNAMEENTITYNAMEHandler.cs
│               │       │   │       ├── COMMANDNAMEENTITYNAMERequest.cs
│               │       │   │       ├── COMMANDNAMEENTITYNAMEResponse.cs
│               │       │   │       └── COMMANDNAMEENTITYNAMEValidator.cs
│               │       │   └── PROJECTNAME.Domain.csproj
│               │       ├── PROJECTNAME.Microservice.sln
│               │       └── PROJECTNAME.WebApi/
│               │           ├── Controllers/
│               │           │   └── ENTITYNAMEController.cs
│               │           ├── PROJECTNAME.WebApi.csproj
│               │           ├── PROJECTNAME.WebApi.http
│               │           ├── Program.cs
│               │           ├── appsettings.Development.json
│               │           └── appsettings.json
│               ├── Liquid.WorkerService.Project/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.WorkerService/
│               │       ├── PROJECTNAME.WorkerService.csproj
│               │       ├── Program.cs
│               │       ├── Worker.cs
│               │       ├── appsettings.Development.json
│               │       └── appsettings.json
│               └── Liquid.WorkerService.Solution/
│                   ├── .template.config/
│                   │   └── template.json
│                   └── src/
│                       ├── PROJECTNAME.Domain/
│                       │   ├── Entities/
│                       │   │   └── ENTITYNAME.cs
│                       │   ├── Handlers/
│                       │   │   └── COMMANDNAMEENTITYNAME/
│                       │   │       ├── COMMANDNAMEENTITYNAMEHandler.cs
│                       │   │       ├── COMMANDNAMEENTITYNAMERequest.cs
│                       │   │       ├── COMMANDNAMEENTITYNAMEResponse.cs
│                       │   │       └── COMMANDNAMEENTITYNAMEValidator.cs
│                       │   └── PROJECTNAME.Domain.csproj
│                       ├── PROJECTNAME.Microservice.sln
│                       └── PROJECTNAME.WorkerService/
│                           ├── PROJECTNAME.WorkerService.csproj
│                           ├── Program.cs
│                           ├── Worker.cs
│                           ├── appsettings.Development.json
│                           └── appsettings.json
└── test/
    ├── CodeCoverage.runsettings
    ├── Liquid.Cache.Memory.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   └── Liquid.Cache.Memory.Tests.csproj
    ├── Liquid.Cache.NCache.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   ├── Liquid.Cache.NCache.Tests.csproj
    │   ├── client.ncconf
    │   ├── config.ncconf
    │   └── tls.ncconf
    ├── Liquid.Cache.Redis.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   └── Liquid.Cache.Redis.Tests.csproj
    ├── Liquid.Cache.SqlServer.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   └── Liquid.Cache.SqlServer.Tests.csproj
    ├── Liquid.Core.Telemetry.ElasticApm.Tests/
    │   ├── Extensions/
    │   │   └── IServiceCollectionExtension.cs
    │   ├── IApplicationBuilderExtensionsTests.cs
    │   ├── IServiceCollectionExtensionsTests.cs
    │   ├── Liquid.Core.Telemetry.ElasticApm.Tests.csproj
    │   ├── LiquidElasticApmInterceptorTests.cs
    │   ├── LiquidElasticApmTelemetryBehaviorTests.cs
    │   ├── Mocks/
    │   │   ├── CommandHandlerMock.cs
    │   │   ├── IMockService.cs
    │   │   ├── MockService.cs
    │   │   ├── RequestMock.cs
    │   │   └── ResponseMock.cs
    │   └── Settings/
    │       ├── ConfigurationSettings.cs
    │       ├── ElasticApmSettings.cs
    │       └── IElasticApmSettings.cs
    ├── Liquid.Core.Tests/
    │   ├── Cache/
    │   │   ├── IServiceCollectionExtensionTests.cs
    │   │   └── LiquidCacheTests.cs
    │   ├── CommandHandlers/
    │   │   ├── Test1/
    │   │   │   ├── Test1Command.cs
    │   │   │   ├── Test1CommandHandler.cs
    │   │   │   └── Test1Response.cs
    │   │   └── Test2/
    │   │       ├── Test2Command.cs
    │   │       ├── Test2CommandHandler.cs
    │   │       ├── Test2CommandValidator.cs
    │   │       └── Test2Response.cs
    │   ├── Core/
    │   │   ├── IServiceCollectionLiquidExtensionTest.cs
    │   │   ├── LiquidContextNotificationsTest.cs
    │   │   ├── LiquidContextTest.cs
    │   │   ├── LiquidJsonSerializerTest.cs
    │   │   ├── LiquidSerializerProviderTest.cs
    │   │   ├── LiquidTelemetryInterceptorTest.cs
    │   │   ├── LiquidXmlSerializerTest.cs
    │   │   └── LocalizationTest.cs
    │   ├── Domain/
    │   │   └── RequestHandlerTest.cs
    │   ├── Liquid.Core.Tests.csproj
    │   ├── Messaging/
    │   │   ├── IServiceCollectionExtensionTest.cs
    │   │   ├── LiquidBackgroundServiceTest.cs
    │   │   ├── LiquidContextDecoratorTest.cs
    │   │   ├── LiquidCultureDecoratorTest.cs
    │   │   └── LiquidScopedLoggingDecoratorTest.cs
    │   ├── Mocks/
    │   │   ├── AnotherTestEntity.cs
    │   │   ├── CommandHandlerMock.cs
    │   │   ├── CommandRequestMock.cs
    │   │   ├── EntityMock.cs
    │   │   ├── IMockService.cs
    │   │   ├── InMemoryRepository.cs
    │   │   ├── MockInterceptService.cs
    │   │   ├── MockSerializeObject.cs
    │   │   ├── MockService.cs
    │   │   ├── MockSettings.cs
    │   │   ├── MockType.cs
    │   │   ├── TestEntity.cs
    │   │   └── WorkerMock.cs
    │   ├── Repository/
    │   │   └── LiquidUnitOfWorkTests.cs
    │   ├── appsettings.json
    │   ├── client.ncconf
    │   ├── config.ncconf
    │   ├── localization.en-US.json
    │   ├── localization.es-ES.json
    │   ├── localization.json
    │   └── tls.ncconf
    ├── Liquid.Dataverse.Tests/
    │   ├── DataverseClientFactoryTests.cs
    │   ├── Liquid.Dataverse.Tests.csproj
    │   ├── LiquidDataverseTests.cs
    │   └── Usings.cs
    ├── Liquid.GenAi.OpenAi.Tests/
    │   ├── Liquid.GenAi.OpenAi.Tests.csproj
    │   └── OpenAiClientFactoryTests.cs
    ├── Liquid.Messaging.Kafka.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   ├── KafkaFactoryTest.cs
    │   ├── KafkaProducerTest.cs
    │   ├── Liquid.Messaging.Kafka.Tests.csproj
    │   ├── Mock/
    │   │   ├── HandlerMock/
    │   │   │   ├── MockCommandHandler.cs
    │   │   │   ├── MockRequest.cs
    │   │   │   └── MockValidator.cs
    │   │   ├── MessageMock.cs
    │   │   ├── WorkerMediatorMock.cs
    │   │   └── WorkerMock .cs
    │   └── kafkaConsumerTest.cs
    ├── Liquid.Messaging.RabbitMq.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   ├── Liquid.Messaging.RabbitMq.Tests.csproj
    │   ├── Mock/
    │   │   ├── HandlerMock/
    │   │   │   ├── MockCommandHandler.cs
    │   │   │   ├── MockRequest.cs
    │   │   │   └── MockValidator.cs
    │   │   ├── MessageMock.cs
    │   │   ├── WorkerMediatorMock.cs
    │   │   └── WorkerMock .cs
    │   ├── RabbitMqConsumerTest.cs
    │   └── RabbitMqProducerTest.cs
    ├── Liquid.Messaging.ServiceBus.Tests/
    │   ├── Liquid.Messaging.ServiceBus.Tests.csproj
    │   ├── Mock/
    │   │   └── EntityMock.cs
    │   ├── ServiceBusConsumerTest.cs
    │   ├── ServiceBusFactoryTest.cs
    │   ├── ServiceBusFactoryTests.cs
    │   └── ServiceBusProducerTest.cs
    ├── Liquid.Repository.EntityFramework.Tests/
    │   ├── Configurations/
    │   │   └── MockTypeConfiguration.cs
    │   ├── Entities/
    │   │   ├── MockEntity.cs
    │   │   └── MockSubEntity.cs
    │   ├── EntityFrameworkDataContextTests.cs
    │   ├── EntityFrameworkRepositoryTest.cs
    │   ├── Liquid.Repository.EntityFramework.Tests.csproj
    │   └── MockDbContext.cs
    ├── Liquid.Repository.Mongo.Tests/
    │   ├── IServiceCollectionExtensionsTests.cs
    │   ├── Liquid.Repository.Mongo.Tests.csproj
    │   ├── Mock/
    │   │   ├── AnotherTestEntity.cs
    │   │   ├── AsyncCursorMock.cs
    │   │   └── TestEntity.cs
    │   ├── MongoClientFactoryTests.cs
    │   ├── MongoDataContextTests.cs
    │   └── MongoRepositoryTests.cs
    ├── Liquid.Repository.OData.Tests/
    │   ├── GlobalUsings.cs
    │   ├── IServiceCollectionExtensionTests.cs
    │   ├── Liquid.Repository.OData.Tests.csproj
    │   ├── Mock/
    │   │   ├── AnotherTestEntity.cs
    │   │   ├── MockPeople.cs
    │   │   ├── MyMockHttpMessageHandler.cs
    │   │   └── TestEntity.cs
    │   ├── ODataClientFactoryTests.cs
    │   └── ODataRepositoryTests.cs
    ├── Liquid.Storage.AzureStorage.Tests/
    │   ├── BlobClientFactoryTests.cs
    │   ├── Liquid.Storage.AzureStorage.Tests.csproj
    │   ├── LiquidStorageAzureTests.cs
    │   └── Usings.cs
    └── Liquid.WebApi.Http.Tests/
        ├── Liquid.WebApi.Http.Tests.csproj
        ├── LiquidControllerBaseTest.cs
        ├── LiquidNotificationHelperTest.cs
        └── Mocks/
            ├── Handlers/
            │   ├── TestCaseQueryHandler.cs
            │   ├── TestCaseRequest.cs
            │   └── TestCaseResponse.cs
            ├── TestController.cs
            └── TestNotificationController.cs

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
[*.cs]

# CS8618: Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
dotnet_diagnostic.CS8618.severity = silent


================================================
FILE: .github/dco.yml
================================================
allowRemediationCommits:
  individual: true

================================================
FILE: .github/workflows/base-liquid-ci-and-cd.yml
================================================
# CI & CD workflow
name: CI/CD - Base Reusable CI & CD workflow used by Liquid Application Framework components

on:
  # Allows this workflow to be called by other workflows
  workflow_call:
    inputs:
      component_name:
        description: 'The component name to build'
        required: true
        type: string
    secrets:
      sonar_token:
        required: true
      nuget_token:
        required: false

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - name: Identify Job Type from workflow trigger event type
      run: |
        if [ "$GITHUB_EVENT_NAME" == "push" ]
        then
          echo "Starting CD Job: Build, Test, Analyze, Pack and Publish library to Nuget.org..."
        else
          echo "Starting CI Job: Build, Test and Analyze..."
        fi
    
    - name: (CI on PR) Checkout repo on Pull Request
      if: ${{ github.event_name == 'pull_request' }}
      uses: actions/checkout@v3
      with:
        ref: ${{github.event.pull_request.head.ref}}
        repository: ${{github.event.pull_request.head.repo.full_name}}
        fetch-depth: 0 # required to eliminate shallow clone warning in Sonarcloud analysis
        
    - name: (CI/CD) Checkout repo
      if: ${{ github.event_name != 'pull_request' }}
      uses: actions/checkout@v3
      with:
        fetch-depth: 0 # required to eliminate shallow clone warning in Sonarcloud analysis

    # required by sonarcloud scanner
    - name: (CI/CD) Setup Java JDK
      if: ${{ github.event_name != 'pull_request' || (github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]') }}
      uses: actions/setup-java@v3
      with:
        # The Java version to make available on the path. Takes a whole or semver Java version, or 1.x syntax (e.g. 1.8 => Java 8.x). Early access versions can be specified in the form of e.g. 14-ea, 14.0.0-ea, or 14.0.0-ea.28
        distribution: 'microsoft'
        java-version: 17.x
        
    - name: (CI/CD) Setup .NET Core SDK
      uses: actions/setup-dotnet@v2
      with:
        # SDK version to use. Examples: 2.2.104, 3.1, 3.1.x
        dotnet-version: | 
          3.1.x
          5.0.x
          6.0.x
          8.0.x
    # required by sonarcloud scanner
    - name: (CI/CD) Setup Sonar Scanner tool
      if: ${{ github.event_name != 'pull_request' || (github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]') }}
      run: dotnet tool install --global dotnet-sonarscanner

    - name: (CI/CD) Install Test Reporting Tool
      run: dotnet tool install --global dotnet-reportgenerator-globaltool

    - name: (CI/CD) Restore dependencies
      run: dotnet restore src/${{ inputs.component_name }}/${{ inputs.component_name }}.csproj

    - name: (CI/CD) Build and Analyze Project
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # Needed to get PR information, if any
        SONAR_TOKEN: ${{ secrets.sonar_token }}
        RUN_SONAR: ${{ github.event_name != 'pull_request' || (github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]') }}
      run: |
        if [ "$RUN_SONAR" == "true" ]
        then
          if [[ -d test/${{ inputs.component_name }}.Tests && -f test/${{ inputs.component_name }}.Tests/${{ inputs.component_name }}.Tests.csproj ]]
          then 
            dotnet sonarscanner begin /k:"${{ inputs.component_name }}" /o:"avanade-1" /d:sonar.login="${{ secrets.sonar_token }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.vstest.reportsPaths=$GITHUB_WORKSPACE/test/testresults/*.trx /d:sonar.coverageReportPaths=$GITHUB_WORKSPACE/test/coverlet/reports/SonarQube.xml
          else
            dotnet sonarscanner begin /k:"${{ inputs.component_name }}" /o:"avanade-1" /d:sonar.login="${{ secrets.sonar_token }}" /d:sonar.host.url="https://sonarcloud.io"
          fi
        fi
        
        dotnet build src/${{ inputs.component_name }}/${{ inputs.component_name }}.csproj --configuration Release --no-restore
        
        if [[ -d test/${{ inputs.component_name }}.Tests && -f test/${{ inputs.component_name }}.Tests/${{ inputs.component_name }}.Tests.csproj ]]
        then 
          dotnet test test/${{ inputs.component_name }}.Tests/${{ inputs.component_name }}.Tests.csproj --collect:"XPlat Code Coverage" --logger trx --results-directory $GITHUB_WORKSPACE/test/testresults
          reportgenerator -reports:$GITHUB_WORKSPACE/test/testresults/**/coverage.cobertura.xml -targetdir:$GITHUB_WORKSPACE/test/coverlet/reports -reporttypes:"SonarQube"
        fi
        
        if [ "$RUN_SONAR" == "true" ]
        then
          dotnet sonarscanner end /d:sonar.login="${{ secrets.sonar_token }}"
        fi

    - name: (CD) Nuget Pack & Push to Nuget.org
      if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
      run: |
        dotnet pack --no-build --configuration Release src/${{ inputs.component_name }}/${{ inputs.component_name }}.csproj --output .
        dotnet nuget push *.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.nuget_token }} --skip-duplicate
        


================================================
FILE: .github/workflows/liquid-ci-cd-cache-memory.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Cache.Memory component for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Cache.Memory/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Cache.Memory/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Cache.Memory
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_CACHE_MEMORY }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-cache-ncache.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Cache.NCache component for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Cache.NCache/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Cache.NCache/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Cache.NCache
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_CACHE_NCACHE }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-cache-redis.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Cache.Redis component for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Cache.Redis/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Cache.Redis/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Cache.Redis
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_CACHE_REDIS }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-cache-sqlserver.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Cache.SqlServer component for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Cache.SqlServer/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Cache.SqlServer/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Cache.SqlServer
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_CACHE_SQLSERVER }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-core-telemetry-elasticapm.yaml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Core.Telemetry.ElasticApm component for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Core.Telemetry.ElasticApm/**'
    
  pull_request:
    branches: [ main ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Core.Telemetry.ElasticApm/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Core.Telemetry.ElasticApm
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_ELASTICAPM }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-core.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Core component for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Core/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Core/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Core
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_CORE }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-dataverse.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Dataverse component for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Dataverse/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Dataverse/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Dataverse
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_DATAVERSE }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-genai-openai.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.GenAi.OpenAi component for Liquid Application Framework

on:
  push:
    branches: [ main ]
    paths:
    - 'src/Liquid.GenAi.OpenAi/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.GenAi.OpenAi/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.GenAi.OpenAi
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_OPENAI }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-http.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.WebApi.Http component for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.WebApi.Http/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.WebApi.Http/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.WebApi.Http
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_HTTP }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-messaging-kafka.yaml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Messaging.Kafka cartridge for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Messaging.Kafka/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Messaging.Kafka/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Messaging.Kafka
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_KAFKA }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-messaging-rabbitmq.yaml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Messaging.RabbitMq cartridge for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Messaging.RabbitMq/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Messaging.RabbitMq/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Messaging.RabbitMq
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_RABBIT }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-messaging-servicebus.yaml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Messaging.ServiceBus cartridge for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Messaging.ServiceBus/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Messaging.ServiceBus/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Messaging.ServiceBus
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_SB }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-repository-entityframework.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Repository.EntityFramework Cartridge for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Repository.EntityFramework/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Repository.EntityFramework/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Repository.EntityFramework
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_EF }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-repository-mongodb.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Repository.Mongo Cartridge for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Repository.Mongo/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Repository.Mongo/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Repository.Mongo
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_MONGO }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-repository-odata.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Repository.OData Cartridge for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Repository.OData/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Repository.OData/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Repository.OData
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_ODATA }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-storage-azurestorage.yml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Storage.AzureStorage component for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'src/Liquid.Storage.AzureStorage/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'src/Liquid.Storage.AzureStorage/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  call-reusable-build-workflow:
    uses: Avanade/Liquid-Application-Framework/.github/workflows/base-liquid-ci-and-cd.yml@main
    with:
      component_name: Liquid.Storage.AzureStorage
    secrets:
      sonar_token: ${{ secrets.SONAR_TOKEN_STORAGE }}
      nuget_token: ${{ secrets.PUBLISH_TO_NUGET_ORG }}


================================================
FILE: .github/workflows/liquid-ci-cd-templates.yaml
================================================
# CI & CD workflow
name: CI/CD - Liquid.Templates for Liquid Application Framework

on:
  push:
    branches: [ main, releases/v2.X.X, releases/v6.X.X ]
    paths:
    - 'templates/src/Liquid.Templates/**'
    
  pull_request:
    branches: [ main, releases/** ]
    types: [opened, synchronize, reopened]
    paths:
    - 'templates/src/Liquid.Templates/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - name: Job Type
      run: |
        if [$GITHUB_EVENT_NAME == 'push']
        then
          echo "Starting CD Job: Build, Test, Analyze, Pack and Publish library to Nuget.org..."
        else
          echo "Starting CI Job: Build, Test and Analyze..."
        fi
    
    - name: (CI) Checkout repo on Pull Request
      if: ${{ github.event_name == 'pull_request' }}
      uses: actions/checkout@v2
      with:
        ref: ${{github.event.pull_request.head.ref}}
        repository: ${{github.event.pull_request.head.repo.full_name}}
        fetch-depth: 0 # required to eliminate shallow clone warning in Sonarcloud analysis
        
    - name: (CI/CD) Checkout repo
      if: ${{ github.event_name != 'pull_request' }}
      uses: actions/checkout@v2
      with:
        fetch-depth: 0 # required to eliminate shallow clone warning in Sonarcloud analysis
        
    - name: (CI/CD) Setup .NET Core SDK
      uses: actions/setup-dotnet@v1.7.2
      with:
        # SDK version to use. Examples: 2.2.104, 3.1, 3.1.x
        dotnet-version: 3.1.x

    - name: (CI/CD) Restore dependencies
      run: dotnet restore templates/src/Liquid.Templates/Liquid.Templates.csproj

    - name: (CI/CD) Build and Analyze Project
      run: |
        dotnet build templates/src/Liquid.Templates/Liquid.Templates.csproj --configuration Release --no-restore
        
    - name: (CD) Nuget Pack & Push to Nuget.org
      if: ${{ github.event_name == 'push' }}
      run: |
        dotnet pack --no-build --configuration Release templates/src/Liquid.Templates/Liquid.Templates.csproj --output .
        dotnet nuget push *.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{secrets.PUBLISH_TO_NUGET_ORG}} --skip-duplicate


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
**/Properties/launchSettings.json

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk 
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output 
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder 
.mfractor/


================================================
FILE: CONTRIBUTING.md
================================================
# How to contribute

This project welcomes contributions and suggestions. By contributing, you confirm that you have the right to, and actually do, grant us the rights to use your contribution. More information below.

Please feel free to contribute code, ideas, improvements, and patches - we've added some general guidelines and information below, and you can propose changes to this document in a pull request.

This project has adopted the [Contributor Covenant Code of Conduct](https://avanade.github.io/code-of-conduct/).

One of the easiest ways to contribute is to participate in discussions on GitHub issues. You can also contribute by submitting pull requests with code changes.

## Rights to your contributions
By contributing to this project, you:
- Agree that you have authored 100% of the content
- Agree that you have the necessary rights to the content
- Agree that you have received the necessary permissions from your employer to make the contributions (if applicable)
- Agree that the content you contribute may be provided under the Project license(s)
- Agree that, if you did not author 100% of the content, the appropriate licenses and copyrights have been added along with any other necessary attribution.

## Code of Conduct
This project, and people participating in it, are governed by our [code of conduct](https://avanade.github.io/code-of-conduct/). By taking part, we expect you to try your best to uphold this code of conduct. If you have concerns about unacceptable behaviour, please contact the community leaders responsible for enforcement at
[ospo@avanade.com](ospo@avanade.com).

## Developer Certificate of Origin (DCO)
Avanade asks that all commits sign the [Developer Certificate of Origin](https://developercertificate.org/), to ensure that every developer is confirming that they have the right to upload the code they submit.

Sign-offs are added to the commit. Git has a  `-s` command line option to append this automatically to your commit message, and [sign offs can be added through the web interface](https://github.blog/changelog/2022-06-08-admins-can-require-sign-off-on-web-based-commits/).

## General feedback and discussions?

Start a discussion on the [repository issue tracker](https://github.com/Avanade/Liquid-Application-Framework/issues).

## Bugs and feature requests?

For non-security related bugs, log a new issue in the GitHub repository.

## Reporting security issues and bugs

Security issues and bugs should be reported privately, via email, to a repository admin. You should receive a response within 24 hours. We also ask you to file via our [security disclosure](https://github.com/Avanade/avanade-template/blob/main/SECURITY.md) policy.

## Contributing code and content

We accept fixes and features! Here are some resources to help you get started on how to contribute code or new content.

* ["Help wanted" issues](https://github.com/Avanade/Liquid-Application-Framework/labels/help%20wanted) - these issues are up for grabs. Comment on an issue if you want to create a fix.
* ["Good first issue" issues](https://github.com/Avanade/Liquid-Application-Framework/labels/good%20first%20issue) - we think these are a good for newcomers.

### Identifying the scale

If you would like to contribute to one of our repositories, first identify the scale of what you would like to contribute. If it is small (grammar/spelling or a bug fix) feel free to start working on a fix. If you are submitting a feature or substantial code contribution, please discuss it with the team and ensure it follows the product roadmap. You might also read these two blogs posts on contributing code: [Open Source Contribution Etiquette](http://tirania.org/blog/archive/2010/Dec-31.html) by Miguel de Icaza and [Don't "Push" Your Pull Requests](https://www.igvita.com/2011/12/19/dont-push-your-pull-requests/) by Ilya Grigorik. All code submissions will be rigorously reviewed and tested by the team, and only those that meet an extremely high bar for both quality and design/roadmap appropriateness will be merged into the source.

### Submitting a pull request

If you don't know what a pull request is read this article: https://help.github.com/articles/using-pull-requests. **Make sure the repository can build and all tests pass.** Familiarize yourself with the project workflow and our coding conventions. The coding, style, and general engineering guidelines are below on the topic [Engineering guidelines](#Engineering-guidelines).

### Feedback

Your pull request will now go through **extensive checks** by the subject matter experts on our team. Please be patient. Update your pull request according to feedback until it is approved by one of the ASP.NET team members. After that, one of our team members may adjust the branch you merge into based on the expected release schedule.

# Engineering Guidelines

## General

We try to hold our code to the higher standards. Every pull request must and will be scrutinized in order to maintain our standard. Every pull request should improve on quality, therefore any PR that decreases the quality will not be approved.

We follow coding best practices to make sure the codebase is clean and newcomers and seniors alike will understand the code. This document provides a guideline that should make most of our practices clear, but gray areas may arise and we might make a judgment call on your code, so, when in doubt, question ahead. Issues are a wonderful tool that should be used by every contributor to help us drive the project.

All the rules here are mandatory; however, we do not claim to hold all the answers - you can raise a question over any rule any time (through issues) and we'll discuss it.

Finally, this is a new project and we are still learning how to work on a Open Source project. Please bear with us while we learn how to do it best.

## External dependencies

This refers to dependencies on projects (i.e. NuGet packages) outside of the repo. Every dependency we add enlarges the package, and might have copyright issues that we may need to address.

Therefore, adding or updating any external dependency requires approval. This can be discussed preferrabily on the issue related to the PR or on the PR itself.

## Code reviews and checkins

To help ensure that only the highest quality code makes its way into the project, please submit all your code changes to GitHub as PRs. This includes runtime code changes, unit test updates, and updates to official samples. For example, sending a PR for just an update to a unit test might seem like a waste of time but the unit tests are just as important as the product code and as such, reviewing changes to them is also just as important. This also helps create visibility for your changes so that others can observe what is going on.

The advantages are numerous: improving code quality, more visibility on changes and their potential impact, avoiding duplication of effort, and creating general awareness of progress being made in various areas.

To commit the PR to the repo either use preferably GitHub's "Squash and Merge" button on the main PR page, or do a typical push that you would use with Git (e.g. local pull, rebase, merge, push).

## Branching Strategy

We are using [Trunk-Based branching strategy](https://trunkbaseddevelopment.com/).

## Assembly naming pattern

The general naming pattern is `Liquid.<area>.<subarea>`.

## Unit tests

We use NUnit for all unit testing. Additionally, you can use NSubstitute for mocks and such, and leverage AutoFixture for anonymous instances.

## Code Style

### General

The most general guideline is that we use all the VS default settings in terms of code formatting, except that we put System namespaces before other namespaces (this used to be the default in VS, but it changed in a more recent version of VS). Also, we are leveraging StyleCop to add to code standardization.

1. Use four spaces of indentation (no tabs)
1. Use `_camelCase` for private fields
1. Avoid `this`. unless absolutely necessary
1. Always specify member visibility, even if it's the default (i.e. `private string _foo;` not `string _foo;`)
1. Open-braces (`{`) go on a new line
1. Use any language features available to you (expression-bodied members, throw expressions, tuples, etc.) as long as they make for readable, manageable code.
This is pretty bad: `public (int, string) GetData(string filter) => (Data.Status, Data.GetWithFilter(filter ?? throw new ArgumentNullException(nameof(filter))));`

### Usage of the var keyword

The var keyword is to be used as much as the compiler will allow. For example, these are correct:

```csharp
var fruit = "Lychee";
var fruits = new List<Fruit>();
var flavor = fruit.GetFlavor();
string fruit = null; // can't use "var" because the type isn't known (though you could do (string)null, don't!)
const string expectedName = "name"; // can't use "var" with const
```

The following are incorrect:

```csharp
string fruit = "Lychee";
List<Fruit> fruits = new List<Fruit>();
FruitFlavor flavor = fruit.GetFlavor();
```

### Use C# type keywords in favor of .NET type names

When using a type that has a C# keyword the keyword is used in favor of the .NET type name. For example, these are correct:

```csharp
public string TrimString(string s) {
    return string.IsNullOrEmpty(s)
        ? null
        : s.Trim();
}


var intTypeName = nameof(Int32); // can't use C# type keywords with nameof
```

The following are incorrect:

```csharp
public String TrimString(String s) {
    return String.IsNullOrEmpty(s)
        ? null
        : s.Trim();
}
```

### Cross-platform coding

Our frameworks should work on CoreCLR, which supports multiple operating systems. Don't assume we only run (and develop) on Windows. Code should be sensitive to the differences between OS's. Here are some specifics to consider.

#### Line breaks

Windows uses \r\n, OS X and Linux uses \n. When it is important, use Environment.NewLine instead of hard-coding the line break.

Note: this may not always be possible or necessary.

Be aware that these line-endings may cause problems in code when using @"" text blocks with line breaks.

#### Environment Variables

OS's use different variable names to represent similar settings. Code should consider these differences.

For example, when looking for the user's home directory, on Windows the variable is USERPROFILE but on most Linux systems it is HOME.

```csharp
var homeDir = Environment.GetEnvironmentVariable("USERPROFILE")
                  ?? Environment.GetEnvironmentVariable("HOME");
```

#### File path separators

Windows uses \ and OS X and Linux use / to separate directories. Instead of hard-coding either type of slash, use Path.Combine() or Path.DirectorySeparatorChar.

If this is not possible (such as in scripting), use a forward slash. Windows is more forgiving than Linux in this regard.

### When to use internals vs. public and when to use InternalsVisibleTo

As a modern set of frameworks, usage of internal types and members is allowed, but discouraged.

`InternalsVisibleTo` is used only to allow a unit test to test internal types and members of its runtime assembly. We do not use `InternalsVisibleTo` between two runtime assemblies.

If two runtime assemblies need to share common helpers then we will use a "shared source" solution with build-time only packages.

If two runtime assemblies need to call each other's APIs, the APIs must be public. If we need it, it is likely that our customers need it.

### Async method patterns

By default all async methods must have the Async suffix. There are some exceptional circumstances where a method name from a previous framework will be grandfathered in.

Passing cancellation tokens is done with an optional parameter with a value of `default(CancellationToken)`, which is equivalent to `CancellationToken.None` (one of the few places that we use optional parameters). The main exception to this is in web scenarios where there is already an `HttpContext` being passed around, in which case the context has its own cancellation token that can be used when needed.

Sample async method:

```csharp
public Task GetDataAsync(
    QueryParams query,
    int maxData,
    CancellationToken cancellationToken = default(CancellationToken))
{
    ...
}
```

### Extension method patterns

The general rule is: if a regular static method would suffice, avoid extension methods.

Extension methods are often useful to create chainable method calls, for example, when constructing complex objects, or creating queries.

Internal extension methods are allowed, but bear in mind the previous guideline: ask yourself if an extension method is truly the most appropriate pattern.

The namespace of the extension method class should generally be the namespace that represents the functionality of the extension method, as opposed to the namespace of the target type. One common exception to this is that the namespace for middleware extension methods is normally always the same is the namespace of IAppBuilder.

The class name of an extension method container (also known as a "sponsor type") should generally follow the pattern of `<Feature>Extensions`, `<Target><Feature>Extensions`, or `<Feature><Target>Extensions`. For example:

```csharp
namespace Food {
    class Fruit { ... }
}

namespace Fruit.Eating {
    class FruitExtensions { public static void Eat(this Fruit fruit); }
  OR
    class FruitEatingExtensions { public static void Eat(this Fruit fruit); }
  OR
    class EatingFruitExtensions { public static void Eat(this Fruit fruit); }
}
```

When writing extension methods for an interface the sponsor type name must not start with an I.

### Analyzers

Code style is usually enforced by Analyzers; any change to those rules must be discussed with the team before it's made. Also, any pull request that changes analyzers rules and commits code will be reproved immediately.

### Good practices

The items below point out the good practices that all code should follow.

#### Zero warnings

Compiler warnings should usually be dealt with by correcting the code. Only discussed warnings may be allowed to be marked as exceptions.

#### Inner documentation

All public members must be documented. Documentation should clarify the purpose and usage of code elements, so comments such as FooManager: "manages foo" will be rejected. Classes that implement interface may use comment inheritance `/// <inheritdoc/>`, but use it sparingly.

Try to use examples and such in classes to enable users to understand them more easily.

If you don't believe that a class or method deserves to be documents, ask yourself if it can be marked as non-public.

If should comment every non-public class or member that is complex enough.

All comments should be read-proof.

> **Note**: Public means callable by a customer, so it includes protected APIs. However, some public APIs might still be "for internal use only" but need to be public for technical reasons. We will still have doc comments for these APIs but they will be documented as appropriate.

## Tests

- Tests need to be provided for every bug/feature that is completed.
- Tests only need to be present for issues that need to be verified by QA (for example, not tasks)
- Pull requests must strive to not reduce code coverage.
- If there is a scenario that is far too hard to test there does not need to be a test for it.
  - "Too hard" is determined by the team as a whole.

### Unit tests and functional tests

#### Assembly naming

The unit tests for the `Liquid.Fruit` assembly live in the `Liquid.Fruit.Tests` assembly.

The functional tests for the `Liquid.Fruit` assembly live in the `Liquid.Fruit.AcceptanceTests` assembly.

In general there should be exactly one unit test assembly for each product runtime assembly. In general there should be one functional test assembly per repo. Exceptions can be made for both.

#### Unit test class naming

Test class names end with Test and live in the same namespace as the class being tested. For example, the unit tests for the Liquid.Fruit.Banana class would be in a Liquid.Fruit.BananaTest class in the test assembly.

#### Unit test method naming

Unit test method names must be descriptive about what is being tested, under what conditions, and what the expectations are. Pascal casing and underscores can be used to improve readability. We will try to follow [Roy Osherove's guidelines](https://osherove.com/blog/2005/4/3/naming-standards-for-unit-tests.html), therefore, the following test names are correct:
`GetAttachmentWhenItWasInsertedReturnsInsertedData`
`GetWhenAttachmentDoesntExistsThrows`

> Notice how we use When and Returns / Throws to split the name into recognizable parts.

The following test names are incorrect:

```csharp
Test1
Constructor
FormatString
GetData
```

#### Unit test structure

The contents of every unit test should be split into three distinct stages, optionally separated by these comments:

```csharp
// Arrange
// Act
// Assert
```

The crucial thing here is that the Act stage is exactly one statement. That one statement is nothing more than a call to the one method that you are trying to test. Keeping that one statement as simple as possible is also very important. For example, this is not ideal:

```csharp
int result = myObj.CallSomeMethod(GetComplexParam1(), GetComplexParam2(), GetComplexParam3());
```

This style is not recommended because way too many things can go wrong in this one statement. All the `GetComplexParamN()` calls can throw for a variety of reasons unrelated to the test itself. It is thus unclear to someone running into a problem why the failure occurred.

The ideal pattern is to move the complex parameter building into the Arrange section:

```csharp
// Arrange
P1 p1 = GetComplexParam1();
P2 p2 = GetComplexParam2();
P3 p3 = GetComplexParam3();

// Act
int result = myObj.CallSomeMethod(p1, p2, p3);

// Assert
Assert.AreEqual(1234, result);
```

Now the only reason the line with `CallSomeMethod()` can fail is if the method itself blew up. This is especially important when you're using helpers such as ExceptionHelper, where the delegate you pass into it must fail for exactly one reason.

#### Use NUnit's plethora of built-in assertions

NUnit includes many kinds of assertions – please use the most appropriate one for your test. This will make the tests a lot more readable and also allow the test runner report the best possible errors (whether it's local or the CI machine). For example, these are bad:

```csharp
Assert.AreEqual(true, someBool);

Assert.True("abc123" == someString);

Assert.True(list1.Length == list2.Length);

for (int i = 0; i < list1.Length; i++) {
    Assert.True(
        String.Equals
            list1[i],
            list2[i],
            StringComparison.OrdinalIgnoreCase));
}
```

These are good:

```csharp
Assert.True(someBool);

Assert.AreEqual("abc123", someString);

// built-in collection assertions!
Assert.AreEqual(list1, list2, StringComparer.OrdinalIgnoreCase);
```

It's also possible (and recommended) to use the new ContraintModel of NUnit:

```csharp
Assert.That(condition, Is.True);

int[] array = new int[] { 1, 2, 3 };
Assert.That(array, Has.Exactly(1).EqualTo(3));
Assert.That(array, Has.Exactly(2).GreaterThan(1));
Assert.That(array, Has.Exactly(3).LessThan(100));
```

#### Parallel tests

By default all unit test assemblies should run in parallel mode, which is the default. Unit tests shouldn't depend on any shared state, and so should generally be runnable in parallel. If the tests fail in parallel, the first thing to do is to figure out why; do not just disable parallel tests!

For functional tests it is reasonable to disable parallel tests.

### Use only complete words or common/standard abbreviations in public APIs

Public namespaces, type names, member names, and parameter names must use complete words or common/standard abbreviations.

These are correct:

```csharp
public void AddReference(AssemblyReference reference);
public EcmaScriptObject SomeObject { get; }
```

These are incorrect:

```csharp
public void AddRef(AssemblyReference ref);
public EcmaScriptObject SomeObj { get; }
```

Note that abbreviations still follow camel/pascal casing. Use `Api` instead of `API` and `Ecma` instead of `ECMA`, to make your code more legible.

Avoid abbreviations with only two characters because of the rule above.


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2021 Avanade

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: Liquid.Adapters.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.6.34202.202
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Adapter.Dataverse", "src\Liquid.Adapter.Dataverse\Liquid.Adapter.Dataverse.csproj", "{02191AB8-D13C-4CCC-8455-08813FB0C9C3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Adapter.Dataverse.Tests", "test\Liquid.Adapter.Dataverse.Tests\Liquid.Adapter.Dataverse.Tests.csproj", "{90D60966-6004-4705-907D-780503EBC141}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dataverse", "Dataverse", "{0E973865-5B87-43F2-B513-CD1DA96A2A3A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AzureStorage", "AzureStorage", "{81CB75D9-FC31-4533-9A2D-C9277DD4A33E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Adapter.AzureStorage", "src\Liquid.Adapter.AzureStorage\Liquid.Adapter.AzureStorage.csproj", "{E21AF05A-738E-4DA2-AEEE-9900D7534F7C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Liquid.Adapter.AzureStorage.Tests", "test\Liquid.Adapter.AzureStorage.Tests\Liquid.Adapter.AzureStorage.Tests.csproj", "{A2A7E164-98DF-4953-9679-B35E109E8990}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{02191AB8-D13C-4CCC-8455-08813FB0C9C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{02191AB8-D13C-4CCC-8455-08813FB0C9C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{02191AB8-D13C-4CCC-8455-08813FB0C9C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{02191AB8-D13C-4CCC-8455-08813FB0C9C3}.Release|Any CPU.Build.0 = Release|Any CPU
		{90D60966-6004-4705-907D-780503EBC141}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{90D60966-6004-4705-907D-780503EBC141}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{90D60966-6004-4705-907D-780503EBC141}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{90D60966-6004-4705-907D-780503EBC141}.Release|Any CPU.Build.0 = Release|Any CPU
		{E21AF05A-738E-4DA2-AEEE-9900D7534F7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{E21AF05A-738E-4DA2-AEEE-9900D7534F7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{E21AF05A-738E-4DA2-AEEE-9900D7534F7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{E21AF05A-738E-4DA2-AEEE-9900D7534F7C}.Release|Any CPU.Build.0 = Release|Any CPU
		{A2A7E164-98DF-4953-9679-B35E109E8990}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{A2A7E164-98DF-4953-9679-B35E109E8990}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{A2A7E164-98DF-4953-9679-B35E109E8990}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{A2A7E164-98DF-4953-9679-B35E109E8990}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{02191AB8-D13C-4CCC-8455-08813FB0C9C3} = {0E973865-5B87-43F2-B513-CD1DA96A2A3A}
		{90D60966-6004-4705-907D-780503EBC141} = {0E973865-5B87-43F2-B513-CD1DA96A2A3A}
		{E21AF05A-738E-4DA2-AEEE-9900D7534F7C} = {81CB75D9-FC31-4533-9A2D-C9277DD4A33E}
		{A2A7E164-98DF-4953-9679-B35E109E8990} = {81CB75D9-FC31-4533-9A2D-C9277DD4A33E}
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {8105640B-39D2-4FFE-8BBD-D8E37F2A070D}
	EndGlobalSection
EndGlobal


================================================
FILE: Liquid.Application.Framework.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34408.163
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Core", "src\Liquid.Core\Liquid.Core.csproj", "{C33A89FC-4F4D-4274-8D0F-29456BA8F76B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{EE1C8DCF-EBC3-43B8-9E9C-433CDD57FB30}"
	ProjectSection(SolutionItems) = preProject
		test\CodeCoverage.runsettings = test\CodeCoverage.runsettings
		.github\workflows\liquid-core-ci-cd-publish.yml = .github\workflows\liquid-core-ci-cd-publish.yml
		logo.png = logo.png
		nuget.config = nuget.config
	EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Core.Tests", "test\Liquid.Core.Tests\Liquid.Core.Tests.csproj", "{69B34B22-198D-4BD0-AAFC-39A90F9ADAC2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Core.Telemetry.ElasticApm", "src\Liquid.Core.Telemetry.ElasticApm\Liquid.Core.Telemetry.ElasticApm.csproj", "{AD354CF6-C132-4B5D-944D-0DFE21509781}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Core.Telemetry.ElasticApm.Tests", "test\Liquid.Core.Telemetry.ElasticApm.Tests\Liquid.Core.Telemetry.ElasticApm.Tests.csproj", "{8863A92B-E1A3-4203-8C08-C017E5B3D2CC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Cache.Memory", "src\Liquid.Cache.Memory\Liquid.Cache.Memory.csproj", "{C7DD9DB1-E287-4886-AA44-159C0AB4F041}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Cache.NCache", "src\Liquid.Cache.NCache\Liquid.Cache.NCache.csproj", "{74D0605F-5466-423D-B5ED-E2C104BB3180}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Cache.Redis", "src\Liquid.Cache.Redis\Liquid.Cache.Redis.csproj", "{6508D946-4B74-4629-B819-4C2C3F7AF8B5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Cache.SqlServer", "src\Liquid.Cache.SqlServer\Liquid.Cache.SqlServer.csproj", "{F24D06BE-E608-4DFD-B8F6-B02F87062323}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Cache.Memory.Tests", "test\Liquid.Cache.Memory.Tests\Liquid.Cache.Memory.Tests.csproj", "{28747B1E-0784-4B7B-AE48-F5AD3C937262}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Cache.NCache.Tests", "test\Liquid.Cache.NCache.Tests\Liquid.Cache.NCache.Tests.csproj", "{08A826AA-2C2E-4E21-A3D8-60BF8E57772E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Cache.SqlServer.Tests", "test\Liquid.Cache.SqlServer.Tests\Liquid.Cache.SqlServer.Tests.csproj", "{ED3C04BC-3DEF-4B5C-BF91-EE8F5C38F8E4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Cache.Redis.Tests", "test\Liquid.Cache.Redis.Tests\Liquid.Cache.Redis.Tests.csproj", "{2E8F3332-545A-4454-9F75-1498A9B7B9BF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Repository.Mongo.Tests", "test\Liquid.Repository.Mongo.Tests\Liquid.Repository.Mongo.Tests.csproj", "{400BD703-3E6F-41E6-929B-5FD888EFD00A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Repository.EntityFramework.Tests", "test\Liquid.Repository.EntityFramework.Tests\Liquid.Repository.EntityFramework.Tests.csproj", "{73A5230F-0A90-4D2C-8D5E-D95C40DEF310}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Repository.EntityFramework", "src\Liquid.Repository.EntityFramework\Liquid.Repository.EntityFramework.csproj", "{376DEF77-CBE3-452A-890C-FF2728D90322}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Repository.Mongo", "src\Liquid.Repository.Mongo\Liquid.Repository.Mongo.csproj", "{D7B0D4F0-756B-4038-9DB2-0A1AD65ED72A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Messaging.ServiceBus.Tests", "test\Liquid.Messaging.ServiceBus.Tests\Liquid.Messaging.ServiceBus.Tests.csproj", "{A61C6606-A884-47BC-BD9D-DD9A3E4BDCDA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Messaging.ServiceBus", "src\Liquid.Messaging.ServiceBus\Liquid.Messaging.ServiceBus.csproj", "{C00DA46C-9614-4C42-AA89-64A3520F4EE7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Messaging.Kafka", "src\Liquid.Messaging.Kafka\Liquid.Messaging.Kafka.csproj", "{605AB027-CB0A-4B8E-8E20-55258369C497}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Messaging.Kafka.Tests", "test\Liquid.Messaging.Kafka.Tests\Liquid.Messaging.Kafka.Tests.csproj", "{0D7F5E5F-348D-4606-9CE4-F2FB220E12BA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Messaging.RabbitMq", "src\Liquid.Messaging.RabbitMq\Liquid.Messaging.RabbitMq.csproj", "{6CFF2DEC-50E9-417C-A6E1-A0EFCD1EB94C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Messaging.RabbitMq.Tests", "test\Liquid.Messaging.RabbitMq.Tests\Liquid.Messaging.RabbitMq.Tests.csproj", "{40E39D18-CEDF-4BA1-8D9D-60DECAA30C9C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.WebApi.Http", "src\Liquid.WebApi.Http\Liquid.WebApi.Http.csproj", "{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.WebApi.Http.Tests", "test\Liquid.WebApi.Http.Tests\Liquid.WebApi.Http.Tests.csproj", "{DED98401-EAED-4BE0-84A9-494D77B0E70D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Storage.AzureStorage", "src\Liquid.Storage.AzureStorage\Liquid.Storage.AzureStorage.csproj", "{F599C512-7224-4A27-A474-3AA9510D2A14}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Dataverse", "src\Liquid.Dataverse\Liquid.Dataverse.csproj", "{CD31C6F6-F8DD-4B56-B08C-D9E8D5BA3E73}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Dataverse.Tests", "test\Liquid.Dataverse.Tests\Liquid.Dataverse.Tests.csproj", "{5B0DC38B-5BC9-4DAC-8527-8D1C33E97247}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Storage.AzureStorage.Tests", "test\Liquid.Storage.AzureStorage.Tests\Liquid.Storage.AzureStorage.Tests.csproj", "{53341B04-6D30-4137-943B-20D8706351E8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.GenAi.OpenAi", "src\Liquid.GenAi.OpenAi\Liquid.GenAi.OpenAi.csproj", "{CB199ED6-3D1D-4E12-A15F-597B6A0BA564}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Repository.OData", "src\Liquid.Repository.OData\Liquid.Repository.OData.csproj", "{60AE2AF5-D84C-4A8B-AA36-FD58A6A423D7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Liquid.Repository.OData.Tests", "test\Liquid.Repository.OData.Tests\Liquid.Repository.OData.Tests.csproj", "{70A43D24-4905-4A16-8CE2-165F73243B8D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Liquid.GenAi.OpenAi.Tests", "test\Liquid.GenAi.OpenAi.Tests\Liquid.GenAi.OpenAi.Tests.csproj", "{ECDF1DD3-073D-4708-A20B-1F0F2D663065}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{C33A89FC-4F4D-4274-8D0F-29456BA8F76B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{C33A89FC-4F4D-4274-8D0F-29456BA8F76B}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{C33A89FC-4F4D-4274-8D0F-29456BA8F76B}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{C33A89FC-4F4D-4274-8D0F-29456BA8F76B}.Release|Any CPU.Build.0 = Release|Any CPU
		{69B34B22-198D-4BD0-AAFC-39A90F9ADAC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{69B34B22-198D-4BD0-AAFC-39A90F9ADAC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{69B34B22-198D-4BD0-AAFC-39A90F9ADAC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{69B34B22-198D-4BD0-AAFC-39A90F9ADAC2}.Release|Any CPU.Build.0 = Release|Any CPU
		{AD354CF6-C132-4B5D-944D-0DFE21509781}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AD354CF6-C132-4B5D-944D-0DFE21509781}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AD354CF6-C132-4B5D-944D-0DFE21509781}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AD354CF6-C132-4B5D-944D-0DFE21509781}.Release|Any CPU.Build.0 = Release|Any CPU
		{8863A92B-E1A3-4203-8C08-C017E5B3D2CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{8863A92B-E1A3-4203-8C08-C017E5B3D2CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{8863A92B-E1A3-4203-8C08-C017E5B3D2CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{8863A92B-E1A3-4203-8C08-C017E5B3D2CC}.Release|Any CPU.Build.0 = Release|Any CPU
		{C7DD9DB1-E287-4886-AA44-159C0AB4F041}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{C7DD9DB1-E287-4886-AA44-159C0AB4F041}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{C7DD9DB1-E287-4886-AA44-159C0AB4F041}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{C7DD9DB1-E287-4886-AA44-159C0AB4F041}.Release|Any CPU.Build.0 = Release|Any CPU
		{74D0605F-5466-423D-B5ED-E2C104BB3180}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{74D0605F-5466-423D-B5ED-E2C104BB3180}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{74D0605F-5466-423D-B5ED-E2C104BB3180}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{74D0605F-5466-423D-B5ED-E2C104BB3180}.Release|Any CPU.Build.0 = Release|Any CPU
		{6508D946-4B74-4629-B819-4C2C3F7AF8B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{6508D946-4B74-4629-B819-4C2C3F7AF8B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{6508D946-4B74-4629-B819-4C2C3F7AF8B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{6508D946-4B74-4629-B819-4C2C3F7AF8B5}.Release|Any CPU.Build.0 = Release|Any CPU
		{F24D06BE-E608-4DFD-B8F6-B02F87062323}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F24D06BE-E608-4DFD-B8F6-B02F87062323}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F24D06BE-E608-4DFD-B8F6-B02F87062323}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F24D06BE-E608-4DFD-B8F6-B02F87062323}.Release|Any CPU.Build.0 = Release|Any CPU
		{28747B1E-0784-4B7B-AE48-F5AD3C937262}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{28747B1E-0784-4B7B-AE48-F5AD3C937262}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{28747B1E-0784-4B7B-AE48-F5AD3C937262}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{28747B1E-0784-4B7B-AE48-F5AD3C937262}.Release|Any CPU.Build.0 = Release|Any CPU
		{08A826AA-2C2E-4E21-A3D8-60BF8E57772E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{08A826AA-2C2E-4E21-A3D8-60BF8E57772E}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{08A826AA-2C2E-4E21-A3D8-60BF8E57772E}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{08A826AA-2C2E-4E21-A3D8-60BF8E57772E}.Release|Any CPU.Build.0 = Release|Any CPU
		{ED3C04BC-3DEF-4B5C-BF91-EE8F5C38F8E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{ED3C04BC-3DEF-4B5C-BF91-EE8F5C38F8E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{ED3C04BC-3DEF-4B5C-BF91-EE8F5C38F8E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{ED3C04BC-3DEF-4B5C-BF91-EE8F5C38F8E4}.Release|Any CPU.Build.0 = Release|Any CPU
		{2E8F3332-545A-4454-9F75-1498A9B7B9BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{2E8F3332-545A-4454-9F75-1498A9B7B9BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{2E8F3332-545A-4454-9F75-1498A9B7B9BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{2E8F3332-545A-4454-9F75-1498A9B7B9BF}.Release|Any CPU.Build.0 = Release|Any CPU
		{400BD703-3E6F-41E6-929B-5FD888EFD00A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{400BD703-3E6F-41E6-929B-5FD888EFD00A}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{400BD703-3E6F-41E6-929B-5FD888EFD00A}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{400BD703-3E6F-41E6-929B-5FD888EFD00A}.Release|Any CPU.Build.0 = Release|Any CPU
		{73A5230F-0A90-4D2C-8D5E-D95C40DEF310}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{73A5230F-0A90-4D2C-8D5E-D95C40DEF310}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{73A5230F-0A90-4D2C-8D5E-D95C40DEF310}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{73A5230F-0A90-4D2C-8D5E-D95C40DEF310}.Release|Any CPU.Build.0 = Release|Any CPU
		{376DEF77-CBE3-452A-890C-FF2728D90322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{376DEF77-CBE3-452A-890C-FF2728D90322}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{376DEF77-CBE3-452A-890C-FF2728D90322}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{376DEF77-CBE3-452A-890C-FF2728D90322}.Release|Any CPU.Build.0 = Release|Any CPU
		{D7B0D4F0-756B-4038-9DB2-0A1AD65ED72A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D7B0D4F0-756B-4038-9DB2-0A1AD65ED72A}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D7B0D4F0-756B-4038-9DB2-0A1AD65ED72A}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D7B0D4F0-756B-4038-9DB2-0A1AD65ED72A}.Release|Any CPU.Build.0 = Release|Any CPU
		{A61C6606-A884-47BC-BD9D-DD9A3E4BDCDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{A61C6606-A884-47BC-BD9D-DD9A3E4BDCDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{A61C6606-A884-47BC-BD9D-DD9A3E4BDCDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{A61C6606-A884-47BC-BD9D-DD9A3E4BDCDA}.Release|Any CPU.Build.0 = Release|Any CPU
		{C00DA46C-9614-4C42-AA89-64A3520F4EE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{C00DA46C-9614-4C42-AA89-64A3520F4EE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{C00DA46C-9614-4C42-AA89-64A3520F4EE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{C00DA46C-9614-4C42-AA89-64A3520F4EE7}.Release|Any CPU.Build.0 = Release|Any CPU
		{605AB027-CB0A-4B8E-8E20-55258369C497}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{605AB027-CB0A-4B8E-8E20-55258369C497}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{605AB027-CB0A-4B8E-8E20-55258369C497}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{605AB027-CB0A-4B8E-8E20-55258369C497}.Release|Any CPU.Build.0 = Release|Any CPU
		{0D7F5E5F-348D-4606-9CE4-F2FB220E12BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{0D7F5E5F-348D-4606-9CE4-F2FB220E12BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{0D7F5E5F-348D-4606-9CE4-F2FB220E12BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{0D7F5E5F-348D-4606-9CE4-F2FB220E12BA}.Release|Any CPU.Build.0 = Release|Any CPU
		{6CFF2DEC-50E9-417C-A6E1-A0EFCD1EB94C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{6CFF2DEC-50E9-417C-A6E1-A0EFCD1EB94C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{6CFF2DEC-50E9-417C-A6E1-A0EFCD1EB94C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{6CFF2DEC-50E9-417C-A6E1-A0EFCD1EB94C}.Release|Any CPU.Build.0 = Release|Any CPU
		{40E39D18-CEDF-4BA1-8D9D-60DECAA30C9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{40E39D18-CEDF-4BA1-8D9D-60DECAA30C9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{40E39D18-CEDF-4BA1-8D9D-60DECAA30C9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{40E39D18-CEDF-4BA1-8D9D-60DECAA30C9C}.Release|Any CPU.Build.0 = Release|Any CPU
		{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4}.Release|Any CPU.Build.0 = Release|Any CPU
		{DED98401-EAED-4BE0-84A9-494D77B0E70D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{DED98401-EAED-4BE0-84A9-494D77B0E70D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{DED98401-EAED-4BE0-84A9-494D77B0E70D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{DED98401-EAED-4BE0-84A9-494D77B0E70D}.Release|Any CPU.Build.0 = Release|Any CPU
		{F599C512-7224-4A27-A474-3AA9510D2A14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F599C512-7224-4A27-A474-3AA9510D2A14}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F599C512-7224-4A27-A474-3AA9510D2A14}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F599C512-7224-4A27-A474-3AA9510D2A14}.Release|Any CPU.Build.0 = Release|Any CPU
		{CD31C6F6-F8DD-4B56-B08C-D9E8D5BA3E73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{CD31C6F6-F8DD-4B56-B08C-D9E8D5BA3E73}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{CD31C6F6-F8DD-4B56-B08C-D9E8D5BA3E73}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{CD31C6F6-F8DD-4B56-B08C-D9E8D5BA3E73}.Release|Any CPU.Build.0 = Release|Any CPU
		{5B0DC38B-5BC9-4DAC-8527-8D1C33E97247}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{5B0DC38B-5BC9-4DAC-8527-8D1C33E97247}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{5B0DC38B-5BC9-4DAC-8527-8D1C33E97247}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5B0DC38B-5BC9-4DAC-8527-8D1C33E97247}.Release|Any CPU.Build.0 = Release|Any CPU
		{53341B04-6D30-4137-943B-20D8706351E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{53341B04-6D30-4137-943B-20D8706351E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{53341B04-6D30-4137-943B-20D8706351E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{53341B04-6D30-4137-943B-20D8706351E8}.Release|Any CPU.Build.0 = Release|Any CPU
		{CB199ED6-3D1D-4E12-A15F-597B6A0BA564}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{CB199ED6-3D1D-4E12-A15F-597B6A0BA564}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{CB199ED6-3D1D-4E12-A15F-597B6A0BA564}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{CB199ED6-3D1D-4E12-A15F-597B6A0BA564}.Release|Any CPU.Build.0 = Release|Any CPU
		{60AE2AF5-D84C-4A8B-AA36-FD58A6A423D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{60AE2AF5-D84C-4A8B-AA36-FD58A6A423D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{60AE2AF5-D84C-4A8B-AA36-FD58A6A423D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{60AE2AF5-D84C-4A8B-AA36-FD58A6A423D7}.Release|Any CPU.Build.0 = Release|Any CPU
		{70A43D24-4905-4A16-8CE2-165F73243B8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{70A43D24-4905-4A16-8CE2-165F73243B8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{70A43D24-4905-4A16-8CE2-165F73243B8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{70A43D24-4905-4A16-8CE2-165F73243B8D}.Release|Any CPU.Build.0 = Release|Any CPU
		{ECDF1DD3-073D-4708-A20B-1F0F2D663065}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{ECDF1DD3-073D-4708-A20B-1F0F2D663065}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{ECDF1DD3-073D-4708-A20B-1F0F2D663065}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{ECDF1DD3-073D-4708-A20B-1F0F2D663065}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{69B34B22-198D-4BD0-AAFC-39A90F9ADAC2} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{8863A92B-E1A3-4203-8C08-C017E5B3D2CC} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{28747B1E-0784-4B7B-AE48-F5AD3C937262} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{08A826AA-2C2E-4E21-A3D8-60BF8E57772E} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{ED3C04BC-3DEF-4B5C-BF91-EE8F5C38F8E4} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{2E8F3332-545A-4454-9F75-1498A9B7B9BF} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{400BD703-3E6F-41E6-929B-5FD888EFD00A} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{73A5230F-0A90-4D2C-8D5E-D95C40DEF310} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{A61C6606-A884-47BC-BD9D-DD9A3E4BDCDA} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{0D7F5E5F-348D-4606-9CE4-F2FB220E12BA} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{40E39D18-CEDF-4BA1-8D9D-60DECAA30C9C} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{DED98401-EAED-4BE0-84A9-494D77B0E70D} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{5B0DC38B-5BC9-4DAC-8527-8D1C33E97247} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{53341B04-6D30-4137-943B-20D8706351E8} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{70A43D24-4905-4A16-8CE2-165F73243B8D} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
		{ECDF1DD3-073D-4708-A20B-1F0F2D663065} = {BDB77DF2-2D7D-4363-BB2B-D6A3A8A69C7B}
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {1D003939-9797-4F37-B391-10047A780641}
	EndGlobalSection
EndGlobal


================================================
FILE: Liquid.WebApi.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31612.314
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.WebApi.Http", "src\Liquid.WebApi.Http\Liquid.WebApi.Http.csproj", "{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{7B0BC311-679F-4D1F-BE49-DF3E49863792}"
	ProjectSection(SolutionItems) = preProject
		.github\workflows\liquid-ci-cd-http-extensions-crud.yml = .github\workflows\liquid-ci-cd-http-extensions-crud.yml
		.github\workflows\liquid-ci-cd-http.yml = .github\workflows\liquid-ci-cd-http.yml
	EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http", "Http", "{13C213E0-722A-4CD5-9209-21E12FDA0CA8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.WebApi.Http.Tests", "test\Liquid.WebApi.Http.Tests\Liquid.WebApi.Http.Tests.csproj", "{39DDC514-44CD-43BE-9E5B-C3B86665895E}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4}.Release|Any CPU.Build.0 = Release|Any CPU
		{39DDC514-44CD-43BE-9E5B-C3B86665895E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{39DDC514-44CD-43BE-9E5B-C3B86665895E}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{39DDC514-44CD-43BE-9E5B-C3B86665895E}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{39DDC514-44CD-43BE-9E5B-C3B86665895E}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{25D05D84-4DFB-4F3D-92A2-B06DFA244BA4} = {13C213E0-722A-4CD5-9209-21E12FDA0CA8}
		{39DDC514-44CD-43BE-9E5B-C3B86665895E} = {13C213E0-722A-4CD5-9209-21E12FDA0CA8}
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {83C46B4F-18D0-45CB-B7EC-9A5B8840F6A0}
	EndGlobalSection
EndGlobal


================================================
FILE: README.md
================================================
# Liquid Application Framework

![GitHub issues](https://img.shields.io/github/issues/Avanade/Liquid-Application-Framework)
![GitHub](https://img.shields.io/github/license/Avanade/Liquid-Application-Framework)
![GitHub Repo stars](https://img.shields.io/github/stars/Avanade/Liquid-Application-Framework?style=social)
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://avanade.github.io/code-of-conduct/)
[![Ready Ava Maturity](https://img.shields.io/badge/Ready-Ava--Maturity-%23FF5800?labelColor=green)](https://avanade.github.io/maturity-model/)

This repository contains Liquid Application Framework full code, samples, templates and [documentation](docs/About-Liquid.md).

## What is Liquid?

Liquid is a **multi-cloud** framework designed to **accelerate the development** of cloud-native microservices while avoiding coupling your code to specific cloud providers.

When writing Liquid applications, you stop worrying about the technology and focus on your business logic - Liquid abstracts most of the boilerplate and let you just write domain code that looks great and gets the job done.

## Feature

- Abstracts a number of services from cloud providers such as Azure, AWS and Google Cloud to enable you to write code that could run anywhere.
- Brings a directed programming model that will save you time on thinking how to structure your application, allowing you to focus on writing business code.

| Liquid Application Framework Binaries | Version |
| :-- | :--: |
| [`Liquid.Core`](https://www.nuget.org/packages/Liquid.Core) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Core) |
| [`Liquid.Repository.Mongo`](https://www.nuget.org/packages/Liquid.Repository.Mongo) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Repository.Mongo) |
| [`Liquid.Repository.EntityFramework`](https://www.nuget.org/packages/Liquid.Repository.EntityFramework) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Repository.EntityFramework) |
| [`Liquid.Repository.OData`](https://www.nuget.org/packages/Liquid.Repository.OData) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Repository.OData) |
| [`Liquid.Cache.Memory`](https://www.nuget.org/packages/Liquid.Cache.Memory) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Cache.Memory) |
| [`Liquid.Cache.NCache`](https://www.nuget.org/packages/Liquid.Cache.NCache) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Cache.NCache) |
| [`Liquid.Cache.Redis`](https://www.nuget.org/packages/Liquid.Cache.Redis) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Cache.Redis) |
| [`Liquid.Cache.SqlServer`](https://www.nuget.org/packages/Liquid.Cache.SqlServer) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Cache.SqlServer) |
| [`Liquid.Messaging.Kafka`](https://www.nuget.org/packages/Liquid.Messaging.Kafka) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Messaging.Kafka) |
| [`Liquid.Messaging.RabbitMq`](https://www.nuget.org/packages/Liquid.Messaging.RabbitMq) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Messaging.RabbitMq) |
| [`Liquid.Messaging.ServiceBus`](https://www.nuget.org/packages/Liquid.Messaging.ServiceBus) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Messaging.ServiceBus) |
| [`Liquid.WebApi.Http`](https://www.nuget.org/packages/Liquid.WebApi.Http) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.WebApi.Http) |
| [`Liquid.Dataverse`](https://www.nuget.org/packages/Liquid.Dataverse) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Dataverse) |
| [`Liquid.Storage.AzureStorage`](https://www.nuget.org/packages/Liquid.Storage.AzureStorage) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.Storage.AzureStorage) |
| [`Liquid.GenAi.OpenAi`](https://www.nuget.org/packages/Liquid.GenAi.OpenAi) | ![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Liquid.GenAi.OpenAi) |


## Getting Started

You can use Liquid Templates to get your microservice started.

Install the templates by running the following dotnet CLI command at the PowerShell prompt :

```Shell
dotnet new install Liquid.Templates
```
and run dotnet new command with the name and parameters of the following templates:
|Name|Description|
| :-- | :-- |
|`liquidcrudsolution`       |Liquid WebAPI CRUD Solution (Domain and WebAPI projects)              |
|`liquidcrudaddentity`      |Liquid entity class, CRUD mediator handlers and CRUD controller       |
|`liquiddomainaddhandler`   |Liquid mediator command handler                                       |
|`liquiddomainproject`      |Liquid Domain project (mediator command handler)                      |
|`liquidwebapisolution`     |Liquid WebAPI solution (Domain and WebAPI projects)                   |
|`liquidwebapiaddentity`    |Liquid entity class, mediator command handler and CRUD controller     |
|`liquidwebapiproject`      |Liquid WebAPI project                                                 |
|`liquidworkersolution`     |Liquid WorkerService solution (Domain and WorkerService projects)     |
|`liquidworkerproject`      |Liquid WorkerService project                                          |
|`liquidbcontextaddentity`  |Liquid DbContext entity configuration class (for Entity Framework)    |
|`liquiddbcontextproject`   |Liquid Repository project (EntityFramework DbContext configurations)  |


### Sample:
To create an WebAPI solution with CRUD handlers, you must:
- execute command :
```Shell
dotnet new liquidcrudsolution --projectName "some root namespace" --entityName "some entity" --entityIdType "type of your unique ID"
```

- open the folder where the command was executed, and open the project created in the IDE of your choice:

![template_sample](https://user-images.githubusercontent.com/30960065/153954780-0ec8a6c0-153e-4bbc-8f3a-4ccc9c1e7858.png)

- follow the instructions found in the generated code TODOs, and run!

> You can make changes in code, add more classes and project if you need, and also using others Liquid templates to do it!


## Contribute

Some of the best ways to contribute are to try things out, file issues, and make pull-requests.

- You can provide feedback by filing issues on GitHub or open a discussion in [Discussions tab](https://github.com/Avanade/Liquid-Application-Framework/discussions). We accept issues, ideas and questions.
- You can contribute by creating pull requests for the issues that are listed. Look for issues marked as _ready_ if you are new to the project.
- Avanade asks that all commits sign the [Developer Certificate of Origin](https://developercertificate.org/).

In any case, be sure to take a look at [the contributing guide](CONTRIBUTING.md) before starting, and see our [security disclosure](https://github.com/Avanade/avanade-template/blob/main/SECURITY.md) policy.

## Who is Avanade?

[Avanade](https://www.avanade.com) is the leading provider of innovative digital, cloud and advisory services, industry solutions and design-led experiences across the Microsoft ecosystem.


================================================
FILE: docs/About-Lightweight-Architectures.md
================================================
| [Main](About-Liquid.md) > About Lightweight Architectures |
|----|

Successful modern digital solutions, like startups, while starts small and agile, had to cope with accelerated growth, reaching hundreds of millions of concurrent users while still being able to compete and evolve rapidly.

Hence, those companies (startups) have set the bar (of technology competence) to a much higher level than traditional enterprises were used to.

Now, a new set of styles, patterns and practices rules the modern application life-cycle, targeting enterprises that are in their way to digital transformation (and competition).

Such type of enterprise architecture is being so called lightweight, in the sense that it resembles the lightness of **"born-digital"** solutions when compared to what has been done in large traditional companies.

## Learn from some thought leaders 
- ### [Microservice Architectural Style by **Martin Fowler, _et al._**](https://www.martinfowler.com/articles/microservices.html)

- ### [Cloud Design Patterns by **Microsoft**](https://docs.microsoft.com/en-us/azure/architecture/patterns/)

- ### [The Twelve-Factor App by **Adam Wiggins**](https://12factor.net/)


================================================
FILE: docs/About-Liquid-Applications.md
================================================
| [Main](About-Liquid.md) > About Liquid Applications |
|----|

Accenture uses the term [Liquid Applications](https://www.accenture.com/us-en/capability-rapid-application-development-studio) to emphasize the ever-changing aspect of a given solution, meant do deal with unpredictable yet presumable external pressure from users, clients, competitors and regulators.

Thus, for "liquid application", we should think about a custom business solution build on top of a [lightweight architecture](About-Lightweight-Architectures.md) and able to coexist and evolve in the digital environment.

Such kind of application should be developed using a cloud-first, mobile-first and API-first approach, using Agile & DevOps practices and tools.

Liquid have many [resources to ease the development and operation of such applications](Using-Liquid-for-building-your-application.md).


================================================
FILE: docs/About-Liquid.md
================================================
The **Liquid Application Framework** is a set of pre-integrated, ready-to-use binding code that supports the creation of [liquid applications](About-Liquid-Applications.md).

It is based on reference [lightweight architectures](About-Lightweight-Architectures.md), cloud design patterns and [modern software engineering](https://www.avanade.com/en/technologies/modern-software-engineering) techniques.

For building business software, Liquid can be thought of as a set of pre-built parts that drives a faster, safer, cheaper development work, while delivering high quality products.

#Liquid boosts the lifecycle of modern applications. How does it do that?
The framework increases the development productivity and quality, while eases operation, of business applications by reducing their complexity through use of pre-built and pre-integrated technical components.

It also adds architectural uniformity and governance by making it possible for software engineers to focus on business domain logic, leaving the technical issues with to the framework.

Last, but not least, Liquid allows for easy and centralized replacement and/or extension of platform components (_e.g._ database server) so applications built on top of it are tech-agnostic, _i.e._ minimizes vendor/platform lock-in.

# See more
1. [**Introduction**](Introduction.md) 
1. [**Key concepts**](Key-Concepts.md)
1. [**Using Liquid to build your application**](Using-Liquid-for-building-your-application.md)
1. [**Sample application: xxx** ](Sample-application-xxx.md)

# Contribute
Some of the best ways to contribute are to try things out, file issues, and make pull-requests.

- You can provide feedback by filing issues on GitHub. We accept issues, ideas and questions. 
- You can contribute by creating pull requests for the issues that are listed. Look for issues marked as _good first issue_ if you are new to the project.

In any case, be sure to take a look at [the contributing guide](https://github.com/Avanade/Liquid-Application-Framework/CONTRIBUTING.md) before starting.


================================================
FILE: docs/Business-logic-seggregation.md
================================================
| [Main](About-Liquid.md) > [Key Concepts](Key-Concepts.md) > Business Logic Separation |
|----|

For the sake of productivity, is better to have source code clear and legible, as much as possible.

However, current technology platforms contain many components to be integrated and too many aspects to consider beyond the (business) algorithm in question.

It is hard to deal with those technology matters in a isolated way, seggregated from the core business logic that is being written.

Liquid seeks to do that, as good as possible, allowing to use only minimum and precise mentions to such technical capabilities in the business code.

Take the following example showing how Liquid hides most of the complexity of connecting to a data repository to find and update some data and, in the same logic, publishing an event in a queue of a message/event bus:

On Startup.cs:
```csharp
...
    //Injects the Messaging Service
    services.AddProducersConsumers(typeof(ProductPriceChangedPublisher).Assembly);
...
```
On ChangeProductPriceCommandHandler.cs:
```csharp
    public class ChangeProductPriceCommandHandler : RequestHandlerBase, IRequestHandler<ChangeProductPriceCommand, bool>
    {
        private readonly IProductRepository _productRepository;
        private readonly ILightProducer<ProductPriceChangedMessage> _productPriceChangedPublisher;
        private readonly IMapper _mapper;
        private readonly IPostService _postService;

        public ChangeProductPriceCommandHandler(IMediator mediatorService, 
                                                ILightContext contextService, 
                                                ILightTelemetry telemetryService, 
                                                IMapper mapperService,
                                                IProductRepository productRepository,
                                                ILightProducer<ProductPriceChangedMessage> productPriceChangedPublisher,
                                                IPostService postService) : base(mediatorService, contextService, telemetryService, mapperService)
        {
        }




        /// <summary>
        /// Handles the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        public async Task<bool> Handle(ChangeProductPriceCommand request, CancellationToken cancellationToken)
        {
            var product = await _productRepository.FindByIdAsync(new ObjectId(request.Id));
            if (product != null)
            {
                product.Price = request.Price;
                await _productRepository.UpdateAsync(product);
                var changeProductPriceMessage = _mapper.Map<ProductPriceChangedMessage>(request);
                await _productPriceChangedPublisher.SendMessageAsync(changeProductPriceMessage);
                return true;
            }
            throw new ProductDoesNotExistException();
        }
    }
```

The method `public async Task<bool> Handle(...` above is responsible for doing the business logic. It should find Product data in a repository, change its price, persist it back to the repository and publish an event. The classes `_productRepository` and `_productPriceChangedPublisher` hides the technical complexity mentioned before. Besides that, since those classes are injected on this Command Handler, they can be substituted by any other classes implementing the same interfaces (`IProductRepository` and `ILightProducer<ProductPriceChangedMessage>` respectivelly), doing a complete isolation of the business logic and the underlying infrastructure components.

In this case, Liquid uses a common programming model in DDD hexagonal architectures, where external requests will be translated to Domain Commands or Domain Queries, and those will handle the business logic that responds to those requests. In that way, the requests can came from anywhere and in any format that could be handled outside the Domain. The same for the reponses.

This strategy is followed for all technology capabilities that Liquid abstracts and pre-integrates. 
For instance, see bellow, how simple is to create the class to publish that event on a RAbbitMQ:
```csharp
    [RabbitMqProducer("rabbitMqConnectionString", "ProductPriceChanged")]
    public class ProductPriceChangedPublisher : RabbitMqProducer<ProductPriceChangedMessage>
    {
        /// <summary>
        /// Gets the rabbit mq settings.
        /// </summary>
        /// <value>
        /// The rabbit mq settings.
        /// </value>
        public override RabbitMqSettings RabbitMqSettings => new RabbitMqSettings
        {
            Durable = true,
            Persistent = true,
            Expiration = "172800000"
        };

        /// <summary>
        /// Initializes a new instance of the <see cref="ProductPriceChangedPublisher"/> class.
        /// </summary>
        /// <param name="contextFactory">The context factory.</param>
        /// <param name="telemetryFactory">The telemetry factory.</param>
        /// <param name="loggerFactory">The logger factory.</param>
        /// <param name="messagingSettings">The messaging settings.</param>
        public ProductPriceChangedPublisher(ILightContextFactory contextFactory, 
                                            ILightTelemetryFactory telemetryFactory, 
                                            ILoggerFactory loggerFactory, 
                                            ILightConfiguration<List<MessagingSettings>> messagingSettings) : base(contextFactory, telemetryFactory, loggerFactory, messagingSettings)
        {
        }
    }
```
The base class `RabbitMqProducer` will handle all the complexities inherent to connect to a RabbitMQ server and publish a message on a queue.
That is the beauty of using platform specific "cartridges". This way, it should be very easy to develop an application that could run on an on-premises environment using RabbitMQ as the message bus, and, also, the same application could be changed to run on Azure, using Azure ServiceBus as the message bus. In fact, the application could be created to dinamically switch between different platform implementations, in run time.

In contrast to what Liquid provides, see an example excerpt from the code of [.NET Core reference application](https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/src/Services/Ordering/Ordering.BackgroundTasks):

```
...

private void RegisterEventBus(IServiceCollection services)
        {
            var subscriptionClientName = Configuration["SubscriptionClientName"];

            if (Configuration.GetValue<bool>("AzureServiceBusEnabled"))
            {
                services.AddSingleton<IEventBus, EventBusServiceBus>(sp =>
                {
                    var serviceBusPersisterConnection = sp.GetRequiredService<IServiceBusPersisterConnection>();
                    var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>();
                    var logger = sp.GetRequiredService<ILogger<EventBusServiceBus>>();
                    var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();

                    return new EventBusServiceBus(serviceBusPersisterConnection, logger,
                        eventBusSubcriptionsManager, subscriptionClientName, iLifetimeScope);
                });
            }

            ...

            RegisterEventBus(services);

            //create autofac based service provider
            var container = new ContainerBuilder();
            container.Populate(services);

            return new AutofacServiceProvider(container.Build());
}

...

 private void ConfigureEventBus(IApplicationBuilder app)

        {
            var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>();
            
            ...

            eventBus.Subscribe<OrderStatusChangedToShippedIntegrationEvent, OrderStatusChangedToShippedIntegrationEventHandler>();
        }

...

    public class OrderStatusChangedToShippedIntegrationEventHandler : IIntegrationEventHandler<OrderStatusChangedToShippedIntegrationEvent>
    {
        private readonly IHubContext<NotificationsHub> _hubContext;

        public OrderStatusChangedToShippedIntegrationEventHandler(IHubContext<NotificationsHub> hubContext)
        {
            _hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext));
        }

        public async Task Handle(OrderStatusChangedToShippedIntegrationEvent @event)
        {
        ... 
        }

```
There are too many technical (platform specific) lines of code mixed with only a few application (business) ones:  **OrderStatusChangedToShippedIntegrationEvent** and corresponding **Handle()**.

In this scenario, it is very hard to understand, refactor and evolve this code due to both technical and business demands.

With Liquid, the business logic will always be inside the domain, seggregated from the underlying technology, making it easier to understand. At same time, the underlying technology specifics will be outside the domain, abstracted in a way that makes possible to use different implementations that will work with the same business logic, while, also, allows to evolve these parts of code separatelly.


================================================
FILE: docs/Introduction.md
================================================
| [Main](About-Liquid.md) > Introduction | 
|----|

In the last years, the always challenging task of developing multi-hundred-line-of-code business applications has reached elevated sophistication and professionalism.
A high-quality application life-cycle is not only for high-tech companies anymore. To be or to become digital demands distinguished software engineering skills for companies of any industry and any size.
Avanade has historically helped several companies and professionals achieving proficiency in the development of modern applications during their digital transformation.
Now Avanade provides Liquid, a framework envisioned to boost such engineering capabilities, available as an Open Source project, for anyone looking for quick, standardized, flexible, extensible and high quality microservices development.

| Topics | 
| :-- | 
| [Technical Context](#Technical-Context) <br> [Avanade as a Thought Leader](#Avanade-as-a-Thought-Leader) <br> [Business Drivers](#Business-Drivers) <br> [Guiding Principles](#Guiding-Principles) | 

### Technical Context

The development of enterprise custom application has passed through several architectural waves in the last couple decades, with each new wave adding some complexity on top of the old ones.
In recent years, with the advent of modern architectural standards such as REST APIs, microservices on containers and single page applications as well as DevOps practices, the modern applications do have new strengths that are of great value to businesses and their customers. 
However, the complexity of designing, building and running such applications increased a lot, demanding great effort from architects, software and operation engineers to fully implement all the mandatory concepts and capabilities.
Moreover, such effort is a repeating task while yet an error-prone one. That opens a great space for building a set of pre-built software components following a general-purpose technical design, thereby condensed as a framework for developing and running those so called modern applications.

### Avanade as a Thought Leader

Born on the union of Microsoft and Accenture, Avanade has quickly become [a major competence center for the Microsoft's ecosystem of technology, services and partners](https://www.avanade.com/en-us/media-center/press-releases/2020-microsoft-global-alliance-si-partner-of-the-year), with a track record of hundreds of enterprise grade, innovative projects delivered.
Microsoft, in its transformation into a cloud service company, has made a complete rotation from a proprietary vendor to an open-source friendly company, thus naturally getting more and more influence on the evolution of the industry. 
In particular, due to its influence in the Single Page Application (SPA) domain [with Angular & Typescript](https://techcrunch.com/2015/03/05/microsoft-and-google-collaborate-on-typescript-hell-has-not-frozen-over-yet/) and microservice architecture with [.NET Core & Docker](https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/) (along with its open cloud offering such [Windows Azure](http://azure.microsoft.com) and VisualStudio.com) Microsoft has helped to pave the way for the building of modern digital applications.
On the other hand, Accenture is a top leader in technology consulting field and it continuously infuses Avanade with technical and methodological know-how in enterprise architecture and digital transformation.
Therefore, Avanade is best positioned to advise methods, patterns and building blocks on top of mature stacks and tools such as Microsoft's as well as to materialize the usual tech-agnostic point of view of Accenture.

### Business Drivers

The purpose of Liquid is to allow the building of modern applications with better quality in a more efficient way. Therefore, the following business drivers were stated:
- **Reduce time-to-value with faster development and testing activities:** The learning curve is shorter if developers can abstract technical complexity and have their components easily and automatically put into a DevOps pipeline;
- **Increase quality with code uniformity:** all application components can be written with the same high-level "technical" dialect thus promoting better code analysis, both static and dynamic;
- **Improve application governance, maintenance and evolution:** a single point of technical decision for the entire code allows better standards implementation, code maintenance as well as easier introduction and/or replacement of technical components;
- **Catalyze the use of delivery centers:** by getting most of the technical design out of the box, remote teams can focus on requirements (backlog) and on the design of the business solution (business logic on the application layer).

### Guiding Principles

From a technical perspective, the Liquid development was stressed toward the following principles:
- **Prescriptive and non-intrusive programming model for business components:** frameworks and platform services (_e.g._ .NET Core and CosmosDB, respectively) are designed for broad use-case scenarios, very much broader than the vast majority of enterprise digital solutions actually demands. Liquid stands for the later scenarios and this is the high value space that it tries to fulfill. Therefore, Liquid [prescribes a "light" way of building business application](Key-Concepts.md/#prescriptive-programming-model) without compromising the capability of developers to use the underlying technology in any other ways, if this is a requirement;
- **Multi platform based on workbench components replacement:** Liquid puts itself between application (business) components and underlying platform (technical) components to avoid (or, at least, minimize) vendor and/or technology lock-in of the application, during both building and execution time. Hence there ought to be a way of [simply replacing Liquid "cartridges"](Platform-Abstraction-Layer.md) of each type (_e.g._ database repository) from one specific technology to another (_e.g._ CosmosDB and DynamoDB) to seamlessly moving application (business) logic from one platform to another. This, obviously, will depend a lot on how the application development team will deal with specific features provided by the underlying technology being used. Most of the time, we only use a small subset of those features, making it very easy to substitute similar technologies. But, even when this is not the case, Liquid helps to isolate those specifics, allowing the creation of portable code with high control, avoiding spreaded infrastructure code that makes maintenance harder;
- **Built-in lightweight patterns for technology domain:** There are many [design patterns](About-Lightweight-Architectures.md) that must be applied to develop a modern digital application. Many of them can be given to the (upper) application layer as an out-of-the box capability of Liquid;
- **Abstract technical complexity from business software developer:** The true hard work of enterprise architects is (or should be) the structuring of millions of lines of code a large company has. Legacy code has probably grown over decades in an unsupervised manner. That should not be the case with the brand-new code of modern digital application. While dealing with technology (delta) innovation/rennovation is a task architects deal every new year, dealing with applications' structuring and refactoring is (or should be) their daily job. The same is valid for business software developers. Liquid helps engineers [to focus on their useful (business) code](Business-logic-seggregation.md).


================================================
FILE: docs/Key-Concepts.md
================================================
| [Main](About-Liquid) > Key Concepts |
|----|

A small group of core concepts balances the many aspects dealt by Liquid and determines its general shape and strengths.


## Architectural Strategies
- [**Platform abstraction layer:**](Platform-Abstraction-Layer.md) using the best from PaaS offerings while avoiding lock-in;

- [**Business logic seggregation:**](Business-logic-seggregation.md) avoid mixing domain (business) logic along with underlying platform (technical) logic;

- [**DevOps for microservices:**](DevOps-for-Microservices.md) giving this fine-grained unit of software an easier way of being built, deployed and tested in a continuous fashion.


## Prescriptive Programming Model
- [**APIs as (formal) object models:**](API-as-formal-Object-Model.md) leveraging the abstraction and formality of a well-formed API as a way to avoid code redundancy and error propensity;

- [**Encapsulated domain (business) logic:**](Encapsulated-Domain-Logic.md) putting domain logic in a format (of classes) independent of the protocols used to access it;

- [**Business error handling:**](Business-Error-Handling.md) defining a simple yet comprehensive way of dealing with business logic deviation;

- [**Microservice sizing:**](Microservice-Sizing.md) giving shape to the various parameters of a well-designed microservice.


================================================
FILE: docs/Platform-Abstraction-Layer.md
================================================
| [Main](About-Liquid.md) > [Key Concepts](Key-Concepts.md) > Platform Abstraction Layer |
|----|

The most fundamental strategy steering Liquid's design is its responsibility to decouple as much as possible the application components from the underlying platforms.

 ![PlatformAbstractionLayer.png](PlatformAbstractionLayer.png) 

Liquid concentrates most of platform (technology) specific dependencies in one single point of code thus freeing up the many application (business) components to access pre-integrated, high abstraction primitives for doing their jobs.

Doing such technology integration repetitive tasks, while error-prone and risky, can considerably increase costs on software projects. 

Hence an abstraction layer like Liquid diminishes such costs as much as great is the number of business components written on top of it - without having to deal with those low levels details.

Additionally (and even more important), now there are only a handful of dependency points on a given set of technology components (_i.e._ on their SDKs and APIs).

Following the Liquid guiding principle of [multi-platform components](Introduction.md/#guiding-principles), the pretty easy [replacement of one specific Liquid cartridge by another](Choose-platform-components.md) allows the avoidance of technology lock-in in a controlled and productive way.

See parts of a sample code that activates RabbitMQ as the message bus for asynchronous communication:

On Startup.cs:
```csharp
    //Injects the Messaging Service
    services.AddProducersConsumers(typeof(ProductPriceChangedPublisher).Assembly);
```

On ProductPriceChangedPublisher.cs:
```csharp
    [RabbitMqProducer("messageBusConnectionString", "ProductPriceChanged")]
    public class ProductPriceChangedPublisher : RabbitMqProducer<ProductPriceChangedMessage>
```

While you can easily change this code to use Azure ServiceBus, for sample, this approach makes possible to [use the best of breed from all platforms](Leveling-up-Platform-Providers.md), because you are able to implement specific technical functionalities of each platform on the specific cartridge (RabbitMqProducer in this case). Your point of maintenance in the code for such kind of change will not touch any business logic and will be very easy to do.
For use Azure ServiceBus instead of RabbitMQ, the only change would be on ProductPriceChangedPublisher.cs, as follows:
```csharp
    [ServiceBusProducer("messageBusConnectionString", "ProductPriceChanged")]
    public class ProductPriceChangedPublisher : ServiceBusProducer<ProductPriceChangedMessage>
```

Actually, the corollary of a given market standard is to be a commodity technology.

Accordingly, Liquid helps to transcend the classical trade-off between being open & commodity or being locked-in & differentiated.

Adding new technology platform capabilities to all business application components can be done, once again, from a centralized point, in a controlled and agile way.



================================================
FILE: docs/Using-Liquid-for-building-your-application.md
================================================
# WIP - This tutorial is still a Work In Progress and should not be used yet
 - TODO: create the templates
 - TODO: create the documents for each step
 - TODO: confirm this step-by-step strawman


| [Main](About-Liquid.md) > Using Liquid for building your application |
|----|

The following are the basic instructions on how to build modern [liquid applications](About-Liquid-Applications.md) taking advantage of Liquid's features and [concepts](Key-Concepts.md).

## Prepare your DevOps environment
1. [Install Liquid project templates for starting](Install-project-templates.md)
1. [Choose platform components to support your business code](Choose-platform-components.md)
1. [Setup configurations per environment](Set-up-configurations-per-environment.md)
1. [Configure CI, CD and CT](Configure-CI-CD-and-CT.md) 
1. [Deploy microservices on containers](Deploy-microservices.md)

## Code your microservices
6. [Define the APIs (and formats) exposed](Define-the-APIs.md) 
1. [Structure internal (business) logic](Structure-internal-logic.md)
1. [Validate input parameters and data models](Validate-input-and-data.md)
1. [Authenticate and authorize the API](Secure-the-APIs.md)
1. [Persist and query data from repository](Persist-and-query-data.md)
1. [Make calls to internal classes](Make-internal-calls.md)
1. [Call other microservices ](Call-other-microservices.md)
1. [Call third-party APIs](Call-third-party-APIs.md)

# Connect your front-end to your APIs
14. [Call the back-end](Calling-the-back-end.md)
1. [Call third-party back-ends](Call-third-party-back-ends.md)
1. [Add authentication to the front-end](Add-authentication-to-the-front-end.md)

# Develop tests and mocks
17. [Seed test data](Seeding-test-data.md)
1. [Test APIs directly](Test-APIs-directly.md)
1. [Mock authentication](Mock-authentication.md)
1. [Mock calls to microservices](Mock-calls-to-microservices.md)

# Add advanced behavior 
21. [Gather telemetry from front-ends and back-ends](Gather-telemetry.md)
1. [Control state of changing data](Control-state-of-changing-data.md)
1. [Querying and present data with pagination](Querying-data-with-pagination.md)
1. [Building complex queries](Building-complex-queries.md)
1. [Deal with multiple cultures](Deal-with-multiple-cultures.md)


================================================
FILE: nuget.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="Nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
</configuration>

================================================
FILE: samples/Liquid.Sample.Dataverse.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.6.34202.202
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Sample.Dataverse.Function", "src\Liquid.Sample.Dataverse.Function\Liquid.Sample.Dataverse.Function.csproj", "{577C7D6D-566D-4EA2-8C32-039C2C4E17DF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Sample.Dataverse.Domain", "src\Liquid.Sample.Dataverse.Domain\Liquid.Sample.Dataverse.Domain.csproj", "{7C47775D-45C7-463E-84DA-5B5B264D55F0}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{577C7D6D-566D-4EA2-8C32-039C2C4E17DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{577C7D6D-566D-4EA2-8C32-039C2C4E17DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{577C7D6D-566D-4EA2-8C32-039C2C4E17DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{577C7D6D-566D-4EA2-8C32-039C2C4E17DF}.Release|Any CPU.Build.0 = Release|Any CPU
		{7C47775D-45C7-463E-84DA-5B5B264D55F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{7C47775D-45C7-463E-84DA-5B5B264D55F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{7C47775D-45C7-463E-84DA-5B5B264D55F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{7C47775D-45C7-463E-84DA-5B5B264D55F0}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {FB41E555-2F25-4D02-8513-7EDC443A17D4}
	EndGlobalSection
EndGlobal


================================================
FILE: samples/Liquid.Sample.MessagingConsumer.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31410.357
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Sample.MessagingConsumer", "src\Liquid.Sample.MessagingConsumer\Liquid.Sample.MessagingConsumer.csproj", "{E4FE9A3E-4610-4EBF-AD0D-71A642B91282}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Sample.Domain", "src\Liquid.Sample.Domain\Liquid.Sample.Domain.csproj", "{54EF1FE4-82A3-4D39-AB35-C589DC73413C}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{E4FE9A3E-4610-4EBF-AD0D-71A642B91282}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{E4FE9A3E-4610-4EBF-AD0D-71A642B91282}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{E4FE9A3E-4610-4EBF-AD0D-71A642B91282}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{E4FE9A3E-4610-4EBF-AD0D-71A642B91282}.Release|Any CPU.Build.0 = Release|Any CPU
		{54EF1FE4-82A3-4D39-AB35-C589DC73413C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{54EF1FE4-82A3-4D39-AB35-C589DC73413C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{54EF1FE4-82A3-4D39-AB35-C589DC73413C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{54EF1FE4-82A3-4D39-AB35-C589DC73413C}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {FD6C41A9-76DF-4FEE-98D9-154A31618D95}
	EndGlobalSection
EndGlobal


================================================
FILE: samples/Liquid.Sample.WebApi.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34408.163
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Liquid.Sample.Domain", "src\Liquid.Sample.Domain\Liquid.Sample.Domain.csproj", "{68DCA206-AD43-4D44-AA1B-2F2E52DEE89A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Liquid.Sample.Api", "src\Liquid.Sample.Api\Liquid.Sample.Api.csproj", "{356B2F4F-0846-42FD-A013-1B68E6C3D484}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{68DCA206-AD43-4D44-AA1B-2F2E52DEE89A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{68DCA206-AD43-4D44-AA1B-2F2E52DEE89A}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{68DCA206-AD43-4D44-AA1B-2F2E52DEE89A}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{68DCA206-AD43-4D44-AA1B-2F2E52DEE89A}.Release|Any CPU.Build.0 = Release|Any CPU
		{356B2F4F-0846-42FD-A013-1B68E6C3D484}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{356B2F4F-0846-42FD-A013-1B68E6C3D484}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{356B2F4F-0846-42FD-A013-1B68E6C3D484}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{356B2F4F-0846-42FD-A013-1B68E6C3D484}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {C37CEE66-2BB3-4FF4-970A-2B1518BE93CA}
	EndGlobalSection
EndGlobal


================================================
FILE: samples/src/Liquid.Sample.Api/Controllers/SampleController.cs
================================================
using Liquid.Sample.Domain.Entities;
using Liquid.Sample.Domain.Handlers;
using Liquid.WebApi.Http.Controllers;
using MediatR;
using Microsoft.AspNetCore.Mvc;
using System.Net;

namespace Liquid.Sample.Api.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class SampleController : LiquidControllerBase
    {
        public SampleController(IMediator mediator) : base(mediator)
        {
        }

        [HttpGet("Sample")]
        public async Task<IActionResult> Get([FromQuery] string id) => await ExecuteAsync(new SampleRequest(id), HttpStatusCode.OK);

        [HttpPost]
        public async Task<IActionResult> Post([FromBody] SampleMessageEntity entity)
        {
            await Mediator.Send(new SampleEventRequest(entity));

            return NoContent();
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Api/Liquid.Sample.Api.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Liquid.WebApi.Http" Version="6.0.1" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Liquid.Sample.Domain\Liquid.Sample.Domain.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: samples/src/Liquid.Sample.Api/Program.cs
================================================
using Liquid.Messaging.ServiceBus.Extensions.DependencyInjection;
using Liquid.Repository.Mongo.Extensions;
using Liquid.Sample.Domain.Entities;
using Liquid.Sample.Domain.Handlers;
using Liquid.WebApi.Http.Extensions.DependencyInjection;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddLiquidMongoRepository<SampleEntity, Guid>("Liquid:MyMongoDbSettings:Entities");

builder.Services.AddLiquidServiceBusProducer<SampleMessageEntity>("Liquid:ServiceBus", "liquidoutput", true);

builder.Services.AddLiquidHttp(typeof(SampleRequest).Assembly);
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();


================================================
FILE: samples/src/Liquid.Sample.Api/appsettings.Development.json
================================================
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}


================================================
FILE: samples/src/Liquid.Sample.Api/appsettings.json
================================================
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    },
    "Console": {
      "IncludeScopes": true
    }
  },
  "AllowedHosts": "*",
  "Liquid": {
    "swagger": {
      "name": "v1",
      "host": "",
      "schemes": [ "http", "https" ],
      "title": "Liquidv2.SimpleApi",
      "version": "v1",
      "description": "Simple WebApi Sample.",
      "SwaggerEndpoint": {
        "url": "/swagger/v1/swagger.json",
        "name": "SimpleWebApiSample"
      }
    },
    "culture": {
      "defaultCulture": "pt-BR"
    },
    "MyMongoDbSettings": {
      "DefaultDatabaseSettings": {
        "connectionString": "",
        "databaseName": "MySampleDb"
      },
      "Entities": {
        "SampleEntity": {
          "CollectionName": "SampleCollection",
          "ShardKey": "id"
        }
      }
    },
    "ServiceBus": {
      "Settings": [
        {
          "ConnectionString": "",
          "EntityPath": "liquidoutput"
        },
        {
          "ConnectionString": "",
          "EntityPath": "liquidinput"
        }
      ]
    }
  }
}


================================================
FILE: samples/src/Liquid.Sample.Dataverse.Domain/Liquid.Sample.Dataverse.Domain.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Liquid.Adapter.Dataverse" Version="6.0.0" />
  </ItemGroup>

</Project>


================================================
FILE: samples/src/Liquid.Sample.Dataverse.Domain/PostSampleService.cs
================================================
using Liquid.Adapter.Dataverse;
using Liquid.Adapter.Dataverse.Extensions;
using Microsoft.Xrm.Sdk;

namespace Liquid.Sample.Dataverse.Domain
{
    public class PostSampleService
    {
        private readonly ILiquidDataverseAdapter _adapter;

        private readonly ILiquidMapper<string,Entity> _mapper;

        public PostSampleService(ILiquidDataverseAdapter adapter, ILiquidMapper<string, Entity> mapper)
        {
            _adapter = adapter ?? throw new ArgumentNullException(nameof(adapter));
            _mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
        }

        public async Task<string> PostSample(string body)
        {
            var bodyEntity = await _mapper.Map(body, "sample");

            var result = await _adapter.Create(bodyEntity);

            bodyEntity.Id = result;

            var response = bodyEntity.ToJsonString();

            return response;
        }
    }
}

================================================
FILE: samples/src/Liquid.Sample.Dataverse.Function/.gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# Azure Functions localsettings file
#local.settings.json

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# DNX
project.lock.json
project.fragment.lock.json
artifacts/

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
#*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

================================================
FILE: samples/src/Liquid.Sample.Dataverse.Function/DataverseIntegration.cs
================================================
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Liquid.Sample.Dataverse.Domain;

namespace Liquid.Sample.Dataverse.Function
{
    public class DataverseIntegration
    {
        private readonly PostSampleService _service;

        public DataverseIntegration(PostSampleService service)
        {
            _service = service ?? throw new ArgumentNullException(nameof(service));
        }

        [FunctionName("PostSample")]
        public async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

            dynamic data = JsonConvert.DeserializeObject(requestBody);

            string responseMessage = await _service.PostSample(data);

            return new OkObjectResult(responseMessage);
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Dataverse.Function/Liquid.Sample.Dataverse.Function.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.2.0" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Liquid.Sample.Dataverse.Domain\Liquid.Sample.Dataverse.Domain.csproj" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>


================================================
FILE: samples/src/Liquid.Sample.Dataverse.Function/Properties/serviceDependencies.json
================================================
{
  "dependencies": {
    "appInsights1": {
      "type": "appInsights"
    },
    "storage1": {
      "type": "storage",
      "connectionId": "AzureWebJobsStorage"
    }
  }
}

================================================
FILE: samples/src/Liquid.Sample.Dataverse.Function/Properties/serviceDependencies.local.json
================================================
{
  "dependencies": {
    "appInsights1": {
      "type": "appInsights.sdk"
    },
    "storage1": {
      "type": "storage.emulator",
      "connectionId": "AzureWebJobsStorage"
    }
  }
}

================================================
FILE: samples/src/Liquid.Sample.Dataverse.Function/Startup.cs
================================================
using Liquid.Adapter.Dataverse.Extensions.DependencyInjection;
using Liquid.Sample.Dataverse.Function;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using System.IO;

[assembly: FunctionsStartup(typeof(Startup))]

namespace Liquid.Sample.Dataverse.Function
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddLiquidDataverseAdapter("DataverseClient");
        }

        public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
        {
            FunctionsHostBuilderContext context = builder.GetContext();

            builder.ConfigurationBuilder
                .AddJsonFile(Path.Combine(context.ApplicationRootPath, $"local.setttings.json"), optional: true, reloadOnChange: true)
                .AddEnvironmentVariables();
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Dataverse.Function/host.json
================================================
{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "excludedTypes": "Request"
            },
            "enableLiveMetricsFilters": true
        }
    }
}

================================================
FILE: samples/src/Liquid.Sample.Dataverse.Function/local.settings.json
================================================
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "DataverseClient:ClientId": "",
    "DataverseClient:ClientSecret": "",
    "DataverseClient:url": ""
  }
}

================================================
FILE: samples/src/Liquid.Sample.Domain/Entities/SampleEntity.cs
================================================
using Liquid.Repository;
using System;

namespace Liquid.Sample.Domain.Entities
{
    public class SampleEntity : LiquidEntity<Guid>
    {
        public string MyProperty { get; set; }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Entities/SampleMessageEntity.cs
================================================
using Liquid.Repository;
using System;

namespace Liquid.Sample.Domain.Entities
{
    [Serializable]
    public class SampleMessageEntity
    {
        public string Id { get; set; }
        public string MyProperty { get; set; }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleCommandHandler.cs
================================================
using Liquid.Repository;
using Liquid.Sample.Domain.Entities;
using MediatR;
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;

namespace Liquid.Sample.Domain.Handlers
{
    public class SampleCommandHandler : IRequestHandler<SampleRequest, SampleResponse>
    {
        private ILiquidRepository<SampleEntity, Guid> _repository;
        public SampleCommandHandler(ILiquidRepository<SampleEntity, Guid> repository)
        {
            _repository = repository;
        }

        ///<inheritdoc/>
        public async Task<SampleResponse> Handle(SampleRequest request, CancellationToken cancellationToken)
        {
            var item = await _repository.FindByIdAsync(Guid.Parse(request.Id));

            var result = new SampleResponse(item);

            return result;
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleRequest.cs
================================================
using MediatR;
using System;

namespace Liquid.Sample.Domain.Handlers
{
    public class SampleRequest : IRequest<SampleResponse>
    {
        public string Id { get; set; }

        public SampleRequest(string id)
        {
            Id = id;
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleRequestValidator.cs
================================================
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Liquid.Sample.Domain.Handlers
{
    public class SampleRequestValidator : AbstractValidator<SampleRequest>
    {
        public SampleRequestValidator()
        {
            RuleFor(request => request.Id).NotEmpty().NotNull();
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleResponse.cs
================================================
using Liquid.Sample.Domain.Entities;
using System.Collections.Generic;

namespace Liquid.Sample.Domain.Handlers
{
    public class SampleResponse
    {
        public SampleEntity Response { get; set; }


        public SampleResponse(SampleEntity response)
        {
            Response = response;
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePost/SampleEventCommandHandler.cs
================================================
using Liquid.Core.Implementations;
using Liquid.Core.Interfaces;
using Liquid.Messaging;
using Liquid.Messaging.Interfaces;
using Liquid.Repository;
using Liquid.Sample.Domain.Entities;
using MediatR;
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;

namespace Liquid.Sample.Domain.Handlers
{
    public class SampleEventCommandHandler : IRequestHandler<SampleEventRequest>
    {
        private ILiquidProducer<SampleMessageEntity> _producer;
        private readonly ILiquidRepository<SampleEntity, Guid> _repository;
        private readonly ILiquidContext _context;

        public SampleEventCommandHandler(ILiquidProducer<SampleMessageEntity> producer, ILiquidContext context, ILiquidRepository<SampleEntity, Guid> repository)
        {
            _producer = producer;
            _context = context;
            _repository = repository;
        }

        public async Task Handle(SampleEventRequest request, CancellationToken cancellationToken)
        {
            await _repository.AddAsync(new SampleEntity()
            {
                Id = Guid.Parse(request.Entity.Id),
                MyProperty = request.Entity.MyProperty
            });

            await _producer.SendMessageAsync(request.Entity, _context.current);
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePost/SampleEventRequest.cs
================================================
using Liquid.Sample.Domain.Entities;
using MediatR;

namespace Liquid.Sample.Domain.Handlers
{
    public class SampleEventRequest : IRequest
    {
        public SampleMessageEntity Entity { get; set; }

        public SampleEventRequest(SampleMessageEntity entity)
        {
            Entity = entity;
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePost/SampleEventRequestValidator.cs
================================================
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Liquid.Sample.Domain.Handlers
{
    public class SampleEventRequestValidator : AbstractValidator<SampleEventRequest>
    {
        public SampleEventRequestValidator()
        {
            RuleFor(request => request.Entity.Id).NotEmpty().NotNull();
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePut/PutCommandHandler.cs
================================================
using Liquid.Repository;
using Liquid.Sample.Domain.Entities;
using MediatR;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace Liquid.Sample.Domain.Handlers.SamplePut
{
    public class PutCommandHandler : IRequestHandler<PutCommandRequest>
    {
        private readonly ILiquidRepository<SampleEntity, Guid> _repository;

        public PutCommandHandler(ILiquidRepository<SampleEntity, Guid> repository)
        {
            _repository = repository;
        }

        public async Task Handle(PutCommandRequest request, CancellationToken cancellationToken)
        {
            await _repository.UpdateAsync(new SampleEntity()
            {
                Id = Guid.Parse(request.Message.Id),
                MyProperty = request.Message.MyProperty
            });
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePut/PutCommandRequest.cs
================================================
using Liquid.Sample.Domain.Entities;
using MediatR;

namespace Liquid.Sample.Domain.Handlers.SamplePut
{
    public class PutCommandRequest : IRequest
    {
        public SampleMessageEntity Message { get; set; }

        public PutCommandRequest(SampleMessageEntity message)
        {
            Message = message;
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePut/PutCommandRequestValidator.cs
================================================
using FluentValidation;

namespace Liquid.Sample.Domain.Handlers.SamplePut
{
    public class PutCommandRequestValidator : AbstractValidator<PutCommandRequest>
    {
        public PutCommandRequestValidator()
        {
            RuleFor(request => request.Message.Id).NotEmpty().NotNull();
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.Domain/Liquid.Sample.Domain.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="FluentValidation" Version="11.9.2" />
    <PackageReference Include="Liquid.Messaging.ServiceBus" Version="6.0.0" />
    <PackageReference Include="Liquid.Repository.Mongo" Version="6.0.0" />
    <PackageReference Include="MediatR" Version="12.1.1" />
  </ItemGroup>

</Project>


================================================
FILE: samples/src/Liquid.Sample.MessagingConsumer/Liquid.Sample.MessagingConsumer.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Worker">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <UserSecretsId>dotnet-Liquid.Sample.MessagingConsumer-5B39CB3F-CC5C-4EBB-AB99-178E83416FC9</UserSecretsId>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Liquid.Sample.Domain\Liquid.Sample.Domain.csproj" />
  </ItemGroup>
</Project>


================================================
FILE: samples/src/Liquid.Sample.MessagingConsumer/Program.cs
================================================
using Liquid.Core.Extensions.DependencyInjection;
using Liquid.Messaging.ServiceBus.Extensions.DependencyInjection;
using Liquid.Repository.Mongo.Extensions;
using Liquid.Sample.Domain.Entities;
using Liquid.Sample.Domain.Handlers.SamplePut;
using Microsoft.Extensions.Hosting;
using System;

namespace Liquid.Sample.MessagingConsumer
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddLiquidConfiguration();
                    services.AddLiquidMongoRepository<SampleEntity, Guid>("Liquid:MyMongoDbSettings:Entities");
                    services.AddLiquidServiceBusProducer<SampleMessageEntity>("ServiceBus", "liquidoutput", false);
                    services.AddLiquidServiceBusConsumer<Worker, SampleMessageEntity> ("ServiceBus", "liquidinput", false, typeof(PutCommandRequest).Assembly);
                });
    }
}


================================================
FILE: samples/src/Liquid.Sample.MessagingConsumer/Worker.cs
================================================
using Liquid.Messaging;
using Liquid.Messaging.Interfaces;
using Liquid.Sample.Domain.Entities;
using Liquid.Sample.Domain.Handlers.SamplePut;
using MediatR;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;

namespace Liquid.Sample.MessagingConsumer
{
    public class Worker : ILiquidWorker<SampleMessageEntity>
    {
        private readonly ILogger<Worker> _logger;
        private readonly IMediator _mediator;

        public Worker(ILogger<Worker> logger, IMediator mediator)
        {
            _logger = logger;
            _mediator = mediator;
        }

        public async Task ProcessMessageAsync(ConsumerMessageEventArgs<SampleMessageEntity> args, CancellationToken cancellationToken)
        {
            await _mediator.Send(new PutCommandRequest(args.Data));
        }
    }
}


================================================
FILE: samples/src/Liquid.Sample.MessagingConsumer/appsettings.Development.json
================================================
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}


================================================
FILE: samples/src/Liquid.Sample.MessagingConsumer/appsettings.json
================================================
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "Liquid": {
    "culture": {
      "defaultCulture": "pt-BR"
    },
    "ScopedContext": {
      "keys": [
        {
          "keyName": "Connection",
          "required": false
        }
      ]
    },
    "ScopedLogging": {
      "keys": [
        {
          "keyName": "Connection",
          "required": false
        }
      ]
    },
    "MyMongoDbSettings": {
      "DefaultDatabaseSettings": {
        "connectionString": "",
        "databaseName": "MySampleDb"
      },
      "Entities": {
        "SampleEntity": {
          "CollectionName": "SampleCollection",
          "ShardKey": "id"
        }
      }
    }
  },
  "ServiceBus": {
    "Settings": [
      {
        "ConnectionString": "",
        "EntityPath": "liquidoutput"
      },
      {
        "ConnectionString": "",
        "EntityPath": "liquidinput"
      }
    ]
  }
}


================================================
FILE: src/Liquid.Cache.Memory/Extensions/DependencyInjection/IServiceCollectionExtension.cs
================================================
using Liquid.Core.Extensions.DependencyInjection;
using Liquid.Core.Implementations;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace Liquid.Cache.Memory.Extensions.DependencyInjection
{
    /// <summary>
    /// LiquidCache using Redis <see cref="IServiceCollection"/> extensions class.
    /// </summary>
    public static class IServiceCollectionExtension
    {
        /// <summary>
        /// Registers <see cref="MemoryDistributedCache"/> service and <see cref="LiquidCache"/> decorator,
        /// with its <see cref="LiquidTelemetryInterceptor"/>.
        /// </summary>
        /// <param name="services"></param>
        /// <param name="setupAction">An System.Action`1 to configure the provided 
        /// <see cref="MemoryDistributedCacheOptions"/>.</param>
        /// <param name="withTelemetry">Indicates if this method must register a <see cref="LiquidTelemetryInterceptor"/></param>
        public static IServiceCollection AddLiquidMemoryDistributedCache(this IServiceCollection services,
            Action<MemoryDistributedCacheOptions> setupAction, bool withTelemetry = true)
        {
            services.AddDistributedMemoryCache(setupAction);

            return services.AddLiquidDistributedCache(withTelemetry);
        }
    }
}


================================================
FILE: src/Liquid.Cache.Memory/Liquid.Cache.Memory.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
	  <PackageId>Liquid.Cache.Memory</PackageId>
	<Nullable>enable</Nullable>
	  <PackageLicenseExpression>MIT</PackageLicenseExpression>
	  <Authors>Avanade Brazil</Authors>
	  <Company>Avanade Inc.</Company>
	  <Product>Liquid Application Framework</Product>
	  <Copyright>Avanade 2019</Copyright>
	  <PackageProjectUrl>https://github.com/Avanade/Liquid-Application-Framework</PackageProjectUrl>
	  <PackageIcon>logo.png</PackageIcon>
	  <Version>8.0.0</Version>
	  <GenerateDocumentationFile>true</GenerateDocumentationFile>
	  <IsPackable>true</IsPackable>
	  <DebugType>Full</DebugType>
	  <Description>
		  Distributed cache extension of Microsoft.Extensions.Caching.Memory.
		  This component is part of Liquid Application Framework.
	  </Description>
  </PropertyGroup>

  <ItemGroup>
    <None Include="..\..\logo.png" Link="logo.png">
      <PackagePath></PackagePath>
      <Pack>True</Pack>
    </None>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Liquid.Core" Version="8.0.0" />
    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
  </ItemGroup>

</Project>


================================================
FILE: src/Liquid.Cache.NCache/Extensions/DependencyInjection/IServiceCollectionExtension.cs
================================================
using Alachisoft.NCache.Caching.Distributed;
using Alachisoft.NCache.Caching.Distributed.Configuration;
using Liquid.Core.Extensions.DependencyInjection;
using Liquid.Core.Implementations;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace Liquid.Cache.NCache.Extensions.DependencyInjection
{
    /// <summary>
    /// LiquidCache using NCache <see cref="IServiceCollection"/> extensions class.
    /// </summary>
    public static class IServiceCollectionExtension
    {
        /// <summary>
        /// Registers <see cref="NCacheDistributedCache"/> service and <see cref="LiquidCache"/> decorator,
        /// with its <see cref="LiquidTelemetryInterceptor"/>.
        /// </summary>
        /// <param name="services"></param>
        /// <param name="setupAction">An System.Action`1 to configure the provided
        /// <see cref="NCacheConfiguration"/>.</param>
        /// <param name="withTelemetry">Indicates if this method must register a <see cref="LiquidTelemetryInterceptor"/></param>
        public static IServiceCollection AddLiquidNCacheDistributedCache(this IServiceCollection services,
             Action<NCacheConfiguration> setupAction, bool withTelemetry = true)
        {
            services.AddNCacheDistributedCache(setupAction);

            return services.AddLiquidDistributedCache(withTelemetry);
        }
    }
}


================================================
FILE: src/Liquid.Cache.NCache/Liquid.Cache.NCache.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
	  <PackageId>Liquid.Cache.NCache</PackageId>
		<Nullable>enable</Nullable>
	   <PackageLicenseExpression>MIT</PackageLicenseExpression>
	  <Authors>Avanade Brazil</Authors>
	  <Company>Avanade Inc.</Company>
	  <Product>Liquid Application Framework</Product>
	  <Copyright>Avanade 2019</Copyright>
	  <PackageProjectUrl>https://github.com/Avanade/Liquid-Application-Framework</PackageProjectUrl>
	  <PackageIcon>logo.png</PackageIcon>
	  <Version>8.0.0</Version>
	  <GenerateDocumentationFile>true</GenerateDocumentationFile>
	  <IsPackable>true</IsPackable>
	  <DebugType>Full</DebugType>
	  <Description>
		  Distributed cache extension of NCache.Microsoft.Extensions.Caching.
		  This component is part of Liquid Application Framework.
	  </Description>
  </PropertyGroup>

  <ItemGroup>
    <None Include="..\..\logo.png" Link="logo.png">
      <PackagePath></PackagePath>
      <Pack>True</Pack>
    </None>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Alachisoft.NCache.SDK" Version="5.3.5" />
    <PackageReference Include="Liquid.Core" Version="8.0.0" />
    <PackageReference Include="NCache.Microsoft.Extensions.Caching" Version="5.3.3" />
  </ItemGroup>
  <ItemGroup>
    <None Update="client.ncconf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="config.ncconf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="tls.ncconf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>

</Project>


================================================
FILE: src/Liquid.Cache.NCache/client.ncconf
================================================
<?xml version="1.0" encoding="UTF-8"?>
  <configuration>
    <ncache-server connection-retries="3" retry-connection-delay="0" retry-interval="1" command-retries="3" command-retry-interval="0.1" client-request-timeout="90" connection-timeout="5" port="9800"/>
    <cache id="myReplicatedCache" client-cache-id="" client-cache-syncmode="optimistic" default-readthru-provider="" default-writethru-provider="" load-balance="True"  enable-client-logs="False" log-level="error">
      <server name="10.0.5.1" />
    </cache>
  </configuration>


================================================
FILE: src/Liquid.Cache.NCache/config.ncconf
================================================
<configuration>
  <cache-config cache-name="myCache" alias="" config-id="e097c2c0-88af-4aa2-8a8a-c6432eeaa3fe" config-version="0" store-type="distributed-cache">
    <cache-settings inproc="True" last-modified="" auto-start="False" data-format="Binary">
      <logging enable-logs="True" trace-errors="True" trace-notices="False" trace-warnings="False" trace-debug="False" log-path=""/>
      <performance-counters enable-counters="True" snmp-port="0"/>
      <data-load-balancing enabled="False" auto-balancing-threshold="60%" auto-balancing-interval="30sec"/>
      <compression enable-compression="False" threshold="100kb"/>
      <client-death-detection/>
      <client-activity-notification enabled="False" retention-period="5sec"/>
      <cache-notifications item-remove="False" item-add="False" item-update="False"/>
      <cleanup interval="15sec"/>
      <storage type="heap" cache-size="1024mb"/>
      <eviction-policy enabled-eviction="True" default-priority="normal" policy="lru" eviction-ratio="5%"/>
      <expiration-policy enabled="False">
        <absolute-expiration longer-enabled="False" longer-value="0" default-enabled="False" default-value="0"/>
        <sliding-expiration longer-enabled="False" longer-value="0" default-enabled="False" default-value="0"/>
      </expiration-policy>
      <cache-topology topology="local-cache"/>
      <tasks-config max-tasks="10" chunk-size="100" communicate-stats="False" queue-size="10" max-avoidable-exceptions="10"/>
      <split-brain-recovery enable="False" detection-interval="60"/>
    </cache-settings>
  </cache-config>


</configuration>

================================================
FILE: src/Liquid.Cache.NCache/tls.ncconf
================================================
<tls-info>
	<server-certificate-cn>certificate-name</server-certificate-cn>
	<server-certificate-thumbprint>your-thumbprint</server-certificate-thumbprint>
	<client-certificate-cn>certificate-name</client-certificate-cn>
	<client-certificate-thumbprint>your-thumbprint</client-certificate-thumbprint>
	<enable>false</enable>
	<enable-client-server-tls>false</enable-client-server-tls>
	<use-mutual-tls-for-client-to-server>false</use-mutual-tls-for-client-to-server>
	<protocol-version>tls12</protocol-version>
</tls-info>

================================================
FILE: src/Liquid.Cache.Redis/Extensions/DependencyInjection/IServiceCollectionExtension.cs
================================================
using Liquid.Core.Extensions.DependencyInjection;
using Liquid.Core.Implementations;
using Microsoft.Extensions.Caching.StackExchangeRedis;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace Liquid.Cache.Redis.Extensions.DependencyInjection
{
    /// <summary>
    /// LiquidCache using Redis <see cref="IServiceCollection"/> extensions class.
    /// </summary>
    public static class IServiceCollectionExtension
    {
        /// <summary>
        /// Registers <see cref="RedisCache"/> service and <see cref="LiquidCache"/> decorator,
        /// with its <see cref="LiquidTelemetryInterceptor"/>.
        /// </summary>
        /// <param name="services"></param>
        /// <param name="setupAction">An System.Action`1 to configure the provided
        /// Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.</param>
        /// <param name="withTelemetry">Indicates if this method must register a <see cref="LiquidTelemetryInterceptor"/></param>
        public static IServiceCollection AddLiquidRedisDistributedCache(this IServiceCollection services,
            Action<RedisCacheOptions> setupAction, bool withTelemetry = true)
        {
            services.AddStackExchangeRedisCache(setupAction);

            return services.AddLiquidDistributedCache(withTelemetry);
        }
    }
}


================================================
FILE: src/Liquid.Cache.Redis/Liquid.Cache.Redis.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
	  <PackageLicenseExpression>MIT</PackageLicenseExpression>
	  <Authors>Avanade Brazil</Authors>
	  <Company>Avanade Inc.</Company>
	  <Product>Liquid Application Framework</Product>
	  <Copyright>Avanade 2019</Copyright>
	  <PackageProjectUrl>https://github.com/Avanade/Liquid-Application-Framework</PackageProjectUrl>
	  <PackageIcon>logo.png</PackageIcon>
	  <Version>8.0.0</Version>
	  <GenerateDocumentationFile>true</GenerateDocumentationFile>
	  <IsPackable>true</IsPackable>
	  <DebugType>Full</DebugType>
	  <Description>
		  Distributed cache extension of Microsoft.Extensions.Caching.StackExchangeRedis.
		  This component is part of Liquid Application Framework.
	  </Description>
  </PropertyGroup>

  <ItemGroup>
    <None Include="..\..\logo.png" Link="logo.png">
      <PackagePath></PackagePath>
      <Pack>True</Pack>
    </None>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Liquid.Core" Version="8.0.0" />
    <PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.6" />
    <PackageReference Include="System.Drawing.Common" Version="8.0.6" />
  </ItemGroup>

</Project>


================================================
FILE: src/Liquid.Cache.SqlServer/Extensions/DependencyInjection/IServiceCollectionExtension.cs
================================================
using Liquid.Core.Extensions.DependencyInjection;
using Liquid.Core.Implementations;
using Microsoft.Extensions.Caching.SqlServer;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace Liquid.Cache.SqlServer.Extensions.DependencyInjection
{
    /// <summary>
    /// LiquidCache using SqlServer <see cref="IServiceCollection"/> extensions class.
    /// </summary>
    public static class IServiceCollectionExtension
    {
        /// <summary>
        /// Registers <see cref="SqlServerCache"/> service and <see cref="LiquidCache"/> decorator,
        /// with its <see cref="LiquidTelemetryInterceptor"/>.
        /// </summary>
        /// <param name="services"></param>
        /// <param name="setupAction">An System.Action`1 to configure the provided
        ///<see cref="SqlServerCacheOptions"/>.</param>
        /// <param name="withTelemetry">Indicates if this method must register a <see cref="LiquidTelemetryInterceptor"/></param>
        public static IServiceCollection AddLiquidSqlServerDistributedCache(this IServiceCollection services,
            Action<SqlServerCacheOptions> setupAction, bool withTelemetry = true)
        {
            services.AddDistributedSqlServerCache(setupAction);

            return services.AddLiquidDistributedCache(withTelemetry);
        }
    }
}


================================================
FILE: src/Liquid.Cache.SqlServer/Liquid.Cache.SqlServer.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
     <PackageId>Liquid.Cache.SqlServer</PackageId>
	  <Nullable>enable</Nullable>
	  <PackageLicenseExpression>MIT</PackageLicenseExpression>
	  <Authors>Avanade Brazil</Authors>
	  <Company>Avanade Inc.</Company>
	  <Product>Liquid Application Framework</Product>
	  <Copyright>Avanade 2019</Copyright>
	  <PackageProjectUrl>https://github.com/Avanade/Liquid-Application-Framework</PackageProjectUrl>
	  <PackageIcon>logo.png</PackageIcon>
	  <Version>8.0.0</Version>
	  <GenerateDocumentationFile>true</GenerateDocumentationFile>
	  <IsPackable>true</IsPackable>
	  <DebugType>Full</DebugType>
	  <Description>
		  Distributed cache extension of Microsoft.Extensions.Caching.SqlServer.
		  This component is part of Liquid Application Framework.
	  </Description>
  </PropertyGroup>

  <ItemGroup>
    <None Include="..\..\logo.png" Link="logo.png">
      <PackagePath></PackagePath>
      <Pack>True</Pack>
    </None>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Azure.Identity" Version="1.13.2" />
    <PackageReference Include="Liquid.Core" Version="8.0.0" />
    <PackageReference Include="Microsoft.Data.SqlClient" Version="6.0.2" />
    <PackageReference Include="Microsoft.Extensions.Caching.SqlServer" Version="8.0.6" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
  </ItemGroup>

</Project>


================================================
FILE: src/Liquid.Core/AbstractMappers/LiquidMapper.cs
================================================
using Liquid.Core.Exceptions;
using Liquid.Core.Interfaces;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;

namespace Liquid.Core.AbstractMappers
{
    ///<inheritdoc/>
    [ExcludeFromCodeCoverage]
    public abstract class LiquidMapper<TFrom, TTo> : ILiquidMapper<TFrom, TTo>
    {
        private readonly string _mapperName;

        /// <summary>
        /// Create a new instance of <see cref="LiquidMapper{TFrom, TTo}"/>
        /// </summary>
        /// <param name="mapperName">Mapper implementation name.</param>
        protected LiquidMapper(string mapperName)
        {
            _mapperName = mapperName;
        }
        ///<inheritdoc/>
        public async Task<TTo> Map(TFrom dataObject, string entityName = null)
        {
            if (dataObject is null)
            {
                throw new ArgumentNullException(nameof(dataObject));
            }

            try
            {
                return await MapImpl(dataObject, entityName);
            }
            catch (Exception e)
            {
                var msg = $"{_mapperName} throw data mapping error: '{e.Message}'";

                throw new DataMappingException(msg, e);
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dataObject"></param>
        /// <param name="entityName"></param>
        /// <returns></returns>
        protected abstract Task<TTo> MapImpl(TFrom dataObject, string entityName = null);
    }
}


================================================
FILE: src/Liquid.Core/AbstractMappers/OcrResultMapper.cs
================================================
using Liquid.Core.Entities;
using Liquid.Core.Exceptions;
using Liquid.Core.Interfaces;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;

namespace Liquid.Core.AbstractMappers
{
    /// <summary>
    /// Defines object that map data between two instance types.
    /// </summary>
    /// <typeparam name="TFrom">type of data source object.</typeparam>
    [ExcludeFromCodeCoverage]
    public abstract class OcrResultMapper<TFrom> : ILiquidMapper<TFrom, OcrResult>
    {
        private readonly string _mapperName;

        /// <summary>
        /// Create a new instance of <see cref="OcrResultMapper{TFrom}"/>
        /// </summary>
        /// <param name="mapperName">Mapper implementation name.</param>
        public OcrResultMapper(string mapperName)
        {
            _mapperName = mapperName;
        }
        ///<inheritdoc/>
        public async Task<OcrResult> Map(TFrom dataObject, string entityName = null)
        {
            if (dataObject is null)
            {
                throw new ArgumentNullException(nameof(dataObject));
            }

            try
            {
                return await MapImpl(dataObject);
            }
            catch (Exception e)
            {
                var msg = $"{_mapperName} throw data mapping error: '{e.Message}'";

                throw new DataMappingException(msg, e);
            }
        }
        /// <summary>
        /// Create a new instance of <see cref="OcrResult"/>
        /// with values obtained from <see cref="TFrom"/>. 
        /// </summary>
        /// <param name="dataObject">data source object instance.</param>
        protected abstract Task<OcrResult> MapImpl(TFrom dataObject);
    }
}


================================================
FILE: src/Liquid.Core/Attributes/LiquidSectionNameAttribute.cs
================================================
using System;

namespace Liquid.Core.Attributes
{
    /// <summary>
    /// Defines which configuration section, the custom configuration will read from json file.
    /// </summary>
    /// <seealso cref="Attribute" />
    [AttributeUsage(AttributeTargets.Class)]
    public class LiquidSectionNameAttribute : Attribute
    {
        /// <summary>
        /// Gets the name of the section.
        /// </summary>
        /// <value>
        /// The name of the section.
        /// </value>
        public string SectionName { get; }

        /// <summary>
        /// Initializes a new instance of the <see cref="LiquidSectionNameAttribute"/> class.
        /// </summary>
        /// <param name="sectionName">Name of the section.</param>
        public LiquidSectionNameAttribute(string sectionName)
        {
            SectionName = sectionName;
        }
    }
}

================================================
FILE: src/Liquid.Core/Base/Enumeration.cs
================================================
using Liquid.Core.Exceptions;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;

namespace Liquid.Core.Base
{
    /// <summary>
    /// Enumeration Base Class.
    /// </summary>
    /// <seealso cref="System.IComparable" />
    [ExcludeFromCodeCoverage]
    public abstract class Enumeration : IComparable
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="Enumeration"/> class.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <param name="displayName">The display name.</param>
        protected Enumeration(int value, string displayName)
        {
            Value = value;
            DisplayName = displayName;
        }

        /// <summary>
        /// Gets the value.
        /// </summary>
        /// <value>
        /// The value.
        /// </value>
        public int Value { get; }

        /// <summary>
        /// Gets the display name.
        /// </summary>
        /// <value>
        /// The display name.
        /// </value>
        public string DisplayName { get; }

        /// <summary>
        /// Converts to string.
        /// </summary>
        /// <returns>
        /// A <see cref="System.String" /> that represents this instance.
        /// </returns>
        public override string ToString()
        {
            return DisplayName;
        }

        /// <summary>
        /// Gets all.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static IEnumerable<T> GetAll<T>() where T : Enumeration, new()
        {
            var type = typeof(T);
            var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);

            foreach (var info in fields)
            {
                var instance = new T();

                if (info.GetValue(instance) is T locatedValue)
                {
                    yield return locatedValue;
                }
            }
        }

        /// <summary>
        /// Determines whether the specified <see cref="System.Object" />, is equal to this instance.
        /// </summary>
        /// <param name="obj">The <see cref="System.Object" /> to compare with this instance.</param>
        /// <returns>
        ///   <c>true</c> if the specified <see cref="System.Object" /> is equal to this instance; otherwise, <c>false</c>.
        /// </returns>
        public override bool Equals(object obj)
        {
            var otherValue = obj as Enumeration;

            if (otherValue == null)
            {
                return false;
            }

            var typeMatches = GetType() == obj.GetType();
            var valueMatches = Value.Equals(otherValue.Value);

            return typeMatches && valueMatches;
        }

        /// <summary>
        /// Returns a hash code for this instance.
        /// </summary>
        /// <returns>
        /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. 
        /// </returns>
        public override int GetHashCode()
        {
            return Value.GetHashCode();
        }

        /// <summary>
        /// Absolutes the difference.
        /// </summary>
        /// <param name="firstValue">The first value.</param>
        /// <param name="secondValue">The second value.</param>
        /// <returns></returns>
        public static int AbsoluteDifference(Enumeration firstValue, Enumeration secondValue)
        {
            var absoluteDifference = Math.Abs(firstValue.Value - secondValue.Value);
            return absoluteDifference;
        }

        /// <summary>
        /// Gets the enumeration from id value.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="value">The value.</param>
        /// <returns></returns>
        public static T FromValue<T>(int value) where T : Enumeration, new()
        {
            var matchingItem = Parse<T, int>(value, "value", item => item.Value == value);
            return matchingItem;
        }

        /// <summary>
        /// Gets the enumeration from display name.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="displayName">The display name.</param>
        /// <returns></returns>
        public static T FromDisplayName<T>(string displayName) where T : Enumeration, new()
        {
            var matchingItem = Parse<T, string>(displayName, "display name", item => item.DisplayName == displayName);
            return matchingItem;
        }

        /// <summary>
        /// Parses the specified value.
        /// </summary>
        /// <typeparam name="TEnumerable"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        /// <param name="value">The value.</param>
        /// <param name="description">The description.</param>
        /// <param name="predicate">The predicate.</param>
        /// <returns></returns>
        /// <exception cref="ApplicationException"></exception>
        private static TEnumerable Parse<TEnumerable, TValue>(TValue value, string description, Func<TEnumerable, bool> predicate) where TEnumerable : Enumeration, new()
        {
            var matchingItem = GetAll<TEnumerable>().FirstOrDefault(predicate);

            if (matchingItem != null) return matchingItem;
            var message = $"'{value}' is not a valid {description} in {typeof(TEnumerable)}";
            throw new LiquidException(message);
        }

        /// <summary>
        /// Compares to.
        /// </summary>
        /// <param name="obj">The other object to be compared.</param>
        /// <returns></returns>
        public int CompareTo(object obj)
        {
            return Value.CompareTo(((Enumeration)obj).Value);
        }
    }
}

================================================
FILE: src/Liquid.Core/Base/LiquidInterceptorBase.cs
================================================
using Castle.DynamicProxy;
using System;
using System.Threading.Tasks;

namespace Liquid.Core.Base
{
    /// <summary>
    /// Base class to implement interceptors with actions after, before and on exception.
    /// </summary>
    public abstract class LiquidInterceptorBase : AsyncInterceptorBase
    {
        /// <summary>
        /// Initialize an instace of <see cref="LiquidInterceptorBase"/>
        /// </summary>
        protected LiquidInterceptorBase()
        {
        }

        /// <summary>
        /// Traces start, stop and exception of the intercepted method.
        /// </summary>
        /// <param name="invocation"> The method invocation.</param>
        /// <param name="proceedInfo"> The Castle.DynamicProxy.IInvocationProceedInfo.</param>
        /// <param name="proceed">The function to proceed the proceedInfo.</param>
        protected override async Task InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func<IInvocation, IInvocationProceedInfo, Task> proceed)
        {
            try
            {
                await BeforeInvocation(invocation, proceedInfo);
                await proceed(invocation, proceedInfo).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                await OnExceptionInvocation(invocation, proceedInfo, ex);
                throw;
            }
            finally
            {
                await AfterInvocation(invocation, proceedInfo, default(object));
            }
        }

        /// <summary>
        /// Traces start, stop and exception of the intercepted method.
        /// </summary>
        /// <param name="invocation"> The method invocation.</param>
        /// <param name="proceedInfo"> The Castle.DynamicProxy.IInvocationProceedInfo.</param>
        /// <param name="proceed">The function to proceed the proceedInfo.</param>
        protected sealed override async Task<TResult> InterceptAsync<TResult>(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func<IInvocation, IInvocationProceedInfo, Task<TResult>> proceed)
        {
            TResult result = default;
            try
            {
                await BeforeInvocation(invocation, proceedInfo);
                return await proceed(invocation, proceedInfo).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                await OnExceptionInvocation(invocation, proceedInfo, ex);
                throw;
            }
            finally
            {
                await AfterInvocation(invocation, proceedInfo, result).ConfigureAwait(false);
            }
        }

        /// <summary>
        ///   Override in derived classes to intercept method invocations.
        /// </summary>
        /// <typeparam name="TResult">The type of result object.</typeparam>
        /// <param name="invocation"> The method invocation.</param>
        /// <param name="proceedInfo"> The Castle.DynamicProxy.IInvocationProceedInfo.</param>
        /// <param name="result">Result object.</param>
        /// <returns></returns>
        protected abstract Task AfterInvocation<TResult>(IInvocation invocation, IInvocationProceedInfo proceedInfo, TResult result);

        /// <summary>
        /// Override in derived classes to intercept method invocations.
        /// </summary>
        /// <param name="invocation"> The method invocation.</param>
        /// <param name="proceedInfo"> The Castle.DynamicProxy.IInvocationProceedInfo.</param>
        /// <returns></returns>
        protected abstract Task BeforeInvocation(IInvocation invocation, IInvocationProceedInfo proceedInfo);

        /// <summary>
        /// Override in derived classes to intercept method invocations.
        /// </summary>
        /// <param name="invocation"> The method invocation.</param>
        /// <param name="proceedInfo"> The Castle.DynamicProxy.IInvocationProceedInfo.</param>
        /// <param name="exception">THe exception object.</param>
        /// <returns></returns>
        protected abstract Task OnExceptionInvocation(IInvocation invocation, IInvocationProceedInfo proceedInfo, Exception exception);
    }
}


================================================
FILE: src/Liquid.Core/Decorators/LiquidContextDecorator.cs
================================================
using Liquid.Core.Entities;
using Liquid.Core.Exceptions;
using Liquid.Core.Interfaces;
using Liquid.Core.Settings;
using Microsoft.Extensions.Options;
using System;
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;

namespace Liquid.Core.Decorators
{
    /// <summary>
    /// Inserts configured context keys in LiquidContext service.
    /// Includes its behavior in worker service before process execution.
    /// </summary>
    public class LiquidContextDecorator<TEntity> : ILiquidWorker<TEntity>
    {
        private readonly ILiquidWorker<TEntity> _inner;
        private readonly ILiquidContext _context;
        private readonly IOptions<ScopedContextSettings> _options;

        /// <summary>
        /// Initialize a new instance of <see cref="LiquidContextDecorator{TEntity}"/>
        /// </summary>
        /// <param name="inner">Decorated service.</param>
        /// <param name="context">Scoped Context service.</param>
        /// <param name="options">Scoped context keys set.</param>
        public LiquidContextDecorator(ILiquidWorker<TEntity> inner, ILiquidContext context, IOptions<ScopedContextSettings> options)
        {
            _inner = inner ?? throw new ArgumentNullException(nameof(inner));
            _context = context ?? throw new ArgumentNullException(nameof(context));
            _options = options ?? throw new ArgumentNullException(nameof(options));
        }

        ///<inheritdoc/>
        public async Task ProcessMessageAsync(ConsumerMessageEventArgs<TEntity> args, CancellationToken cancellationToken)
        {
            object value = default;

            foreach (var key in _options.Value.Keys)
            {
                args.Headers?.TryGetValue(key.KeyName, out value);

                if (value is null && key.Required)
                    throw new MessagingMissingContextKeysException(key.KeyName);

                _context.Upsert(key.KeyName, value);
            }

            if (_options.Value.Culture)
            {
                _context.Upsert("culture", CultureInfo.CurrentCulture.Name);
            }

            await _inner.ProcessMessageAsync(args, cancellationToken);
        }
    }
}


================================================
FILE: src/Liquid.Core/Decorators/LiquidCultureDecorator.cs
================================================
using Liquid.Core.Entities;
using Liquid.Core.Interfaces;
using Liquid.Core.Settings;
using Microsoft.Extensions.Options;
using System;
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;

namespace Liquid.Core.Decorators
{
    /// <summary>
    /// Configures the culture in the current thread.
    /// Includes its behavior in worker service before process execution.
    /// </summary>
    public class LiquidCultureDecorator<TEntity> : ILiquidWorker<TEntity>
    {
        private const string _culture = "culture";
        private readonly IOptions<CultureSettings> _options;
        private readonly ILiquidWorker<TEntity> _inner;

        /// <summary>
        /// Initialize a new instance of <see cref="LiquidCultureDecorator{TEntity}"/>
        /// </summary>
        /// <param name="inner">Decorated service.</param>
        /// <param name="options">Default culture configuration.</param>
        public LiquidCultureDecorator(ILiquidWorker<TEntity> inner, IOptions<CultureSettings> options)
        {
            _inner = inner ?? throw new ArgumentNullException(nameof(inner));
            _options = options ?? throw new ArgumentNullException(nameof(options));
        }

        ///<inheritdoc/>
        public async Task ProcessMessageAsync(ConsumerMessageEventArgs<TEntity> args, CancellationToken cancellationToken)
        {
            object cultureCode = default;

            args.Headers?.TryGetValue(_culture, out cultureCode);

            if (cultureCode is null && !string.IsNullOrEmpty(_options.Value.DefaultCulture))
            {
                cultureCode = _options.Value.DefaultCulture;
            }

            if (cultureCode != null)
            {
                CultureInfo.DefaultThreadCurrentCulture = new CultureInfo(cultureCode.ToString());
                CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo(cultureCode.ToString());
            }

            await _inner.ProcessMessageAsync(args, cancellationToken);
        }
    }
}


================================================
FILE: src/Liquid.Core/Decorators/LiquidScopedLoggingDecorator.cs
================================================
using Liquid.Core.Entities;
using Liquid.Core.Exceptions;
using Liquid.Core.Interfaces;
using Liquid.Core.Settings;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace Liquid.Core.Decorators
{
    /// <summary>
    /// Inserts configured context keys in ILogger service scope.
    /// Includes its behavior in worker service before process execution.
    /// </summary>
    public class LiquidScopedLoggingDecorator<TEntity> : ILiquidWorker<TEntity>
    {
        private readonly ILogger<LiquidScopedLoggingDecorator<TEntity>> _logger;
        private readonly IOptions<ScopedLoggingSettings> _options;
        private readonly ILiquidWorker<TEntity> _inner;

        /// <summary>
        /// Initialize a new instance of <see cref="LiquidScopedLoggingDecorator{TEntity}"/>
        /// </summary>
        /// <param name="inner">Decorated service.</param>
        /// <param name="options">Default culture configuration.</param>
        /// <param name="logger">Logger service instance.</param>
        public LiquidScopedLoggingDecorator(ILiquidWorker<TEntity> inner
            , IOptions<ScopedLoggingSettings> options
            , ILogger<LiquidScopedLoggingDecorator<TEntity>> logger)
        {
            _inner = inner ?? throw new ArgumentNullException(nameof(inner));
            _options = options ?? throw new ArgumentNullException(nameof(options));
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
        }

        ///<inheritdoc/>
        public async Task ProcessMessageAsync(ConsumerMessageEventArgs<TEntity> args, CancellationToken cancellationToken)
        {
            var scope = new List<KeyValuePair<string, object>>();

            object value = default;

            foreach (var key in _options.Value.Keys)
            {
                args.Headers?.TryGetValue(key.KeyName, out value);

                if (value is null && key.Required)
                    throw new MessagingMissingScopedKeysException(key.KeyName);

                scope.Add(new KeyValuePair<string, object>(key.KeyName, value));
            }

            using (_logger.BeginScope(scope.ToArray()))
            {
                await _inner.ProcessMessageAsync(args, cancellationToken);
            }
        }
    }
}


================================================
FILE: src/Liquid.Core/Entities/ChatCompletionResult.cs
================================================
namespace Liquid.Core.Entities
{
    /// <summary>
    ///  Chat completions result set.
    /// </summary>
    public class ChatCompletionResult
    {
        /// <summary>
        /// The content of the response message.
        /// </summary>
        public string Content { get; set; }

        /// <summary>
        /// The reason the model stopped generating tokens, together with any applicable details.
        /// </summary>
        public string FinishReason { get; set; }

        /// <summary>
        /// The total number of tokens processed for the completions request and response.
        /// </summary>
        public int Usage { get; set; }

        /// <summary>
        /// The number of tokens used by the prompt.
        /// </summary>
        public int PromptUsage { get; set; }

        /// <summary>
        /// The number of tokens used by the completion.
        /// </summary>
        public int CompletionUsage { get; set; }
    }
}


================================================
FILE: src/Liquid.Core/Entities/ClientDictionary.cs
================================================
using System.Diagnostics.CodeAnalysis;

namespace Liquid.Core.Entities
{
    /// <summary>
    /// Client dictionary to store client instances.
    /// </summary>
    /// <typeparam name="T">Type of client service.</typeparam>
    [ExcludeFromCodeCoverage]
    public class ClientDictionary<T>
    {
        /// <summary>
        /// Number of executions for this client.
        /// </summary>
        public int Executions { get; set; } = 1;


        /// <summary>
        /// Client connection alias.
        /// </summary>
        public string ClientId { get; set; }

        /// <summary>
        /// Client instance.
        /// </summary>
        public T Client { get; set; }

        /// <summary>
        /// Initialize a new instance of <see cref="ClientDictionary{T}"/>.
        /// </summary>
        /// <param name="clientId">Client connection alias.</param>
        /// <param name="client">Client instance.</param>
        public ClientDictionary(string clientId, T client)
        {
            ClientId = clientId;
            Client = client;
        }
    }
}


================================================
FILE: src/Liquid.Core/Entities/ConsumerErrorEventArgs.cs
================================================
using System;

namespace Liquid.Core.Entities
{
    /// <summary>
    /// Arguments for processing errors occurred during process execution.
    /// </summary>
    public class ConsumerErrorEventArgs
    {
        /// <summary>
        ///   Represents errors that occur during process execution.
        /// </summary>
        public Exception Exception { get; set; }
    }
}

================================================
FILE: src/Liquid.Core/Entities/ConsumerMessageEventArgs.cs
================================================
using System.Collections.Generic;

namespace Liquid.Core.Entities
{
    /// <summary>
    /// 
    /// </summary>
    /// <typeparam name="TEvent"></typeparam>
    public class ConsumerMessageEventArgs<TEvent>
    {
        /// <summary>
        /// 
        /// </summary>
        public TEvent Data { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public IDictionary<string, object> Headers { get; set; }
    }
}

================================================
FILE: src/Liquid.Core/Entities/FunctionBody.cs
================================================
using System;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json;

namespace Liquid.Core.Entities
{
    /// <summary>
    /// The body of a function to be called.
    /// </summary>
    [ExcludeFromCodeCoverage]
    public class FunctionBody
    {

        /// <summary> The name of the function to be called. </summary>
        public string Name { get; set; }
        /// <summary>
        /// A description of what the function does. The model will use this description when selecting the function and
        /// interpreting its parameters.
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// The parameters the function accepts, described as a JSON Schema object.
        /// <para>
        /// To assign an object to this property use <see cref="BinaryData.FromObjectAsJson{T}(T, JsonSerializerOptions)"/>.
        /// </para>
        /// <para>
        /// To assign an already formatted json string to this property use <see cref="BinaryData.FromString(string)"/>.
        /// </para>
        /// </summary>
        public BinaryData Parameters { get; set; }

        /// <summary> Initializes a new instance of <see cref="FunctionBody"/>. </summary>
        /// <param name="name"> The name of the function to be called. </param>
        /// <param name="description">
        /// A description of what the function does. The model will use this description when selecting the function and
        /// interpreting its parameters.
        /// </param>
        /// <param name="parameters"> The parameters the function accepts, described as a JSON Schema object. </param>
        /// <exception cref="ArgumentException"></exception>
        /// <exception cref="ArgumentNullException"></exception>
        public FunctionBody(string name, string description, BinaryData parameters)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException($"'{nameof(name)}' cannot be null or empty.", nameof(name));
            }

            if (string.IsNullOrEmpty(description))
            {
                throw new ArgumentException($"'{nameof(description)}' cannot be null or empty.", nameof(description));
            }

            Name = name;
            Description = description;
            Parameters = parameters ?? throw new ArgumentNullException(nameof(parameters));

        }

        /// <summary>
        /// Initializes a new instance of <see cref="FunctionBody"/>.
        /// </summary>
        /// <param name="functionBody">function definition JSON string. </param>
        public FunctionBody(string functionBody)
        {
            var function = JsonSerializer.Deserialize<JsonElement>(functionBody);

            Name = function.GetProperty("name").ToString();
            Description = function.GetProperty("description").ToString();
            Parameters = BinaryData.FromObjectAsJson(function.GetProperty("parameters"));
        }
    }
}


================================================
FILE: src/Liquid.Core/Entities/LiquidBlob.cs
================================================
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;

namespace Liquid.Core.Entities
{
    /// <summary>
    /// Set de propriedades referentes à um item do BlobStorage.
    /// </summary>
    [ExcludeFromCodeCoverage]
    public class LiquidBlob
    {
        /// <summary>
        /// Lista de tags referentes ao blob.
        /// </summary>
        public IDictionary<string, string> Tags { get; set; } = new Dictionary<string, string>();

        /// <summary>
        /// Conteúdo do blob.
        /// </summary>
        public byte[] Blob { get; set; }

        /// <summary>
        /// Nome do arquivo no Storage.
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// Caminho do blob.
        /// </summary>
        public string AbsoluteUri { get; set; }

    }
}


================================================
FILE: src/Liquid.Core/Entities/LiquidEntity.cs
================================================
using System.Diagnostics.CodeAnalysis;

namespace Liquid.Core.Entities
{
    /// <summary>
    /// Represents the repository entity
    /// </summary>
    /// <typeparam name="TIdentifier">The type of the identifier.</typeparam>
    [ExcludeFromCodeCoverage]
    public class LiquidEntity<TIdentifier>
    {
        /// <summary>
        /// Gets or sets the identifier.
        /// </summary>
        /// <value>
        /// The identifier.
        /// </value>
        public virtual TIdentifier Id { get; set; }
    }
}


================================================
FILE: src/Liquid.Core/Entities/OcrResult.cs
================================================
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Drawing;

namespace Liquid.Core.Entities
{
    /// <summary>
    /// Optical Character Recognition result set.
    /// </summary>
    [ExcludeFromCodeCoverage]
    public class OcrResult
    {
        /// <summary>
        /// Recognition result content.
        /// </summary>
        public string Content { get; set; }

        /// <summary>
        ///Analyzed pages.
        /// </summary>
        public List<PageInfo> Pages { get; set; }
    }
    /// <summary>
    /// Analyzed page content.
    /// </summary>
    [ExcludeFromCodeCoverage]
    public class PageInfo
    {
        /// <summary>
        /// recognition result page index.
        /// </summary>
        public int PageNumber { get; set; }

        /// <summary>
        /// The unit used by the words and lines data polygon properties.
        /// </summary>
        public string PolygonUnit { get; set; }

        /// <summary>
        /// Extracted words from the page.
        /// </summary>
        public List<WordData> Words { get; set; } = new List<WordData>();

        /// <summary>
        /// Extracted lines from the page.
        /// </summary>
        public List<LineData> Lines { get; set; } = new List<LineData>();
    }
    /// <summary>
    /// A word object consisting of a contiguous sequence of characters.
    /// </summary>
    [ExcludeFromCodeCoverage]
    public class WordData
    {
        /// <summary>
        /// Text content of the word.
        /// </summary>
        public string Content { get; set; }
        /// <summary>
        /// Confidence of correctly extracting the word.
        /// </summary>
        public float Confidence { get; set; }

        /// <summary>
        /// The polygon that outlines the content of this word. Coordinates are specified relative to the
        /// top-left of the page, and points are ordered clockwise from the left relative to the word
        /// orientation.
        /// </summary>
        public List<PointF> Polygon { get; set; } = new List<PointF>();
    }

    /// <summary>
    ///  A content line object consisting of an adjacent sequence of content elements
    /// </summary>
    [ExcludeFromCodeCoverage]
    public class LineData
    {
        /// <summary>
        /// Concatenated content of the contained elements in reading order.
        /// </summary>
        public string Content { get; set; }

        /// <summary>
        /// The polygon that outlines the content of this line. Coordinates are specified relative to the
        /// top-left of the page, and points are ordered clockwise from the left relative to the line
        /// orientation.
        /// </summary>
        public List<PointF> Polygon { get; set; } = new List<PointF>();

    }
}


================================================
FILE: src/Liquid.Core/Exceptions/DataMappingException.cs
================================================
using System;
using System.Diagnostics.CodeAnalysis;

namespace Liquid.Core.Exceptions
{
    /// <summary>
    /// Occurs when an exception is raised during data mapping.
    /// </summary>
    [ExcludeFromCodeCoverage]
    public class DataMappingException : Exception
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DataMappingException"/> class.
        /// </summary>
        public DataMappingException()
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DataMappingException"/> class with a specified error message.
        /// </summary>
        /// <param name="message"></param>
        public DataMappingException(string message) : base(message)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DataMappingException"/> class with a specified error message and a reference to the inner exception that is the cause of this exception.
        /// </summary>
        /// <param name="message"></param>
        /// <param name="innerException"></param>
        public DataMappingException(string message, Exception innerException) : base(message, innerException)
        {
        }
    }
}

================================================
FILE: src/Liquid.Core/Exceptions/DatabaseContextException.cs
================================================
using System;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.Serialization;

namespace Liquid.Core.Exceptions
{
    /// <summary>
    /// Occurs when a Repository database throw an error.
    /// </summary>
    [ExcludeFromCodeCoverage]
    [Serializable]
    public class DatabaseContextException : LiquidException
    {
        ///<inheritdoc/>
        public DatabaseContextException(string message) : base(message)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DatabaseContextException"/> class.
        /// </summary>
        /// <param name="message">Error message custom text.</param>
        /// <param name="innerException">Exception throwed by the client.</param>
        public DatabaseContextException(string message, Exception innerException)
            : base(message, innerException)
        {
        }
    }
}


================================================
FILE: src/Liquid.Core/Exceptions/ExceptionCustomCodes.cs
================================================
using Liquid.Core.Base;
using System.Diagnostics.CodeAnalysis;

namespace Liquid.Core.Exceptions
{
    /// <summary>
    /// Contains Exceptions Custom Codes to be processed and converted to custom error codes.
    /// </summary>
    /// <seealso cref="Liquid.Core.Base.Enumeration" />
    [ExcludeFromCodeCoverage]
    public class ExceptionCustomCodes : Enumeration
    {
        /// <summary>
        /// Indicates that the item is not found.
        /// </summary>
        public static readonly ExceptionCustomCodes NotFound = new ExceptionCustomCodes(404, "NotFound");

        /// <summary>
        /// Indicates that an internal error has occurred.
        /// </summary>
        public static readonly ExceptionCustomCodes InternalError = new ExceptionCustomCodes(500, "InternalError");

        /// <summary>
        /// Indicates that the request is bad formatted a validation error has occurred.
        /// </summary>
        public static readonly ExceptionCustomCodes BadRequest = new ExceptionCustomCodes(400, "BadRequest");

        /// <summary>
        /// Indicates a conflict.
        /// </summary>
        public static readonly ExceptionCustomCodes Conflict = new ExceptionCustomCodes(409, "Conflict");

        /// <summary>
        /// Indicates the resource is not accessible.
        /// </summary>
        public static readonly ExceptionCustomCodes Forbidden = new ExceptionCustomCodes(403, "Forbidden");

        /// <summary>
        /// Indicates a timeout error.
        /// </summary>
        public static readonly ExceptionCustomCodes Timeout = new ExceptionCustomCodes(408, "Timeout");

        /// <summary>
        /// Indicates the item is not authorized.
        /// </summary>
        public static readonly ExceptionCustomCodes Unauthorized = new ExceptionCustomCodes(401, "Unauthorized");

        /// <summary>
        /// Initializes a new instance of the <see cref="ExceptionCustomCodes"/> class.
        /
Download .txt
gitextract_r5h2xvzw/

├── .editorconfig
├── .github/
│   ├── dco.yml
│   └── workflows/
│       ├── base-liquid-ci-and-cd.yml
│       ├── liquid-ci-cd-cache-memory.yml
│       ├── liquid-ci-cd-cache-ncache.yml
│       ├── liquid-ci-cd-cache-redis.yml
│       ├── liquid-ci-cd-cache-sqlserver.yml
│       ├── liquid-ci-cd-core-telemetry-elasticapm.yaml
│       ├── liquid-ci-cd-core.yml
│       ├── liquid-ci-cd-dataverse.yml
│       ├── liquid-ci-cd-genai-openai.yml
│       ├── liquid-ci-cd-http.yml
│       ├── liquid-ci-cd-messaging-kafka.yaml
│       ├── liquid-ci-cd-messaging-rabbitmq.yaml
│       ├── liquid-ci-cd-messaging-servicebus.yaml
│       ├── liquid-ci-cd-repository-entityframework.yml
│       ├── liquid-ci-cd-repository-mongodb.yml
│       ├── liquid-ci-cd-repository-odata.yml
│       ├── liquid-ci-cd-storage-azurestorage.yml
│       └── liquid-ci-cd-templates.yaml
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── Liquid.Adapters.sln
├── Liquid.Application.Framework.sln
├── Liquid.WebApi.sln
├── README.md
├── docs/
│   ├── About-Lightweight-Architectures.md
│   ├── About-Liquid-Applications.md
│   ├── About-Liquid.md
│   ├── Business-logic-seggregation.md
│   ├── Introduction.md
│   ├── Key-Concepts.md
│   ├── Platform-Abstraction-Layer.md
│   └── Using-Liquid-for-building-your-application.md
├── nuget.config
├── samples/
│   ├── Liquid.Sample.Dataverse.sln
│   ├── Liquid.Sample.MessagingConsumer.sln
│   ├── Liquid.Sample.WebApi.sln
│   └── src/
│       ├── Liquid.Sample.Api/
│       │   ├── Controllers/
│       │   │   └── SampleController.cs
│       │   ├── Liquid.Sample.Api.csproj
│       │   ├── Program.cs
│       │   ├── appsettings.Development.json
│       │   └── appsettings.json
│       ├── Liquid.Sample.Dataverse.Domain/
│       │   ├── Liquid.Sample.Dataverse.Domain.csproj
│       │   └── PostSampleService.cs
│       ├── Liquid.Sample.Dataverse.Function/
│       │   ├── .gitignore
│       │   ├── DataverseIntegration.cs
│       │   ├── Liquid.Sample.Dataverse.Function.csproj
│       │   ├── Properties/
│       │   │   ├── serviceDependencies.json
│       │   │   └── serviceDependencies.local.json
│       │   ├── Startup.cs
│       │   ├── host.json
│       │   └── local.settings.json
│       ├── Liquid.Sample.Domain/
│       │   ├── Entities/
│       │   │   ├── SampleEntity.cs
│       │   │   └── SampleMessageEntity.cs
│       │   ├── Handlers/
│       │   │   ├── SampleGet/
│       │   │   │   ├── SampleCommandHandler.cs
│       │   │   │   ├── SampleRequest.cs
│       │   │   │   ├── SampleRequestValidator.cs
│       │   │   │   └── SampleResponse.cs
│       │   │   ├── SamplePost/
│       │   │   │   ├── SampleEventCommandHandler.cs
│       │   │   │   ├── SampleEventRequest.cs
│       │   │   │   └── SampleEventRequestValidator.cs
│       │   │   └── SamplePut/
│       │   │       ├── PutCommandHandler.cs
│       │   │       ├── PutCommandRequest.cs
│       │   │       └── PutCommandRequestValidator.cs
│       │   └── Liquid.Sample.Domain.csproj
│       └── Liquid.Sample.MessagingConsumer/
│           ├── Liquid.Sample.MessagingConsumer.csproj
│           ├── Program.cs
│           ├── Worker.cs
│           ├── appsettings.Development.json
│           └── appsettings.json
├── src/
│   ├── Liquid.Cache.Memory/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtension.cs
│   │   └── Liquid.Cache.Memory.csproj
│   ├── Liquid.Cache.NCache/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtension.cs
│   │   ├── Liquid.Cache.NCache.csproj
│   │   ├── client.ncconf
│   │   ├── config.ncconf
│   │   └── tls.ncconf
│   ├── Liquid.Cache.Redis/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtension.cs
│   │   └── Liquid.Cache.Redis.csproj
│   ├── Liquid.Cache.SqlServer/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtension.cs
│   │   └── Liquid.Cache.SqlServer.csproj
│   ├── Liquid.Core/
│   │   ├── AbstractMappers/
│   │   │   ├── LiquidMapper.cs
│   │   │   └── OcrResultMapper.cs
│   │   ├── Attributes/
│   │   │   └── LiquidSectionNameAttribute.cs
│   │   ├── Base/
│   │   │   ├── Enumeration.cs
│   │   │   └── LiquidInterceptorBase.cs
│   │   ├── Decorators/
│   │   │   ├── LiquidContextDecorator.cs
│   │   │   ├── LiquidCultureDecorator.cs
│   │   │   └── LiquidScopedLoggingDecorator.cs
│   │   ├── Entities/
│   │   │   ├── ChatCompletionResult.cs
│   │   │   ├── ClientDictionary.cs
│   │   │   ├── ConsumerErrorEventArgs.cs
│   │   │   ├── ConsumerMessageEventArgs.cs
│   │   │   ├── FunctionBody.cs
│   │   │   ├── LiquidBlob.cs
│   │   │   ├── LiquidEntity.cs
│   │   │   └── OcrResult.cs
│   │   ├── Exceptions/
│   │   │   ├── DataMappingException.cs
│   │   │   ├── DatabaseContextException.cs
│   │   │   ├── ExceptionCustomCodes.cs
│   │   │   ├── LiquidCustomException.cs
│   │   │   ├── LiquidDatabaseSettingsDoesNotExistException.cs
│   │   │   ├── LiquidException.cs
│   │   │   ├── MessagingConsumerException.cs
│   │   │   ├── MessagingMissingConfigurationException.cs
│   │   │   ├── MessagingMissingContextKeysException.cs
│   │   │   ├── MessagingMissingScopedKeysException.cs
│   │   │   ├── MessagingMissingSettingsException.cs
│   │   │   ├── MessagingProducerException.cs
│   │   │   ├── SerializerFailException.cs
│   │   │   ├── UnitOfWorkTransactionNotStartedException.cs
│   │   │   └── UnitOfWorkTransactionWithoutRepositoryException.cs
│   │   ├── Extensions/
│   │   │   ├── ByteExtension.cs
│   │   │   ├── CommonExtensions.cs
│   │   │   ├── DateTimeExtension.cs
│   │   │   ├── DependencyInjection/
│   │   │   │   ├── IServiceCollectionAutoMapperExtensions.cs
│   │   │   │   ├── IServiceCollectionCoreExtensions.cs
│   │   │   │   ├── IServiceCollectionLiquidExtension.cs
│   │   │   │   ├── IServiceCollectionTypeExtensions.cs
│   │   │   │   └── IServiceProviderExtensions.cs
│   │   │   ├── EnumExtension.cs
│   │   │   ├── IEnumerableExtension.cs
│   │   │   ├── IntExtension.cs
│   │   │   ├── ObjectExtension.cs
│   │   │   ├── StreamExtension.cs
│   │   │   ├── StringExtension.cs
│   │   │   └── TypeExtensions.cs
│   │   ├── GenAi/
│   │   │   ├── Entities/
│   │   │   │   ├── LiquidChatContent.cs
│   │   │   │   ├── LiquidChatMessage.cs
│   │   │   │   └── LiquidChatMessages.cs
│   │   │   ├── Enums/
│   │   │   │   ├── LiquidContentKind.cs
│   │   │   │   └── LiquidMessageRole.cs
│   │   │   ├── Interfaces/
│   │   │   │   ├── ILiquidGenAi.cs
│   │   │   │   └── ILiquidGenAiHandler.cs
│   │   │   └── Settings/
│   │   │       └── CompletionsOptions.cs
│   │   ├── Implementations/
│   │   │   ├── LiquidBackgroundService.cs
│   │   │   ├── LiquidCache.cs
│   │   │   ├── LiquidContext.cs
│   │   │   ├── LiquidContextNotifications.cs
│   │   │   ├── LiquidJsonSerializer.cs
│   │   │   ├── LiquidSerializerProvider.cs
│   │   │   ├── LiquidTelemetryInterceptor.cs
│   │   │   ├── LiquidUnitOfWork.cs
│   │   │   └── LiquidXmlSerializer.cs
│   │   ├── Interfaces/
│   │   │   ├── ILiquidCache.cs
│   │   │   ├── ILiquidConsumer.cs
│   │   │   ├── ILiquidContext.cs
│   │   │   ├── ILiquidContextNotifications.cs
│   │   │   ├── ILiquidDataContext.cs
│   │   │   ├── ILiquidMapper.cs
│   │   │   ├── ILiquidOcr.cs
│   │   │   ├── ILiquidProducer.cs
│   │   │   ├── ILiquidRepository.cs
│   │   │   ├── ILiquidSerializer.cs
│   │   │   ├── ILiquidSerializerProvider.cs
│   │   │   ├── ILiquidStorage.cs
│   │   │   ├── ILiquidUnitOfWork.cs
│   │   │   └── ILiquidWorker.cs
│   │   ├── Liquid.Core.csproj
│   │   ├── Localization/
│   │   │   ├── Entities/
│   │   │   │   ├── LocalizationCollection.cs
│   │   │   │   ├── LocalizationItem.cs
│   │   │   │   └── LocalizationValue.cs
│   │   │   ├── ILocalization.cs
│   │   │   ├── JsonFileLocalization.cs
│   │   │   ├── LocalizationException.cs
│   │   │   ├── LocalizationExtensions.cs
│   │   │   └── LocalizationReaderException.cs
│   │   ├── PipelineBehaviors/
│   │   │   ├── LiquidTelemetryBehavior.cs
│   │   │   └── LiquidValidationBehavior.cs
│   │   ├── Settings/
│   │   │   ├── CultureSettings.cs
│   │   │   ├── DatabaseSettings.cs
│   │   │   ├── GenAiOptions.cs
│   │   │   ├── OcrOptions.cs
│   │   │   ├── ScopedContextSettings.cs
│   │   │   ├── ScopedKey.cs
│   │   │   └── ScopedLoggingSettings.cs
│   │   └── Utils/
│   │       ├── TypeUtils.cs
│   │       └── ZipUtils.cs
│   ├── Liquid.Core.Telemetry.ElasticApm/
│   │   ├── Extensions/
│   │   │   ├── DependencyInjection/
│   │   │   │   ├── IApplicationBuilderExtensions.cs
│   │   │   │   └── IServiceCollectionExtensions.cs
│   │   │   └── IConfigurationExtension.cs
│   │   ├── Implementations/
│   │   │   ├── LiquidElasticApmInterceptor.cs
│   │   │   └── LiquidElasticApmTelemetryBehavior.cs
│   │   └── Liquid.Core.Telemetry.ElasticApm.csproj
│   ├── Liquid.Dataverse/
│   │   ├── DataverseClientFactory.cs
│   │   ├── DataverseEntityMapper.cs
│   │   ├── DataverseSettings.cs
│   │   ├── Extensions/
│   │   │   ├── DependencyInjection/
│   │   │   │   └── IServiceCollectionExtensions.cs
│   │   │   └── EntityExtensions.cs
│   │   ├── IDataverseClientFactory.cs
│   │   ├── ILiquidDataverse.cs
│   │   ├── Liquid.Dataverse.csproj
│   │   └── LiquidDataverse.cs
│   ├── Liquid.GenAi.OpenAi/
│   │   ├── Extensions/
│   │   │   └── IServiceCollectionExtension.cs
│   │   ├── IOpenAiClientFactory.cs
│   │   ├── Liquid.GenAi.OpenAi.csproj
│   │   ├── OpenAiAdapter.cs
│   │   ├── OpenAiClientFactory.cs
│   │   └── Settings/
│   │       └── OpenAiOptions.cs
│   ├── Liquid.Messaging.Kafka/
│   │   ├── Extensions/
│   │   │   ├── DependencyInjection/
│   │   │   │   └── IServiceCollectionExtension.cs
│   │   │   └── HeadersExtension.cs
│   │   ├── IKafkaFactory.cs
│   │   ├── KafkaConsumer.cs
│   │   ├── KafkaFactory.cs
│   │   ├── KafkaProducer.cs
│   │   ├── Liquid.Messaging.Kafka.csproj
│   │   └── Settings/
│   │       └── KafkaSettings.cs
│   ├── Liquid.Messaging.RabbitMq/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtension.cs
│   │   ├── IRabbitMqFactory.cs
│   │   ├── Liquid.Messaging.RabbitMq.csproj
│   │   ├── RabbitMqConsumer.cs
│   │   ├── RabbitMqFactory.cs
│   │   ├── RabbitMqProducer.cs
│   │   └── Settings/
│   │       ├── AdvancedSettings.cs
│   │       ├── QueueAckModeEnum.cs
│   │       ├── QueueAckModeSettings.cs
│   │       ├── RabbitMqConsumerSettings.cs
│   │       ├── RabbitMqProducerSettings.cs
│   │       └── RabbitMqSettings.cs
│   ├── Liquid.Messaging.ServiceBus/
│   │   ├── Extensions/
│   │   │   └── DependencyInjection/
│   │   │       └── IServiceCollectionExtensions.cs
│   │   ├── IServiceBusFactory.cs
│   │   ├── Liquid.Messaging.ServiceBus.csproj
│   │   ├── ServiceBusConsumer.cs
│   │   ├── ServiceBusFactory.cs
│   │   ├── ServiceBusProducer.cs
│   │   └── Settings/
│   │       └── ServiceBusSettings.cs
│   ├── Liquid.Repository.EntityFramework/
│   │   ├── EntityFrameworkDataContext.cs
│   │   ├── EntityFrameworkRepository.cs
│   │   ├── Exceptions/
│   │   │   └── DatabaseDoesNotExistException.cs
│   │   ├── Extensions/
│   │   │   ├── DbContextExtensions.cs
│   │   │   ├── ILiquidRepositoryExtensions.cs
│   │   │   └── IServiceCollectionExtensions.cs
│   │   ├── IEntityFrameworkDataContext.cs
│   │   └── Liquid.Repository.EntityFramework.csproj
│   ├── Liquid.Repository.Mongo/
│   │   ├── Exceptions/
│   │   │   ├── MongoEntitySettingsDoesNotExistException.cs
│   │   │   └── MongoException.cs
│   │   ├── Extensions/
│   │   │   ├── IMongoCollectionExtensions.cs
│   │   │   └── IServiceCollectionExtensions.cs
│   │   ├── IMongoClientFactory.cs
│   │   ├── IMongoDataContext.cs
│   │   ├── Liquid.Repository.Mongo.csproj
│   │   ├── MongoClientFactory.cs
│   │   ├── MongoDataContext.cs
│   │   ├── MongoRepository.cs
│   │   └── Settings/
│   │       └── MongoEntitySettings.cs
│   ├── Liquid.Repository.OData/
│   │   ├── Extensions/
│   │   │   └── IServiceCollectionExtension.cs
│   │   ├── IODataClientFactory.cs
│   │   ├── Liquid.Repository.OData.csproj
│   │   ├── ODataClientFactory.cs
│   │   ├── ODataRepository.cs
│   │   └── ODataSettings.cs
│   ├── Liquid.Storage.AzureStorage/
│   │   ├── BlobClientFactory.cs
│   │   ├── Extensions/
│   │   │   └── IServiceCollectionExtensions.cs
│   │   ├── IBlobClientFactory.cs
│   │   ├── Liquid.Storage.AzureStorage.csproj
│   │   ├── LiquidStorageAzure.cs
│   │   └── StorageSettings.cs
│   └── Liquid.WebApi.Http/
│       ├── Attributes/
│       │   ├── SwaggerAuthorizationHeaderAttribute.cs
│       │   ├── SwaggerBaseHeaderAttribute.cs
│       │   ├── SwaggerChannelHeaderAttribute.cs
│       │   ├── SwaggerCultureHeaderAttribute.cs
│       │   └── SwaggerCustomHeaderAttribute.cs
│       ├── Entities/
│       │   └── LiquidErrorResponse.cs
│       ├── Exceptions/
│       │   ├── LiquidContextKeysException.cs
│       │   └── LiquidScopedKeysException.cs
│       ├── Extensions/
│       │   ├── DependencyInjection/
│       │   │   ├── IApplicationBuilderExtensions.cs
│       │   │   └── IServiceCollectionExtensions.cs
│       │   └── HttpContextExtensions.cs
│       ├── Filters/
│       │   └── Swagger/
│       │       ├── AddHeaderParameterFilter.cs
│       │       ├── DefaultResponseFilter.cs
│       │       ├── DocumentSortFilter.cs
│       │       └── OverloadMethodsSameVerb.cs
│       ├── Implementations/
│       │   ├── LiquidControllerBase.cs
│       │   └── LiquidNotificationHelper.cs
│       ├── Interfaces/
│       │   └── ILiquidNotificationHelper.cs
│       ├── Liquid.WebApi.Http.csproj
│       ├── Middlewares/
│       │   ├── LiquidContextMiddleware.cs
│       │   ├── LiquidCultureMiddleware.cs
│       │   ├── LiquidExceptionMiddleware.cs
│       │   └── LiquidScopedLoggingMiddleware.cs
│       └── Settings/
│           └── SwaggerSettings.cs
├── templates/
│   ├── Liquid.Templates.sln
│   └── src/
│       └── Liquid.Templates/
│           ├── Liquid.Templates.csproj
│           └── Templates/
│               ├── Liquid.Crud.AddEntity/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   ├── PROJECTNAME.Domain/
│               │   │   ├── Entities/
│               │   │   │   └── ENTITYNAME.cs
│               │   │   └── Handlers/
│               │   │       ├── CreateENTITYNAME/
│               │   │       │   ├── CreateENTITYNAMEHandler.cs
│               │   │       │   ├── CreateENTITYNAMERequest.cs
│               │   │       │   └── CreateENTITYNAMEValidator.cs
│               │   │       ├── ListENTITYNAME/
│               │   │       │   ├── ListENTITYNAMEHandler.cs
│               │   │       │   ├── ListENTITYNAMERequest.cs
│               │   │       │   └── ListENTITYNAMEResponse.cs
│               │   │       ├── ReadENTITYNAME/
│               │   │       │   ├── ReadENTITYNAMEHandler.cs
│               │   │       │   ├── ReadENTITYNAMERequest.cs
│               │   │       │   └── ReadENTITYNAMEResponse.cs
│               │   │       ├── RemoveENTITYNAME/
│               │   │       │   ├── RemoveENTITYNAMEHandler.cs
│               │   │       │   ├── RemoveENTITYNAMERequest.cs
│               │   │       │   └── RemoveENTITYNAMEResponse.cs
│               │   │       └── UpdateENTITYNAME/
│               │   │           ├── UpdateENTITYNAMEHandler.cs
│               │   │           ├── UpdateENTITYNAMERequest.cs
│               │   │           ├── UpdateENTITYNAMEResponse.cs
│               │   │           └── UpdateENTITYNAMEValidator.cs
│               │   └── PROJECTNAME.WebApi/
│               │       └── Controllers/
│               │           └── ENTITYNAMEController.cs
│               ├── Liquid.Crud.Solution/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── src/
│               │       ├── PROJECTNAME.Domain/
│               │       │   ├── Entities/
│               │       │   │   └── ENTITYNAME.cs
│               │       │   ├── Handlers/
│               │       │   │   ├── CreateENTITYNAME/
│               │       │   │   │   ├── CreateENTITYNAMEHandler.cs
│               │       │   │   │   ├── CreateENTITYNAMERequest.cs
│               │       │   │   │   └── CreateENTITYNAMEValidator.cs
│               │       │   │   ├── ListENTITYNAME/
│               │       │   │   │   ├── ListENTITYNAMEHandler.cs
│               │       │   │   │   ├── ListENTITYNAMERequest.cs
│               │       │   │   │   └── ListENTITYNAMEResponse.cs
│               │       │   │   ├── ReadENTITYNAME/
│               │       │   │   │   ├── ReadENTITYNAMEHandler.cs
│               │       │   │   │   ├── ReadENTITYNAMERequest.cs
│               │       │   │   │   └── ReadENTITYNAMEResponse.cs
│               │       │   │   ├── RemoveENTITYNAME/
│               │       │   │   │   ├── RemoveENTITYNAMEHandler.cs
│               │       │   │   │   ├── RemoveENTITYNAMERequest.cs
│               │       │   │   │   └── RemoveENTITYNAMEResponse.cs
│               │       │   │   └── UpdateENTITYNAME/
│               │       │   │       ├── UpdateENTITYNAMEHandler.cs
│               │       │   │       ├── UpdateENTITYNAMERequest.cs
│               │       │   │       ├── UpdateENTITYNAMEResponse.cs
│               │       │   │       └── UpdateENTITYNAMEValidator.cs
│               │       │   ├── IDomainInjection.cs
│               │       │   └── PROJECTNAME.Domain.csproj
│               │       ├── PROJECTNAME.Microservice.sln
│               │       └── PROJECTNAME.WebApi/
│               │           ├── Controllers/
│               │           │   └── ENTITYNAMEController.cs
│               │           ├── PROJECTNAME.WebApi.csproj
│               │           ├── PROJECTNAME.WebApi.http
│               │           ├── Program.cs
│               │           ├── appsettings.Development.json
│               │           └── appsettings.json
│               ├── Liquid.DbContext.AddEntity/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.Repository/
│               │       └── Configurations/
│               │           └── ENTITYNAMEConfiguration.cs
│               ├── Liquid.DbContext.Project/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.Repository/
│               │       ├── Configurations/
│               │       │   └── ENTITYNAMEConfiguration.cs
│               │       ├── LiquidDbContext.cs
│               │       └── PROJECTNAME.Repository.csproj
│               ├── Liquid.Domain.AddHandler/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.Domain/
│               │       └── Handlers/
│               │           └── COMMANDNAMEENTITYNAME/
│               │               ├── COMMANDNAMEENTITYNAMEHandler.cs
│               │               ├── COMMANDNAMEENTITYNAMERequest.cs
│               │               ├── COMMANDNAMEENTITYNAMEResponse.cs
│               │               └── COMMANDNAMEENTITYNAMEValidator.cs
│               ├── Liquid.Domain.Project/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.Domain/
│               │       ├── Entities/
│               │       │   └── ENTITYNAME.cs
│               │       ├── Handlers/
│               │       │   └── COMMANDNAMEENTITYNAME/
│               │       │       ├── COMMANDNAMEENTITYNAMEHandler.cs
│               │       │       ├── COMMANDNAMEENTITYNAMERequest.cs
│               │       │       ├── COMMANDNAMEENTITYNAMEResponse.cs
│               │       │       └── COMMANDNAMEENTITYNAMEValidator.cs
│               │       └── PROJECTNAME.Domain.csproj
│               ├── Liquid.WebApi.AddEntity/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   ├── PROJECTNAME.Domain/
│               │   │   ├── Entities/
│               │   │   │   └── ENTITYNAME.cs
│               │   │   └── Handlers/
│               │   │       └── COMMANDNAMEENTITYNAME/
│               │   │           ├── COMMANDNAMEENTITYNAMEHandler.cs
│               │   │           ├── COMMANDNAMEENTITYNAMERequest.cs
│               │   │           ├── COMMANDNAMEENTITYNAMEResponse.cs
│               │   │           └── COMMANDNAMEENTITYNAMEValidator.cs
│               │   └── PROJECTNAME.WebApi/
│               │       └── Controllers/
│               │           └── ENTITYNAMEController.cs
│               ├── Liquid.WebApi.Project/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.WebApi/
│               │       ├── Controllers/
│               │       │   └── ENTITYNAMEController.cs
│               │       ├── PROJECTNAME.WebApi.csproj
│               │       ├── PROJECTNAME.WebApi.http
│               │       ├── Program.cs
│               │       ├── appsettings.Development.json
│               │       └── appsettings.json
│               ├── Liquid.WebApi.Solution/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── src/
│               │       ├── PROJECTNAME.Domain/
│               │       │   ├── Entities/
│               │       │   │   └── ENTITYNAME.cs
│               │       │   ├── Handlers/
│               │       │   │   └── COMMANDNAMEENTITYNAME/
│               │       │   │       ├── COMMANDNAMEENTITYNAMEHandler.cs
│               │       │   │       ├── COMMANDNAMEENTITYNAMERequest.cs
│               │       │   │       ├── COMMANDNAMEENTITYNAMEResponse.cs
│               │       │   │       └── COMMANDNAMEENTITYNAMEValidator.cs
│               │       │   └── PROJECTNAME.Domain.csproj
│               │       ├── PROJECTNAME.Microservice.sln
│               │       └── PROJECTNAME.WebApi/
│               │           ├── Controllers/
│               │           │   └── ENTITYNAMEController.cs
│               │           ├── PROJECTNAME.WebApi.csproj
│               │           ├── PROJECTNAME.WebApi.http
│               │           ├── Program.cs
│               │           ├── appsettings.Development.json
│               │           └── appsettings.json
│               ├── Liquid.WorkerService.Project/
│               │   ├── .template.config/
│               │   │   └── template.json
│               │   └── PROJECTNAME.WorkerService/
│               │       ├── PROJECTNAME.WorkerService.csproj
│               │       ├── Program.cs
│               │       ├── Worker.cs
│               │       ├── appsettings.Development.json
│               │       └── appsettings.json
│               └── Liquid.WorkerService.Solution/
│                   ├── .template.config/
│                   │   └── template.json
│                   └── src/
│                       ├── PROJECTNAME.Domain/
│                       │   ├── Entities/
│                       │   │   └── ENTITYNAME.cs
│                       │   ├── Handlers/
│                       │   │   └── COMMANDNAMEENTITYNAME/
│                       │   │       ├── COMMANDNAMEENTITYNAMEHandler.cs
│                       │   │       ├── COMMANDNAMEENTITYNAMERequest.cs
│                       │   │       ├── COMMANDNAMEENTITYNAMEResponse.cs
│                       │   │       └── COMMANDNAMEENTITYNAMEValidator.cs
│                       │   └── PROJECTNAME.Domain.csproj
│                       ├── PROJECTNAME.Microservice.sln
│                       └── PROJECTNAME.WorkerService/
│                           ├── PROJECTNAME.WorkerService.csproj
│                           ├── Program.cs
│                           ├── Worker.cs
│                           ├── appsettings.Development.json
│                           └── appsettings.json
└── test/
    ├── CodeCoverage.runsettings
    ├── Liquid.Cache.Memory.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   └── Liquid.Cache.Memory.Tests.csproj
    ├── Liquid.Cache.NCache.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   ├── Liquid.Cache.NCache.Tests.csproj
    │   ├── client.ncconf
    │   ├── config.ncconf
    │   └── tls.ncconf
    ├── Liquid.Cache.Redis.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   └── Liquid.Cache.Redis.Tests.csproj
    ├── Liquid.Cache.SqlServer.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   └── Liquid.Cache.SqlServer.Tests.csproj
    ├── Liquid.Core.Telemetry.ElasticApm.Tests/
    │   ├── Extensions/
    │   │   └── IServiceCollectionExtension.cs
    │   ├── IApplicationBuilderExtensionsTests.cs
    │   ├── IServiceCollectionExtensionsTests.cs
    │   ├── Liquid.Core.Telemetry.ElasticApm.Tests.csproj
    │   ├── LiquidElasticApmInterceptorTests.cs
    │   ├── LiquidElasticApmTelemetryBehaviorTests.cs
    │   ├── Mocks/
    │   │   ├── CommandHandlerMock.cs
    │   │   ├── IMockService.cs
    │   │   ├── MockService.cs
    │   │   ├── RequestMock.cs
    │   │   └── ResponseMock.cs
    │   └── Settings/
    │       ├── ConfigurationSettings.cs
    │       ├── ElasticApmSettings.cs
    │       └── IElasticApmSettings.cs
    ├── Liquid.Core.Tests/
    │   ├── Cache/
    │   │   ├── IServiceCollectionExtensionTests.cs
    │   │   └── LiquidCacheTests.cs
    │   ├── CommandHandlers/
    │   │   ├── Test1/
    │   │   │   ├── Test1Command.cs
    │   │   │   ├── Test1CommandHandler.cs
    │   │   │   └── Test1Response.cs
    │   │   └── Test2/
    │   │       ├── Test2Command.cs
    │   │       ├── Test2CommandHandler.cs
    │   │       ├── Test2CommandValidator.cs
    │   │       └── Test2Response.cs
    │   ├── Core/
    │   │   ├── IServiceCollectionLiquidExtensionTest.cs
    │   │   ├── LiquidContextNotificationsTest.cs
    │   │   ├── LiquidContextTest.cs
    │   │   ├── LiquidJsonSerializerTest.cs
    │   │   ├── LiquidSerializerProviderTest.cs
    │   │   ├── LiquidTelemetryInterceptorTest.cs
    │   │   ├── LiquidXmlSerializerTest.cs
    │   │   └── LocalizationTest.cs
    │   ├── Domain/
    │   │   └── RequestHandlerTest.cs
    │   ├── Liquid.Core.Tests.csproj
    │   ├── Messaging/
    │   │   ├── IServiceCollectionExtensionTest.cs
    │   │   ├── LiquidBackgroundServiceTest.cs
    │   │   ├── LiquidContextDecoratorTest.cs
    │   │   ├── LiquidCultureDecoratorTest.cs
    │   │   └── LiquidScopedLoggingDecoratorTest.cs
    │   ├── Mocks/
    │   │   ├── AnotherTestEntity.cs
    │   │   ├── CommandHandlerMock.cs
    │   │   ├── CommandRequestMock.cs
    │   │   ├── EntityMock.cs
    │   │   ├── IMockService.cs
    │   │   ├── InMemoryRepository.cs
    │   │   ├── MockInterceptService.cs
    │   │   ├── MockSerializeObject.cs
    │   │   ├── MockService.cs
    │   │   ├── MockSettings.cs
    │   │   ├── MockType.cs
    │   │   ├── TestEntity.cs
    │   │   └── WorkerMock.cs
    │   ├── Repository/
    │   │   └── LiquidUnitOfWorkTests.cs
    │   ├── appsettings.json
    │   ├── client.ncconf
    │   ├── config.ncconf
    │   ├── localization.en-US.json
    │   ├── localization.es-ES.json
    │   ├── localization.json
    │   └── tls.ncconf
    ├── Liquid.Dataverse.Tests/
    │   ├── DataverseClientFactoryTests.cs
    │   ├── Liquid.Dataverse.Tests.csproj
    │   ├── LiquidDataverseTests.cs
    │   └── Usings.cs
    ├── Liquid.GenAi.OpenAi.Tests/
    │   ├── Liquid.GenAi.OpenAi.Tests.csproj
    │   └── OpenAiClientFactoryTests.cs
    ├── Liquid.Messaging.Kafka.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   ├── KafkaFactoryTest.cs
    │   ├── KafkaProducerTest.cs
    │   ├── Liquid.Messaging.Kafka.Tests.csproj
    │   ├── Mock/
    │   │   ├── HandlerMock/
    │   │   │   ├── MockCommandHandler.cs
    │   │   │   ├── MockRequest.cs
    │   │   │   └── MockValidator.cs
    │   │   ├── MessageMock.cs
    │   │   ├── WorkerMediatorMock.cs
    │   │   └── WorkerMock .cs
    │   └── kafkaConsumerTest.cs
    ├── Liquid.Messaging.RabbitMq.Tests/
    │   ├── IServiceCollectionExtensionTest.cs
    │   ├── Liquid.Messaging.RabbitMq.Tests.csproj
    │   ├── Mock/
    │   │   ├── HandlerMock/
    │   │   │   ├── MockCommandHandler.cs
    │   │   │   ├── MockRequest.cs
    │   │   │   └── MockValidator.cs
    │   │   ├── MessageMock.cs
    │   │   ├── WorkerMediatorMock.cs
    │   │   └── WorkerMock .cs
    │   ├── RabbitMqConsumerTest.cs
    │   └── RabbitMqProducerTest.cs
    ├── Liquid.Messaging.ServiceBus.Tests/
    │   ├── Liquid.Messaging.ServiceBus.Tests.csproj
    │   ├── Mock/
    │   │   └── EntityMock.cs
    │   ├── ServiceBusConsumerTest.cs
    │   ├── ServiceBusFactoryTest.cs
    │   ├── ServiceBusFactoryTests.cs
    │   └── ServiceBusProducerTest.cs
    ├── Liquid.Repository.EntityFramework.Tests/
    │   ├── Configurations/
    │   │   └── MockTypeConfiguration.cs
    │   ├── Entities/
    │   │   ├── MockEntity.cs
    │   │   └── MockSubEntity.cs
    │   ├── EntityFrameworkDataContextTests.cs
    │   ├── EntityFrameworkRepositoryTest.cs
    │   ├── Liquid.Repository.EntityFramework.Tests.csproj
    │   └── MockDbContext.cs
    ├── Liquid.Repository.Mongo.Tests/
    │   ├── IServiceCollectionExtensionsTests.cs
    │   ├── Liquid.Repository.Mongo.Tests.csproj
    │   ├── Mock/
    │   │   ├── AnotherTestEntity.cs
    │   │   ├── AsyncCursorMock.cs
    │   │   └── TestEntity.cs
    │   ├── MongoClientFactoryTests.cs
    │   ├── MongoDataContextTests.cs
    │   └── MongoRepositoryTests.cs
    ├── Liquid.Repository.OData.Tests/
    │   ├── GlobalUsings.cs
    │   ├── IServiceCollectionExtensionTests.cs
    │   ├── Liquid.Repository.OData.Tests.csproj
    │   ├── Mock/
    │   │   ├── AnotherTestEntity.cs
    │   │   ├── MockPeople.cs
    │   │   ├── MyMockHttpMessageHandler.cs
    │   │   └── TestEntity.cs
    │   ├── ODataClientFactoryTests.cs
    │   └── ODataRepositoryTests.cs
    ├── Liquid.Storage.AzureStorage.Tests/
    │   ├── BlobClientFactoryTests.cs
    │   ├── Liquid.Storage.AzureStorage.Tests.csproj
    │   ├── LiquidStorageAzureTests.cs
    │   └── Usings.cs
    └── Liquid.WebApi.Http.Tests/
        ├── Liquid.WebApi.Http.Tests.csproj
        ├── LiquidControllerBaseTest.cs
        ├── LiquidNotificationHelperTest.cs
        └── Mocks/
            ├── Handlers/
            │   ├── TestCaseQueryHandler.cs
            │   ├── TestCaseRequest.cs
            │   └── TestCaseResponse.cs
            ├── TestController.cs
            └── TestNotificationController.cs
Download .txt
SYMBOL INDEX (1476 symbols across 391 files)

FILE: samples/src/Liquid.Sample.Api/Controllers/SampleController.cs
  class SampleController (line 10) | [ApiController]
    method SampleController (line 14) | public SampleController(IMediator mediator) : base(mediator)
    method Get (line 18) | [HttpGet("Sample")]
    method Post (line 21) | [HttpPost]

FILE: samples/src/Liquid.Sample.Dataverse.Domain/PostSampleService.cs
  class PostSampleService (line 7) | public class PostSampleService
    method PostSampleService (line 13) | public PostSampleService(ILiquidDataverseAdapter adapter, ILiquidMappe...
    method PostSample (line 19) | public async Task<string> PostSample(string body)

FILE: samples/src/Liquid.Sample.Dataverse.Function/DataverseIntegration.cs
  class DataverseIntegration (line 14) | public class DataverseIntegration
    method DataverseIntegration (line 18) | public DataverseIntegration(PostSampleService service)
    method Run (line 23) | [FunctionName("PostSample")]

FILE: samples/src/Liquid.Sample.Dataverse.Function/Startup.cs
  class Startup (line 11) | public class Startup : FunctionsStartup
    method Configure (line 13) | public override void Configure(IFunctionsHostBuilder builder)
    method ConfigureAppConfiguration (line 18) | public override void ConfigureAppConfiguration(IFunctionsConfiguration...

FILE: samples/src/Liquid.Sample.Domain/Entities/SampleEntity.cs
  class SampleEntity (line 6) | public class SampleEntity : LiquidEntity<Guid>

FILE: samples/src/Liquid.Sample.Domain/Entities/SampleMessageEntity.cs
  class SampleMessageEntity (line 6) | [Serializable]

FILE: samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleCommandHandler.cs
  class SampleCommandHandler (line 11) | public class SampleCommandHandler : IRequestHandler<SampleRequest, Sampl...
    method SampleCommandHandler (line 14) | public SampleCommandHandler(ILiquidRepository<SampleEntity, Guid> repo...
    method Handle (line 20) | public async Task<SampleResponse> Handle(SampleRequest request, Cancel...

FILE: samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleRequest.cs
  class SampleRequest (line 6) | public class SampleRequest : IRequest<SampleResponse>
    method SampleRequest (line 10) | public SampleRequest(string id)

FILE: samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleRequestValidator.cs
  class SampleRequestValidator (line 10) | public class SampleRequestValidator : AbstractValidator<SampleRequest>
    method SampleRequestValidator (line 12) | public SampleRequestValidator()

FILE: samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleResponse.cs
  class SampleResponse (line 6) | public class SampleResponse
    method SampleResponse (line 11) | public SampleResponse(SampleEntity response)

FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePost/SampleEventCommandHandler.cs
  class SampleEventCommandHandler (line 15) | public class SampleEventCommandHandler : IRequestHandler<SampleEventRequ...
    method SampleEventCommandHandler (line 21) | public SampleEventCommandHandler(ILiquidProducer<SampleMessageEntity> ...
    method Handle (line 28) | public async Task Handle(SampleEventRequest request, CancellationToken...

FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePost/SampleEventRequest.cs
  class SampleEventRequest (line 6) | public class SampleEventRequest : IRequest
    method SampleEventRequest (line 10) | public SampleEventRequest(SampleMessageEntity entity)

FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePost/SampleEventRequestValidator.cs
  class SampleEventRequestValidator (line 10) | public class SampleEventRequestValidator : AbstractValidator<SampleEvent...
    method SampleEventRequestValidator (line 12) | public SampleEventRequestValidator()

FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePut/PutCommandHandler.cs
  class PutCommandHandler (line 10) | public class PutCommandHandler : IRequestHandler<PutCommandRequest>
    method PutCommandHandler (line 14) | public PutCommandHandler(ILiquidRepository<SampleEntity, Guid> reposit...
    method Handle (line 19) | public async Task Handle(PutCommandRequest request, CancellationToken ...

FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePut/PutCommandRequest.cs
  class PutCommandRequest (line 6) | public class PutCommandRequest : IRequest
    method PutCommandRequest (line 10) | public PutCommandRequest(SampleMessageEntity message)

FILE: samples/src/Liquid.Sample.Domain/Handlers/SamplePut/PutCommandRequestValidator.cs
  class PutCommandRequestValidator (line 5) | public class PutCommandRequestValidator : AbstractValidator<PutCommandRe...
    method PutCommandRequestValidator (line 7) | public PutCommandRequestValidator()

FILE: samples/src/Liquid.Sample.MessagingConsumer/Program.cs
  class Program (line 11) | public class Program
    method Main (line 13) | public static void Main(string[] args)
    method CreateHostBuilder (line 18) | public static IHostBuilder CreateHostBuilder(string[] args) =>

FILE: samples/src/Liquid.Sample.MessagingConsumer/Worker.cs
  class Worker (line 12) | public class Worker : ILiquidWorker<SampleMessageEntity>
    method Worker (line 17) | public Worker(ILogger<Worker> logger, IMediator mediator)
    method ProcessMessageAsync (line 23) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<SampleM...

FILE: src/Liquid.Cache.Memory/Extensions/DependencyInjection/IServiceCollectionExtension.cs
  class IServiceCollectionExtension (line 13) | public static class IServiceCollectionExtension
    method AddLiquidMemoryDistributedCache (line 23) | public static IServiceCollection AddLiquidMemoryDistributedCache(this ...

FILE: src/Liquid.Cache.NCache/Extensions/DependencyInjection/IServiceCollectionExtension.cs
  class IServiceCollectionExtension (line 13) | public static class IServiceCollectionExtension
    method AddLiquidNCacheDistributedCache (line 23) | public static IServiceCollection AddLiquidNCacheDistributedCache(this ...

FILE: src/Liquid.Cache.Redis/Extensions/DependencyInjection/IServiceCollectionExtension.cs
  class IServiceCollectionExtension (line 12) | public static class IServiceCollectionExtension
    method AddLiquidRedisDistributedCache (line 22) | public static IServiceCollection AddLiquidRedisDistributedCache(this I...

FILE: src/Liquid.Cache.SqlServer/Extensions/DependencyInjection/IServiceCollectionExtension.cs
  class IServiceCollectionExtension (line 12) | public static class IServiceCollectionExtension
    method AddLiquidSqlServerDistributedCache (line 22) | public static IServiceCollection AddLiquidSqlServerDistributedCache(th...

FILE: src/Liquid.Core.Telemetry.ElasticApm/Extensions/DependencyInjection/IApplicationBuilderExtensions.cs
  class IApplicationBuilderExtensions (line 11) | public static class IApplicationBuilderExtensions
    method UseLiquidElasticApm (line 18) | public static IApplicationBuilder UseLiquidElasticApm(this IApplicatio...

FILE: src/Liquid.Core.Telemetry.ElasticApm/Extensions/DependencyInjection/IServiceCollectionExtensions.cs
  class IServiceCollectionExtensions (line 14) | public static class IServiceCollectionExtensions
    method AddLiquidElasticApmTelemetry (line 21) | public static IServiceCollection AddLiquidElasticApmTelemetry(this ISe...

FILE: src/Liquid.Core.Telemetry.ElasticApm/Extensions/IConfigurationExtension.cs
  class IConfigurationExtension (line 9) | internal static class IConfigurationExtension
    method HasElasticApmEnabled (line 16) | internal static bool HasElasticApmEnabled(this IConfiguration config)

FILE: src/Liquid.Core.Telemetry.ElasticApm/Implementations/LiquidElasticApmInterceptor.cs
  class LiquidElasticApmInterceptor (line 13) | public sealed class LiquidElasticApmInterceptor : LiquidInterceptorBase
    method LiquidElasticApmInterceptor (line 26) | public LiquidElasticApmInterceptor(ILogger<LiquidElasticApmInterceptor...
    method AfterInvocation (line 39) | protected override Task AfterInvocation<TResult>(IInvocation invocatio...
    method BeforeInvocation (line 50) | protected override Task BeforeInvocation(IInvocation invocation, IInvo...
    method OnExceptionInvocation (line 62) | protected override Task OnExceptionInvocation(IInvocation invocation, ...

FILE: src/Liquid.Core.Telemetry.ElasticApm/Implementations/LiquidElasticApmTelemetryBehavior.cs
  class LiquidElasticApmTelemetryBehavior (line 16) | public sealed class LiquidElasticApmTelemetryBehavior<TRequest, TRespons...
    method LiquidElasticApmTelemetryBehavior (line 27) | public LiquidElasticApmTelemetryBehavior(ILogger<LiquidElasticApmTelem...
    method Handle (line 40) | public async Task<TResponse> Handle(TRequest request, RequestHandlerDe...
    method AfterResponse (line 66) | private Task AfterResponse(MethodInfo methodInfo)
    method OnExceptionResponse (line 72) | private Task OnExceptionResponse(MethodInfo methodInfo, Exception exce...
    method BeforeRequest (line 78) | private Task BeforeRequest(MethodInfo methodInfo)

FILE: src/Liquid.Core/AbstractMappers/LiquidMapper.cs
  class LiquidMapper (line 10) | [ExcludeFromCodeCoverage]
    method LiquidMapper (line 19) | protected LiquidMapper(string mapperName)
    method Map (line 24) | public async Task<TTo> Map(TFrom dataObject, string entityName = null)
    method MapImpl (line 48) | protected abstract Task<TTo> MapImpl(TFrom dataObject, string entityNa...

FILE: src/Liquid.Core/AbstractMappers/OcrResultMapper.cs
  class OcrResultMapper (line 14) | [ExcludeFromCodeCoverage]
    method OcrResultMapper (line 23) | public OcrResultMapper(string mapperName)
    method Map (line 28) | public async Task<OcrResult> Map(TFrom dataObject, string entityName =...
    method MapImpl (line 51) | protected abstract Task<OcrResult> MapImpl(TFrom dataObject);

FILE: src/Liquid.Core/Attributes/LiquidSectionNameAttribute.cs
  class LiquidSectionNameAttribute (line 9) | [AttributeUsage(AttributeTargets.Class)]
    method LiquidSectionNameAttribute (line 24) | public LiquidSectionNameAttribute(string sectionName)

FILE: src/Liquid.Core/Base/Enumeration.cs
  class Enumeration (line 14) | [ExcludeFromCodeCoverage]
    method Enumeration (line 22) | protected Enumeration(int value, string displayName)
    method ToString (line 50) | public override string ToString()
    method GetAll (line 60) | public static IEnumerable<T> GetAll<T>() where T : Enumeration, new()
    method Equals (line 83) | public override bool Equals(object obj)
    method GetHashCode (line 104) | public override int GetHashCode()
    method AbsoluteDifference (line 115) | public static int AbsoluteDifference(Enumeration firstValue, Enumerati...
    method FromValue (line 127) | public static T FromValue<T>(int value) where T : Enumeration, new()
    method FromDisplayName (line 139) | public static T FromDisplayName<T>(string displayName) where T : Enume...
    method Parse (line 155) | private static TEnumerable Parse<TEnumerable, TValue>(TValue value, st...
    method CompareTo (line 169) | public int CompareTo(object obj)

FILE: src/Liquid.Core/Base/LiquidInterceptorBase.cs
  class LiquidInterceptorBase (line 10) | public abstract class LiquidInterceptorBase : AsyncInterceptorBase
    method LiquidInterceptorBase (line 15) | protected LiquidInterceptorBase()
    method InterceptAsync (line 25) | protected override async Task InterceptAsync(IInvocation invocation, I...
    method InterceptAsync (line 49) | protected sealed override async Task<TResult> InterceptAsync<TResult>(...
    method AfterInvocation (line 76) | protected abstract Task AfterInvocation<TResult>(IInvocation invocatio...
    method BeforeInvocation (line 84) | protected abstract Task BeforeInvocation(IInvocation invocation, IInvo...
    method OnExceptionInvocation (line 93) | protected abstract Task OnExceptionInvocation(IInvocation invocation, ...

FILE: src/Liquid.Core/Decorators/LiquidContextDecorator.cs
  class LiquidContextDecorator (line 17) | public class LiquidContextDecorator<TEntity> : ILiquidWorker<TEntity>
    method LiquidContextDecorator (line 29) | public LiquidContextDecorator(ILiquidWorker<TEntity> inner, ILiquidCon...
    method ProcessMessageAsync (line 37) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<TEntity...

FILE: src/Liquid.Core/Decorators/LiquidCultureDecorator.cs
  class LiquidCultureDecorator (line 16) | public class LiquidCultureDecorator<TEntity> : ILiquidWorker<TEntity>
    method LiquidCultureDecorator (line 27) | public LiquidCultureDecorator(ILiquidWorker<TEntity> inner, IOptions<C...
    method ProcessMessageAsync (line 34) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<TEntity...

FILE: src/Liquid.Core/Decorators/LiquidScopedLoggingDecorator.cs
  class LiquidScopedLoggingDecorator (line 18) | public class LiquidScopedLoggingDecorator<TEntity> : ILiquidWorker<TEntity>
    method LiquidScopedLoggingDecorator (line 30) | public LiquidScopedLoggingDecorator(ILiquidWorker<TEntity> inner
    method ProcessMessageAsync (line 40) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<TEntity...

FILE: src/Liquid.Core/Entities/ChatCompletionResult.cs
  class ChatCompletionResult (line 6) | public class ChatCompletionResult

FILE: src/Liquid.Core/Entities/ClientDictionary.cs
  class ClientDictionary (line 9) | [ExcludeFromCodeCoverage]
    method ClientDictionary (line 33) | public ClientDictionary(string clientId, T client)

FILE: src/Liquid.Core/Entities/ConsumerErrorEventArgs.cs
  class ConsumerErrorEventArgs (line 8) | public class ConsumerErrorEventArgs

FILE: src/Liquid.Core/Entities/ConsumerMessageEventArgs.cs
  class ConsumerMessageEventArgs (line 9) | public class ConsumerMessageEventArgs<TEvent>

FILE: src/Liquid.Core/Entities/FunctionBody.cs
  class FunctionBody (line 10) | [ExcludeFromCodeCoverage]
    method FunctionBody (line 41) | public FunctionBody(string name, string description, BinaryData parame...
    method FunctionBody (line 63) | public FunctionBody(string functionBody)

FILE: src/Liquid.Core/Entities/LiquidBlob.cs
  class LiquidBlob (line 9) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Entities/LiquidEntity.cs
  class LiquidEntity (line 9) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Entities/OcrResult.cs
  class OcrResult (line 10) | [ExcludeFromCodeCoverage]
  class PageInfo (line 26) | [ExcludeFromCodeCoverage]
  class WordData (line 52) | [ExcludeFromCodeCoverage]
  class LineData (line 75) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Exceptions/DataMappingException.cs
  class DataMappingException (line 9) | [ExcludeFromCodeCoverage]
    method DataMappingException (line 15) | public DataMappingException()
    method DataMappingException (line 23) | public DataMappingException(string message) : base(message)
    method DataMappingException (line 32) | public DataMappingException(string message, Exception innerException) ...

FILE: src/Liquid.Core/Exceptions/DatabaseContextException.cs
  class DatabaseContextException (line 10) | [ExcludeFromCodeCoverage]
    method DatabaseContextException (line 15) | public DatabaseContextException(string message) : base(message)
    method DatabaseContextException (line 24) | public DatabaseContextException(string message, Exception innerException)

FILE: src/Liquid.Core/Exceptions/ExceptionCustomCodes.cs
  class ExceptionCustomCodes (line 10) | [ExcludeFromCodeCoverage]
    method ExceptionCustomCodes (line 53) | public ExceptionCustomCodes(int value, string displayName) : base(valu...

FILE: src/Liquid.Core/Exceptions/LiquidCustomException.cs
  class LiquidCustomException (line 11) | [Serializable]
    method LiquidCustomException (line 28) | public LiquidCustomException(string message, ExceptionCustomCodes resp...
    method LiquidCustomException (line 39) | public LiquidCustomException(string message, ExceptionCustomCodes resp...

FILE: src/Liquid.Core/Exceptions/LiquidDatabaseSettingsDoesNotExistException.cs
  class LiquidDatabaseSettingsDoesNotExistException (line 11) | [ExcludeFromCodeCoverage]
    method LiquidDatabaseSettingsDoesNotExistException (line 19) | public LiquidDatabaseSettingsDoesNotExistException(string databaseName)
    method LiquidDatabaseSettingsDoesNotExistException (line 24) | public LiquidDatabaseSettingsDoesNotExistException(string message, Exc...

FILE: src/Liquid.Core/Exceptions/LiquidException.cs
  class LiquidException (line 11) | [Serializable]
    method LiquidException (line 18) | public LiquidException()
    method LiquidException (line 26) | public LiquidException(string message) : base(message)
    method LiquidException (line 35) | public LiquidException(string message, Exception innerException) : bas...
    method ToString (line 45) | public override string ToString()

FILE: src/Liquid.Core/Exceptions/MessagingConsumerException.cs
  class MessagingConsumerException (line 11) | [Serializable]
    method MessagingConsumerException (line 19) | public MessagingConsumerException(Exception innerException) : base("An...

FILE: src/Liquid.Core/Exceptions/MessagingMissingConfigurationException.cs
  class MessagingMissingConfigurationException (line 11) | [Serializable]
    method MessagingMissingConfigurationException (line 16) | public MessagingMissingConfigurationException(Exception innerException...
    method MessagingMissingConfigurationException (line 22) | public MessagingMissingConfigurationException(string message) : base(m...

FILE: src/Liquid.Core/Exceptions/MessagingMissingContextKeysException.cs
  class MessagingMissingContextKeysException (line 8) | [ExcludeFromCodeCoverage]
    method MessagingMissingContextKeysException (line 13) | public MessagingMissingContextKeysException()
    method MessagingMissingContextKeysException (line 18) | public MessagingMissingContextKeysException(string contextKey) : base(...
    method MessagingMissingContextKeysException (line 23) | public MessagingMissingContextKeysException(string message, Exception ...

FILE: src/Liquid.Core/Exceptions/MessagingMissingScopedKeysException.cs
  class MessagingMissingScopedKeysException (line 8) | [ExcludeFromCodeCoverage]
    method MessagingMissingScopedKeysException (line 13) | public MessagingMissingScopedKeysException()
    method MessagingMissingScopedKeysException (line 18) | public MessagingMissingScopedKeysException(string contextKey) : base($...
    method MessagingMissingScopedKeysException (line 23) | public MessagingMissingScopedKeysException(string message, Exception i...

FILE: src/Liquid.Core/Exceptions/MessagingMissingSettingsException.cs
  class MessagingMissingSettingsException (line 11) | [Serializable]
    method MessagingMissingSettingsException (line 19) | public MessagingMissingSettingsException(string settingsName) : base($...
    method MessagingMissingSettingsException (line 24) | public MessagingMissingSettingsException(string message, Exception inn...

FILE: src/Liquid.Core/Exceptions/MessagingProducerException.cs
  class MessagingProducerException (line 11) | [Serializable]
    method MessagingProducerException (line 19) | public MessagingProducerException(Exception innerException) : base("An...

FILE: src/Liquid.Core/Exceptions/SerializerFailException.cs
  class SerializerFailException (line 11) | [Serializable]
    method SerializerFailException (line 16) | public SerializerFailException(string message) : base(message)
    method SerializerFailException (line 21) | public SerializerFailException(string nameOfContent, Exception innerEx...

FILE: src/Liquid.Core/Exceptions/UnitOfWorkTransactionNotStartedException.cs
  class UnitOfWorkTransactionNotStartedException (line 11) | [ExcludeFromCodeCoverage]
    method UnitOfWorkTransactionNotStartedException (line 18) | public UnitOfWorkTransactionNotStartedException() :
    method UnitOfWorkTransactionNotStartedException (line 24) | public UnitOfWorkTransactionNotStartedException(string message) : base...
    method UnitOfWorkTransactionNotStartedException (line 29) | public UnitOfWorkTransactionNotStartedException(string message, Except...

FILE: src/Liquid.Core/Exceptions/UnitOfWorkTransactionWithoutRepositoryException.cs
  class UnitofWorkTransactionWithoutRepositoryException (line 11) | [Serializable]
    method UnitofWorkTransactionWithoutRepositoryException (line 18) | public UnitofWorkTransactionWithoutRepositoryException() :
    method UnitofWorkTransactionWithoutRepositoryException (line 24) | public UnitofWorkTransactionWithoutRepositoryException(string message)...
    method UnitofWorkTransactionWithoutRepositoryException (line 29) | public UnitofWorkTransactionWithoutRepositoryException(string message,...

FILE: src/Liquid.Core/Extensions/ByteExtension.cs
  class ByteExtension (line 11) | [ExcludeFromCodeCoverage]
    method GetKbSize (line 19) | public static double GetKbSize(this byte[] bytes)
    method GetMbSize (line 30) | public static double GetMbSize(this byte[] bytes)
    method GetGbSize (line 41) | public static double GetGbSize(this byte[] bytes)
    method ParseJson (line 53) | public static T ParseJson<T>(this byte[] json, JsonSerializerOptions o...

FILE: src/Liquid.Core/Extensions/CommonExtensions.cs
  class CommonExtensions (line 8) | public static class CommonExtensions
    method AddRange (line 25) | public static void AddRange(this IDictionary<string, object> source, I...

FILE: src/Liquid.Core/Extensions/DateTimeExtension.cs
  class DateTimeExtension (line 10) | [ExcludeFromCodeCoverage]
    method ToIso8601 (line 18) | public static string ToIso8601(this DateTime date)
    method ToSql (line 28) | public static string ToSql(this DateTime date)
    method ToOracleSql (line 38) | public static string ToOracleSql(this DateTime dateTime)
    method ToUnix (line 48) | public static long ToUnix(this DateTime date)
    method FromUnix (line 59) | public static DateTime FromUnix(this long unix)
    method GetAge (line 70) | public static int GetAge(this DateTime birthDate)
    method ToTimeZone (line 89) | public static DateTime ToTimeZone(this DateTime dateTime, string timeZ...
    method IsWeekend (line 104) | public static bool IsWeekend(this DateTime date)
    method IsWeekday (line 116) | public static bool IsWeekday(this DateTime date)
    method AddWorkdays (line 134) | public static DateTime AddWorkdays(this DateTime date, int days)
    method GetLastDayOfMonth (line 150) | public static DateTime GetLastDayOfMonth(this DateTime date)
    method GetFirstDayOfMonth (line 160) | public static DateTime GetFirstDayOfMonth(this DateTime date)
    method Elapsed (line 173) | public static TimeSpan Elapsed(this DateTime date)

FILE: src/Liquid.Core/Extensions/DependencyInjection/IServiceCollectionAutoMapperExtensions.cs
  class IServiceCollectionAutoMapperExtensions (line 28) | [ExcludeFromCodeCoverage]
    method LiquidAddAutoMapper (line 37) | public static IServiceCollection LiquidAddAutoMapper(this IServiceColl...
    method LiquidAddAutoMapper (line 47) | public static IServiceCollection LiquidAddAutoMapper(this IServiceColl...
    method AddAutoMapper (line 57) | public static IServiceCollection AddAutoMapper(this IServiceCollection...
    method AddAutoMapper (line 68) | public static IServiceCollection AddAutoMapper(this IServiceCollection...
    method AddAutoMapper (line 79) | public static IServiceCollection AddAutoMapper(this IServiceCollection...
    method AddAutoMapper (line 89) | public static IServiceCollection AddAutoMapper(this IServiceCollection...
    method AddAutoMapper (line 98) | public static IServiceCollection AddAutoMapper(this IServiceCollection...
    method AddAutoMapper (line 108) | public static IServiceCollection AddAutoMapper(this IServiceCollection...
    method AddAutoMapper (line 118) | public static IServiceCollection AddAutoMapper(this IServiceCollection...
    method AddAutoMapper (line 129) | public static IServiceCollection AddAutoMapper(this IServiceCollection...
    method AddAutoMapper (line 141) | public static IServiceCollection AddAutoMapper(this IServiceCollection...
    method AddAutoMapperClasses (line 153) | private static IServiceCollection AddAutoMapperClasses(IServiceCollect...

FILE: src/Liquid.Core/Extensions/DependencyInjection/IServiceCollectionCoreExtensions.cs
  class IServiceCollectionCoreExtensions (line 18) | public static class IServiceCollectionCoreExtensions
    method AddLiquidDistributedCache (line 27) | public static IServiceCollection AddLiquidDistributedCache(this IServi...
    method AddLiquidHandlers (line 47) | public static void AddLiquidHandlers(this IServiceCollection services,...
    method AddLiquidMessageConsumer (line 70) | public static IServiceCollection AddLiquidMessageConsumer<TWorker, TEn...
    method AddLiquidWorkerService (line 85) | public static IServiceCollection AddLiquidWorkerService<TWorker, TEnti...
    method AddLiquidDomain (line 102) | public static IServiceCollection AddLiquidDomain(this IServiceCollecti...
    method AddLiquidPipeline (line 117) | public static IServiceCollection AddLiquidPipeline<TEntity>(this IServ...
    method Decorate (line 133) | public static IServiceCollection Decorate<TInterface, TDecorator>(this...
    method CreateInstance (line 153) | private static object CreateInstance(this IServiceProvider services, S...

FILE: src/Liquid.Core/Extensions/DependencyInjection/IServiceCollectionLiquidExtension.cs
  class IServiceCollectionLiquidExtension (line 14) | public static class IServiceCollectionLiquidExtension
    method AddLiquidTelemetryInterceptor (line 23) | [Obsolete("This method will be removed in the next release. " +
    method AddScopedLiquidTelemetry (line 47) | public static IServiceCollection AddScopedLiquidTelemetry<TInterface, ...
    method AddTransientLiquidTelemetry (line 67) | public static IServiceCollection AddTransientLiquidTelemetry<TInterfac...
    method AddSingletonLiquidTelemetry (line 87) | public static IServiceCollection AddSingletonLiquidTelemetry<TInterfac...
    method AddInterceptor (line 107) | public static IServiceCollection AddInterceptor<TInterceptor>(this ISe...
    method AddLiquidSerializers (line 121) | public static IServiceCollection AddLiquidSerializers(this IServiceCol...

FILE: src/Liquid.Core/Extensions/DependencyInjection/IServiceCollectionTypeExtensions.cs
  class IServiceCollectionTypeExtensions (line 14) | [ExcludeFromCodeCoverage]
    method AddScopedAssemblies (line 26) | public static IServiceCollection AddScopedAssemblies(this IServiceColl...
    method AddScopedAssemblies (line 52) | public static IServiceCollection AddScopedAssemblies(this IServiceColl...
    method AddTransientAssemblies (line 76) | public static IServiceCollection AddTransientAssemblies(this IServiceC...
    method AddTransientAssemblies (line 102) | public static IServiceCollection AddTransientAssemblies(this IServiceC...
    method AddSingletonAssemblies (line 126) | public static IServiceCollection AddSingletonAssemblies(this IServiceC...
    method AddSingletonAssemblies (line 152) | public static IServiceCollection AddSingletonAssemblies(this IServiceC...

FILE: src/Liquid.Core/Extensions/DependencyInjection/IServiceProviderExtensions.cs
  class IServiceProviderExtensions (line 12) | [ExcludeFromCodeCoverage]
    method GetAllServiceDescriptors (line 20) | public static Dictionary<Type, ServiceDescriptor> GetAllServiceDescrip...

FILE: src/Liquid.Core/Extensions/EnumExtension.cs
  class EnumExtension (line 11) | [ExcludeFromCodeCoverage]
    method GetDescription (line 19) | public static string GetDescription(this Enum value)
    method GetAttribute (line 34) | public static T GetAttribute<T>(this Enum value) where T : Attribute

FILE: src/Liquid.Core/Extensions/IEnumerableExtension.cs
  class IEnumerableExtension (line 13) | [ExcludeFromCodeCoverage]
    method Each (line 22) | public static void Each<T>(this IEnumerable<T> enumerable, Action<T> a...
    method ToSeparatedString (line 38) | public static string ToSeparatedString<T>(this IEnumerable<T> instance...
    method ToSeparatedString (line 55) | public static string ToSeparatedString<T>(this IEnumerable<T> instance)
    method IsNullOrEmpty (line 68) | public static bool IsNullOrEmpty<T>(this IEnumerable<T> collection)
    method IsNotNullOrEmpty (line 81) | public static bool IsNotNullOrEmpty<T>(this IEnumerable<T> collection)
    method OrderBy (line 94) | public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> list, stri...

FILE: src/Liquid.Core/Extensions/IntExtension.cs
  class IntExtension (line 9) | [ExcludeFromCodeCoverage]
    method IsPrimeNumber (line 19) | public static bool IsPrimeNumber(this int number)
    method IsOdd (line 43) | public static bool IsOdd(this int number)
    method IsEven (line 55) | public static bool IsEven(this int number)
    method ToLocalCurrencyString (line 65) | public static string ToLocalCurrencyString(this double value)

FILE: src/Liquid.Core/Extensions/ObjectExtension.cs
  class ObjectExtension (line 14) | public static class ObjectExtension
    method IsOfType (line 24) | public static bool IsOfType<T>(this object value)
    method IsDatetime (line 36) | public static bool IsDatetime(this object expression)
    method ToDatetime (line 47) | public static bool ToDatetime(this object expression, out DateTime? ou...
    method IsBoolean (line 72) | public static bool IsBoolean(this object expression)
    method ToBoolean (line 83) | public static bool ToBoolean(this object expression, out bool? outer)
    method IsGuid (line 101) | public static bool IsGuid(this object expression)
    method ToGuid (line 112) | private static bool ToGuid(this object expression, out Guid? outer)
    method IsNumeric (line 130) | public static bool IsNumeric(this object expression)
    method IsInteger (line 142) | public static bool IsInteger(this object expression)
    method ToInteger (line 153) | public static bool ToInteger(this object expression, out long? outer)
    method IsDouble (line 173) | public static bool IsDouble(this object expression)
    method ToDouble (line 184) | public static bool ToDouble(this object expression, out double? outer)
    method IsPrimitiveType (line 203) | public static bool IsPrimitiveType(this object obj)
    method ToJsonString (line 213) | public static string ToJsonString(this object source, JsonSerializerOp...
    method ToJsonBytes (line 223) | public static byte[] ToJsonBytes(this object source, JsonSerializerOpt...
    method GetFieldValue (line 239) | public static object GetFieldValue(this object obj, string fieldName)
    method SetFieldValue (line 259) | public static void SetFieldValue(this object obj, string fieldName, ob...
    method GetPropertyValue (line 279) | public static object GetPropertyValue(this object obj, string property...
    method SetPropertyValue (line 299) | public static void SetPropertyValue(this object obj, string propertyNa...

FILE: src/Liquid.Core/Extensions/StreamExtension.cs
  class StreamExtension (line 10) | [ExcludeFromCodeCoverage]
    method AsStringUtf8 (line 18) | public static string AsStringUtf8(this Stream source)
    method AsStringAscii (line 35) | public static string AsStringAscii(this Stream source)
    method AsStringUnicode (line 52) | public static string AsStringUnicode(this Stream source)
    method ToByteArray (line 68) | public static byte[] ToByteArray(this Stream stream)

FILE: src/Liquid.Core/Extensions/StringExtension.cs
  class StringExtension (line 17) | [ExcludeFromCodeCoverage]
    method Contains (line 30) | public static bool Contains(this string source, string value, StringCo...
    method RemoveLineEndings (line 40) | public static string RemoveLineEndings(this string value)
    method IsGuid (line 72) | public static bool IsGuid(this string guid)
    method IsValidHttpUrl (line 84) | public static bool IsValidHttpUrl(this string str)
    method AppendIf (line 96) | public static StringBuilder AppendIf(this StringBuilder builder, strin...
    method ToGuid (line 107) | public static Guid ToGuid(this string str)
    method ToEnum (line 119) | public static T ToEnum<T>(this string value) where T : struct
    method CreateHash (line 133) | public static string CreateHash(this string input, string key, HashTyp...
    method GetComputedHash (line 158) | private static byte[] GetComputedHash(string input, string key, HashTy...
    method ParseJson (line 182) | public static T ParseJson<T>(this string json, JsonSerializerOptions o...
    method ToStreamUtf8 (line 193) | public static Stream ToStreamUtf8(this string source)
    method ToStreamAscii (line 205) | public static Stream ToStreamAscii(this string source)
    method ToStreamUnicode (line 217) | public static Stream ToStreamUnicode(this string source)
    method ToXml (line 229) | public static string ToXml(this object obj)
    method ParseXml (line 249) | public static T ParseXml<T>(this string str) where T : new()
    type HashType (line 264) | public enum HashType

FILE: src/Liquid.Core/Extensions/TypeExtensions.cs
  class TypeExtensions (line 11) | [ExcludeFromCodeCoverage]
    method ImplementGenericInterface (line 20) | public static bool ImplementGenericInterface(this Type type, Type inte...
    method IsGenericType (line 31) | public static bool IsGenericType(this Type type, Type genericType)
    method IsGenericType (line 41) | public static bool IsGenericType(this Type type)
    method IsConcreteType (line 53) | public static bool IsConcreteType(this Type type)
    method IsAbstract (line 65) | public static bool IsAbstract(this Type type)
    method IsGenericTypeDefinitionOf (line 77) | public static bool IsGenericTypeDefinitionOf(this Type genericTypeDefi...
    method IsGenericImplementationOf (line 90) | public static bool IsGenericImplementationOf(this Type type, Type serv...
    method IsVariantVersionOf (line 105) | public static bool IsVariantVersionOf(this Type type, Type otherType)
    method IsGenericTypeDefinition (line 117) | public static bool IsGenericTypeDefinition(this Type type)
    method GetBaseType (line 127) | public static Type GetBaseType(this Type type)

FILE: src/Liquid.Core/GenAi/Entities/LiquidChatContent.cs
  class LiquidChatContent (line 10) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/GenAi/Entities/LiquidChatMessage.cs
  class LiquidChatMessage (line 11) | [ExcludeFromCodeCoverage]
    method LiquidChatMessage (line 23) | public LiquidChatMessage(LiquidMessageRole role)
    method AddContent (line 42) | public void AddContent(string text)
    method AddContent (line 71) | public void AddContent(Uri imageUri)

FILE: src/Liquid.Core/GenAi/Entities/LiquidChatMessages.cs
  class LiquidChatMessages (line 9) | [ExcludeFromCodeCoverage]
    method AddMessage (line 22) | public void AddMessage(LiquidChatMessage message)

FILE: src/Liquid.Core/GenAi/Enums/LiquidContentKind.cs
  type LiquidContentKind (line 12) | public enum LiquidContentKind

FILE: src/Liquid.Core/GenAi/Enums/LiquidMessageRole.cs
  type LiquidMessageRole (line 12) | public enum LiquidMessageRole

FILE: src/Liquid.Core/GenAi/Interfaces/ILiquidGenAi.cs
  type ILiquidGenAi (line 14) | public interface ILiquidGenAi
    method FunctionCalling (line 22) | Task<ChatCompletionResult> FunctionCalling(LiquidChatMessages messages...
    method CompleteChatAsync (line 35) | Task<ChatCompletionResult> CompleteChatAsync(string content, string pr...
    method CompleteChatAsync (line 44) | Task<ChatCompletionResult> CompleteChatAsync(LiquidChatMessages messag...

FILE: src/Liquid.Core/GenAi/Interfaces/ILiquidGenAiHandler.cs
  type ILiquidGenAiHandler (line 11) | public interface ILiquidGenAiHandler
    method HandleInputMessagesAsync (line 20) | Task HandleInputMessagesAsync(WebSocket socket, CancellationToken canc...
    method HandleUpdatesFromServiceAsync (line 29) | Task HandleUpdatesFromServiceAsync(WebSocket socket, CancellationToken...

FILE: src/Liquid.Core/GenAi/Settings/CompletionsOptions.cs
  class CompletionsOptions (line 14) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Implementations/LiquidBackgroundService.cs
  class LiquidBackgroundService (line 15) | public class LiquidBackgroundService<TEntity> : BackgroundService
    method LiquidBackgroundService (line 26) | public LiquidBackgroundService(IServiceProvider serviceProvider, ILiqu...
    method ExecuteAsync (line 39) | protected override async Task ExecuteAsync(CancellationToken stoppingT...
    method ProcessMessageAsync (line 54) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<TEntity...

FILE: src/Liquid.Core/Implementations/LiquidCache.cs
  class LiquidCache (line 11) | public class LiquidCache : ILiquidCache
    method LiquidCache (line 20) | public LiquidCache(IDistributedCache distributedCache)
    method Get (line 26) | public byte[] Get(string key)
    method GetAsync (line 32) | public Task<byte[]> GetAsync(string key, CancellationToken token = def...
    method Refresh (line 38) | public void Refresh(string key)
    method RefreshAsync (line 44) | public Task RefreshAsync(string key, CancellationToken token = default)
    method Remove (line 50) | public void Remove(string key)
    method RemoveAsync (line 56) | public Task RemoveAsync(string key, CancellationToken token = default)
    method Set (line 62) | public void Set(string key, byte[] value, DistributedCacheEntryOptions...
    method SetAsync (line 68) | public Task SetAsync(string key, byte[] value, DistributedCacheEntryOp...
    method Get (line 74) | public T Get<T>(string key)
    method GetAsync (line 81) | public async Task<T> GetAsync<T>(string key, CancellationToken token =...
    method Set (line 88) | public void Set<T>(string key, T value, DistributedCacheEntryOptions o...
    method SetAsync (line 94) | public async Task SetAsync<T>(string key, T value, DistributedCacheEnt...

FILE: src/Liquid.Core/Implementations/LiquidContext.cs
  class LiquidContext (line 7) | public class LiquidContext : ILiquidContext
    method Upsert (line 15) | public void Upsert(string key, object value)
    method Get (line 28) | public object Get(string key)
    method Get (line 42) | public T Get<T>(string key)

FILE: src/Liquid.Core/Implementations/LiquidContextNotifications.cs
  class LiquidContextNotifications (line 8) | public class LiquidContextNotifications : ILiquidContextNotifications
    method LiquidContextNotifications (line 17) | public LiquidContextNotifications(ILiquidContext liquidContext)
    method InsertNotification (line 23) | public void InsertNotification(string message)
    method InsertNotifications (line 35) | public void InsertNotifications(IList<string> notifications)
    method GetNotifications (line 41) | public IList<string> GetNotifications()

FILE: src/Liquid.Core/Implementations/LiquidJsonSerializer.cs
  class LiquidJsonSerializer (line 9) | public class LiquidJsonSerializer : ILiquidSerializer
    method Serialize (line 16) | public string Serialize<T>(T content)

FILE: src/Liquid.Core/Implementations/LiquidSerializerProvider.cs
  class LiquidSerializerProvider (line 9) | public class LiquidSerializerProvider : ILiquidSerializerProvider
    method LiquidSerializerProvider (line 17) | public LiquidSerializerProvider(IEnumerable<ILiquidSerializer> seriali...
    method GetSerializerByType (line 23) | public ILiquidSerializer GetSerializerByType(Type serializerType)

FILE: src/Liquid.Core/Implementations/LiquidTelemetryInterceptor.cs
  class LiquidTelemetryInterceptor (line 13) | public class LiquidTelemetryInterceptor : LiquidInterceptorBase
    method LiquidTelemetryInterceptor (line 22) | public LiquidTelemetryInterceptor(ILogger<LiquidTelemetryInterceptor> ...
    method AfterInvocation (line 35) | protected override Task AfterInvocation<TResult>(IInvocation invocatio...
    method BeforeInvocation (line 49) | protected override Task BeforeInvocation(IInvocation invocation, IInvo...
    method OnExceptionInvocation (line 62) | protected override Task OnExceptionInvocation(IInvocation invocation, ...

FILE: src/Liquid.Core/Implementations/LiquidUnitOfWork.cs
  class LiquidUnitOfWork (line 16) | public class LiquidUnitOfWork : ILiquidUnitOfWork
    method LiquidUnitOfWork (line 28) | public LiquidUnitOfWork(IServiceProvider serviceProvider)
    method GetRepository (line 40) | public TRepository GetRepository<TRepository, TEntity, TIdentifier>()
    method StartTransactionAsync (line 58) | public async Task StartTransactionAsync()
    method CommitAsync (line 75) | public async Task CommitAsync()
    method RollbackTransactionAsync (line 90) | public async Task RollbackTransactionAsync()
    method Dispose (line 102) | public void Dispose()
    method Dispose (line 113) | protected virtual void Dispose(bool disposing)

FILE: src/Liquid.Core/Implementations/LiquidXmlSerializer.cs
  class LiquidXmlSerializer (line 13) | public class LiquidXmlSerializer : ILiquidSerializer
    method Serialize (line 19) | public string Serialize<T>(T content)

FILE: src/Liquid.Core/Interfaces/ILiquidCache.cs
  type ILiquidCache (line 10) | public interface ILiquidCache : IDistributedCache
    method Get (line 18) | T Get<T>(string key);
    method GetAsync (line 28) | Task<T> GetAsync<T>(string key, CancellationToken token = default);
    method Set (line 37) | void Set<T>(string key, T value, DistributedCacheEntryOptions options);
    method SetAsync (line 48) | Task SetAsync<T>(string key, T value, DistributedCacheEntryOptions opt...

FILE: src/Liquid.Core/Interfaces/ILiquidConsumer.cs
  type ILiquidConsumer (line 12) | public interface ILiquidConsumer<TEntity>
    method RegisterMessageHandler (line 17) | Task RegisterMessageHandler(CancellationToken cancellationToken = defa...

FILE: src/Liquid.Core/Interfaces/ILiquidContext.cs
  type ILiquidContext (line 8) | public interface ILiquidContext
    method Get (line 20) | object Get(string key);
    method Get (line 27) | T Get<T>(string key);
    method Upsert (line 34) | void Upsert(string key, object value);

FILE: src/Liquid.Core/Interfaces/ILiquidContextNotifications.cs
  type ILiquidContextNotifications (line 8) | public interface ILiquidContextNotifications
    method InsertNotification (line 14) | void InsertNotification(string message);
    method InsertNotifications (line 20) | void InsertNotifications(IList<string> notifications);
    method GetNotifications (line 25) | IList<string> GetNotifications();

FILE: src/Liquid.Core/Interfaces/ILiquidDataContext.cs
  type ILiquidDataContext (line 9) | public interface ILiquidDataContext : IDisposable
    method StartTransactionAsync (line 23) | Task StartTransactionAsync();
    method CommitAsync (line 29) | Task CommitAsync();
    method RollbackTransactionAsync (line 35) | Task RollbackTransactionAsync();

FILE: src/Liquid.Core/Interfaces/ILiquidMapper.cs
  type ILiquidMapper (line 10) | public interface ILiquidMapper<TFrom, TTo>
    method Map (line 18) | Task<TTo> Map(TFrom dataObject, string entityName = null);

FILE: src/Liquid.Core/Interfaces/ILiquidOcr.cs
  type ILiquidRecognition (line 12) | public interface ILiquidRecognition
    method AnalyzeDocumentAsync (line 27) | Task<OcrResult> AnalyzeDocumentAsync(Stream doc, string clientId = "de...
    method AnalyzeDocumentFromUriAsync (line 42) | Task<OcrResult> AnalyzeDocumentFromUriAsync(string uri, string clientI...
    method ClassifyDocumenAsync (line 52) | Task<OcrResult> ClassifyDocumenAsync(Stream doc, string clientId = "de...
    method ClassifyDocumenFromUriAsync (line 62) | Task<OcrResult> ClassifyDocumenFromUriAsync(string uri, string clientI...

FILE: src/Liquid.Core/Interfaces/ILiquidProducer.cs
  type ILiquidProducer (line 10) | public interface ILiquidProducer<TEntity>
    method SendMessagesAsync (line 16) | Task SendMessagesAsync(IEnumerable<TEntity> messageBodies);
    method SendMessageAsync (line 24) | Task SendMessageAsync(TEntity messageBody, IDictionary<string, object>...

FILE: src/Liquid.Core/Interfaces/ILiquidRepository.cs
  type ILiquidRepository (line 14) | public interface ILiquidRepository<TEntity, TIdentifier> where TEntity :...
    method AddAsync (line 28) | Task AddAsync(TEntity entity);
    method RemoveByIdAsync (line 35) | Task RemoveByIdAsync(TIdentifier id);
    method UpdateAsync (line 42) | Task UpdateAsync(TEntity entity);
    method FindByIdAsync (line 49) | Task<TEntity> FindByIdAsync(TIdentifier id);
    method WhereAsync (line 58) | Task<IEnumerable<TEntity>> WhereAsync(Expression<Func<TEntity, bool>> ...
    method FindAllAsync (line 64) | Task<IEnumerable<TEntity>> FindAllAsync();

FILE: src/Liquid.Core/Interfaces/ILiquidSerializer.cs
  type ILiquidSerializer (line 6) | public interface ILiquidSerializer
    method Serialize (line 12) | string Serialize<T>(T content);

FILE: src/Liquid.Core/Interfaces/ILiquidSerializerProvider.cs
  type ILiquidSerializerProvider (line 8) | public interface ILiquidSerializerProvider
    method GetSerializerByType (line 15) | ILiquidSerializer GetSerializerByType(Type serializerType);

FILE: src/Liquid.Core/Interfaces/ILiquidStorage.cs
  type ILiquidStorage (line 11) | public interface ILiquidStorage
    method UploadBlob (line 20) | Task<string> UploadBlob(byte[] data, string name, string containerName...
    method Delete (line 27) | Task Delete(string id, string containerName);
    method DeleteByTags (line 34) | Task DeleteByTags(IDictionary<string, string> tags, string containerNa...
    method GetAllBlobs (line 41) | Task<List<LiquidBlob>> GetAllBlobs(string containerName);
    method ReadBlobsByTags (line 49) | Task<List<LiquidBlob>> ReadBlobsByTags(IDictionary<string, string> tag...
    method ReadBlobsByName (line 57) | Task<LiquidBlob> ReadBlobsByName(string blobName, string containerName);
    method GetBlobSasUri (line 72) | string GetBlobSasUri(string blobName, string containerName, DateTimeOf...

FILE: src/Liquid.Core/Interfaces/ILiquidUnitOfWork.cs
  type ILiquidUnitOfWork (line 10) | public interface ILiquidUnitOfWork : IDisposable
    method GetRepository (line 19) | TRepository GetRepository<TRepository, TEntity, TIdentifier>()
    method StartTransactionAsync (line 27) | Task StartTransactionAsync();
    method CommitAsync (line 33) | Task CommitAsync();
    method RollbackTransactionAsync (line 39) | Task RollbackTransactionAsync();

FILE: src/Liquid.Core/Interfaces/ILiquidWorker.cs
  type ILiquidWorker (line 12) | public interface ILiquidWorker<TEntity>
    method ProcessMessageAsync (line 21) | Task ProcessMessageAsync(ConsumerMessageEventArgs<TEntity> args, Cance...

FILE: src/Liquid.Core/Localization/Entities/LocalizationCollection.cs
  class LocalizationCollection (line 10) | [ExcludeFromCodeCoverage]
    method LocalizationCollection (line 25) | public LocalizationCollection()

FILE: src/Liquid.Core/Localization/Entities/LocalizationItem.cs
  class LocalizationItem (line 10) | [ExcludeFromCodeCoverage]
    method LocalizationItem (line 34) | public LocalizationItem()

FILE: src/Liquid.Core/Localization/Entities/LocalizationValue.cs
  class LocalizationValue (line 10) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Localization/ILocalization.cs
  type ILocalization (line 9) | [Obsolete("This class will be removed or refactored in the next release.")]
    method Get (line 19) | [Obsolete("This method will be removed or refactored in the next relea...
    method Get (line 30) | [Obsolete("This method will be removed or refactored in the next relea...
    method Get (line 42) | [Obsolete("This method will be removed or refactored in the next relea...

FILE: src/Liquid.Core/Localization/JsonFileLocalization.cs
  class JsonFileLocalization (line 19) | [Obsolete("This class will be removed or refactored in the next release.")]
    method JsonFileLocalization (line 29) | public JsonFileLocalization(IOptions<CultureSettings> configuration)
    method Get (line 42) | [Obsolete("This method will be removed or refactored in the next relea...
    method Get (line 57) | [Obsolete("This method will be removed or refactored in the next relea...
    method Get (line 78) | [Obsolete("This method will be removed or refactored in the next relea...
    method ReadLocalizationFiles (line 105) | private static IDictionary<CultureInfo, LocalizationCollection> ReadLo...

FILE: src/Liquid.Core/Localization/LocalizationException.cs
  class LocalizationException (line 12) | [Serializable]
    method LocalizationException (line 21) | public LocalizationException(string key, Exception innerException) : b...

FILE: src/Liquid.Core/Localization/LocalizationExtensions.cs
  class LocalizationExtensions (line 13) | [ExcludeFromCodeCoverage]
    method GetResourceItem (line 22) | internal static LocalizationItem GetResourceItem(this IEnumerable<Loca...
    method GetResourceValue (line 35) | internal static LocalizationValue GetResourceValue(this LocalizationIt...
    method AddLocalizationService (line 48) | [Obsolete("This method will be removed or refactored in the next relea...

FILE: src/Liquid.Core/Localization/LocalizationReaderException.cs
  class LocalizationReaderException (line 12) | [Serializable]
    method LocalizationReaderException (line 20) | public LocalizationReaderException(Exception innerException) : base("A...

FILE: src/Liquid.Core/PipelineBehaviors/LiquidTelemetryBehavior.cs
  class LiquidTelemetryBehavior (line 16) | public class LiquidTelemetryBehavior<TRequest, TResponse> : IPipelineBeh...
    method LiquidTelemetryBehavior (line 25) | public LiquidTelemetryBehavior(ILogger<LiquidTelemetryBehavior<TReques...
    method Handle (line 38) | public async Task<TResponse> Handle(TRequest request, RequestHandlerDe...
    method AfterResponse (line 62) | private Task AfterResponse(MethodInfo methodInfo)
    method OnExceptionResponse (line 73) | private Task OnExceptionResponse(MethodInfo methodInfo, Exception exce...
    method BeforeRequest (line 79) | private Task BeforeRequest(MethodInfo methodInfo)

FILE: src/Liquid.Core/PipelineBehaviors/LiquidValidationBehavior.cs
  class LiquidValidationBehavior (line 15) | public class LiquidValidationBehavior<TRequest, TResponse> : IPipelineBe...
    method LiquidValidationBehavior (line 23) | public LiquidValidationBehavior(IEnumerable<IValidator<TRequest>> vali...
    method Handle (line 35) | public async Task<TResponse> Handle(TRequest request, RequestHandlerDe...

FILE: src/Liquid.Core/Settings/CultureSettings.cs
  class CultureSettings (line 9) | [LiquidSectionName("liquid:culture")]

FILE: src/Liquid.Core/Settings/DatabaseSettings.cs
  class DatabaseSettings (line 8) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Settings/GenAiOptions.cs
  class GenAiOptions (line 13) | [ExcludeFromCodeCoverage]
  class GenAiSettings (line 22) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Settings/OcrOptions.cs
  class OcrOptions (line 9) | [ExcludeFromCodeCoverage]
  class OcrSettings (line 21) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Settings/ScopedContextSettings.cs
  class ScopedContextSettings (line 10) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Settings/ScopedKey.cs
  class ScopedKey (line 8) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Settings/ScopedLoggingSettings.cs
  class ScopedLoggingSettings (line 10) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Core/Utils/TypeUtils.cs
  class TypeUtils (line 13) | [ExcludeFromCodeCoverage]
    method GetTypesToRegister (line 22) | public static Type[] GetTypesToRegister(Type serviceType, IEnumerable<...
    method ServiceIsAssignableFromImplementation (line 39) | private static bool ServiceIsAssignableFromImplementation(Type service...
    method GetFieldInfo (line 60) | public static FieldInfo GetFieldInfo(Type type, string fieldName)
    method GetPropertyInfo (line 78) | public static PropertyInfo GetPropertyInfo(Type type, string propertyN...

FILE: src/Liquid.Core/Utils/ZipUtils.cs
  class ZipUtils (line 11) | [ExcludeFromCodeCoverage]
    method GzipCompress (line 21) | public static byte[] GzipCompress(this string inputString)
    method GzipCompress (line 34) | public static byte[] GzipCompress(this string inputString, Encoding en...
    method GzipDecompress (line 56) | public static string GzipDecompress(this byte[] inputBytes)
    method GzipDecompress (line 69) | public static string GzipDecompress(this byte[] inputBytes, Encoding e...
    method DeflateCompress (line 94) | public static byte[] DeflateCompress(this string inputString)
    method DeflateCompress (line 107) | public static byte[] DeflateCompress(this string inputString, Encoding...
    method DeflateDecompress (line 129) | public static string DeflateDecompress(this byte[] inputBytes)
    method DeflateDecompress (line 142) | public static string DeflateDecompress(this byte[] inputBytes, Encodin...

FILE: src/Liquid.Dataverse/DataverseClientFactory.cs
  class DataverseClientFactory (line 8) | public class DataverseClientFactory : IDataverseClientFactory
    method DataverseClientFactory (line 17) | public DataverseClientFactory(IOptions<DataverseSettings> options)
    method GetClient (line 25) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Dataverse/DataverseEntityMapper.cs
  class DataverseEntityMapper (line 14) | [ExcludeFromCodeCoverage]
    method DataverseEntityMapper (line 25) | public DataverseEntityMapper(ILiquidDataverse adapter) : base(nameof(D...
    method MapImpl (line 31) | protected override async Task<Entity> MapImpl(string jsonString, strin...
    method GetEntityAttributes (line 45) | private async Task<List<AttributeMetadata>?> GetEntityAttributes(strin...
    method JsonToEntity (line 73) | private static Entity JsonToEntity(List<AttributeMetadata> attributes,...

FILE: src/Liquid.Dataverse/DataverseSettings.cs
  class DataverseSettings (line 8) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Dataverse/Extensions/DependencyInjection/IServiceCollectionExtensions.cs
  class IServiceCollectionExtensions (line 12) | [ExcludeFromCodeCoverage]
    method AddLiquidDataverseAdapter (line 23) | public static IServiceCollection AddLiquidDataverseAdapter(this IServi...

FILE: src/Liquid.Dataverse/Extensions/EntityExtensions.cs
  class EntityExtensions (line 10) | [ExcludeFromCodeCoverage]
    method ToJsonString (line 20) | public static string ToJsonString(this Entity entity)

FILE: src/Liquid.Dataverse/IDataverseClientFactory.cs
  type IDataverseClientFactory (line 8) | public interface IDataverseClientFactory
    method GetClient (line 14) | IOrganizationServiceAsync GetClient();

FILE: src/Liquid.Dataverse/ILiquidDataverse.cs
  type ILiquidDataverse (line 10) | public interface ILiquidDataverse
    method Create (line 20) | Task<Guid> Create(Entity targetEntity, bool bypassSynchronousCustomLog...
    method Update (line 30) | Task Update(Entity entity, bool useOptimisticConcurrency = false, bool...
    method GetById (line 38) | Task<Entity> GetById(Guid id, string entityName, ColumnSet? columns = ...
    method ListByFilter (line 46) | Task<List<Entity>> ListByFilter(string entityName, FilterExpression fi...
    method Delete (line 55) | Task Delete(Guid id, string entityName, bool bypassSynchronousLogic = ...
    method ListByFilter (line 62) | Task<List<Entity>> ListByFilter(string entityName, QueryExpression que...
    method GetMetadata (line 69) | Task<EntityMetadata> GetMetadata(string entityName);
    method SetState (line 77) | Task SetState(EntityReference entity, string state, string status);
    method Upsert (line 83) | Task Upsert(Entity entity);

FILE: src/Liquid.Dataverse/LiquidDataverse.cs
  class LiquidDataverse (line 11) | public class LiquidDataverse : ILiquidDataverse
    method LiquidDataverse (line 21) | public LiquidDataverse(IDataverseClientFactory serviceFactory)
    method GetById (line 27) | public async Task<Entity> GetById(Guid id, string entityName, ColumnSe...
    method ListByFilter (line 38) | public async Task<List<Entity>> ListByFilter(string entityName, Filter...
    method ListByFilter (line 63) | public async Task<List<Entity>> ListByFilter(string entityName, QueryE...
    method GetMetadata (line 86) | public async Task<EntityMetadata> GetMetadata(string entityName)
    method SetState (line 99) | public async Task SetState(EntityReference entity, string state, strin...
    method Upsert (line 116) | public async Task Upsert(Entity entity)
    method Create (line 127) | public Task<Guid> Create(Entity targetEntity, bool bypassSynchronousCu...
    method Update (line 144) | public async Task Update(Entity entity, bool useOptimisticConcurrency ...
    method Delete (line 163) | public async Task Delete(Guid id, string entityName, bool bypassSynchr...

FILE: src/Liquid.GenAi.OpenAi/Extensions/IServiceCollectionExtension.cs
  class IServiceCollectionExtension (line 12) | [ExcludeFromCodeCoverage]
    method AddLiquidOpenAiCompletions (line 21) | public static IServiceCollection AddLiquidOpenAiCompletions(this IServ...

FILE: src/Liquid.GenAi.OpenAi/IOpenAiClientFactory.cs
  type IOpenAiClientFactory (line 8) | public interface IOpenAiClientFactory
    method GetOpenAIClient (line 14) | ChatClient GetOpenAIClient(string clientId);

FILE: src/Liquid.GenAi.OpenAi/OpenAiAdapter.cs
  class OpenAiAdapter (line 12) | [ExcludeFromCodeCoverage]
    method OpenAiAdapter (line 22) | public OpenAiAdapter(IOpenAiClientFactory factory)
    method FunctionCalling (line 28) | public async Task<ChatCompletionResult> FunctionCalling(LiquidChatMess...
    method CompleteChatAsync (line 56) | public async Task<ChatCompletionResult> CompleteChatAsync(string conte...
    method CompleteChatAsync (line 80) | public async Task<ChatCompletionResult> CompleteChatAsync(LiquidChatMe...
    method GetChatMessagesAsync (line 128) | private static List<ChatMessage> GetChatMessagesAsync(string content, ...
    method MapChatRequestMessage (line 153) | private static ChatMessage MapChatRequestMessage(LiquidChatMessage mes...
    method CreateContent (line 179) | private static IEnumerable<ChatMessageContentPart> CreateContent(Liqui...
    method MapChatCompletionOptions (line 197) | private static ChatCompletionOptions MapChatCompletionOptions(Completi...

FILE: src/Liquid.GenAi.OpenAi/OpenAiClientFactory.cs
  class OpenAiClientFactory (line 13) | public class OpenAiClientFactory : IOpenAiClientFactory
    method OpenAiClientFactory (line 23) | public OpenAiClientFactory(IOptions<OpenAiOptions> settings)
    method GetOpenAIClient (line 30) | public ChatClient GetOpenAIClient(string clientId)
    method CreateClient (line 57) | private ChatClient? CreateClient(List<OpenAiSettings>? settings, strin...

FILE: src/Liquid.GenAi.OpenAi/Settings/OpenAiOptions.cs
  class OpenAiOptions (line 8) | [ExcludeFromCodeCoverage]
  class OpenAiSettings (line 20) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Messaging.Kafka/Extensions/DependencyInjection/IServiceCollectionExtension.cs
  class IServiceCollectionExtension (line 14) | public static class IServiceCollectionExtension
    method AddLiquidKafkaProducer (line 25) | public static IServiceCollection AddLiquidKafkaProducer<TEntity>(this ...
    method AddLiquidKafkaConsumer (line 58) | public static IServiceCollection AddLiquidKafkaConsumer<TWorker, TEnti...
    method AddLiquidKafkaConsumer (line 79) | public static IServiceCollection AddLiquidKafkaConsumer<TWorker, TEnti...
    method AddConsumer (line 89) | private static IServiceCollection AddConsumer<TEntity>(this IServiceCo...

FILE: src/Liquid.Messaging.Kafka/Extensions/HeadersExtension.cs
  class HeadersExtension (line 11) | [ExcludeFromCodeCoverage]
    method AddCustomHeaders (line 19) | public static Headers AddCustomHeaders(this Headers messageAttributes,...
    method GetCustomHeaders (line 37) | public static Dictionary<string, object> GetCustomHeaders(this Headers...

FILE: src/Liquid.Messaging.Kafka/IKafkaFactory.cs
  type IKafkaFactory (line 10) | public interface IKafkaFactory
    method GetConsumer (line 16) | IConsumer<Ignore, string> GetConsumer(KafkaSettings settings);
    method GetProducer (line 22) | IProducer<Null, string> GetProducer(KafkaSettings settings);

FILE: src/Liquid.Messaging.Kafka/KafkaConsumer.cs
  class KafkaConsumer (line 16) | public class KafkaConsumer<TEntity> : ILiquidConsumer<TEntity>
    method KafkaConsumer (line 35) | public KafkaConsumer(IKafkaFactory kafkaFactory, IOptions<KafkaSetting...
    method RegisterMessageHandler (line 42) | public Task RegisterMessageHandler(CancellationToken cancellationToken...
    method MessageHandler (line 71) | protected async Task MessageHandler(CancellationToken cancellationToken)
    method GetEventArgs (line 108) | private ConsumerMessageEventArgs<TEntity> GetEventArgs(ConsumeResult<I...
    method ProcessError (line 122) | private Task ProcessError(ConsumerErrorEventArgs args)

FILE: src/Liquid.Messaging.Kafka/KafkaFactory.cs
  class KafkaFactory (line 9) | public class KafkaFactory : IKafkaFactory
    method GetConsumer (line 12) | public IConsumer<Ignore, string> GetConsumer(KafkaSettings settings)
    method GetProducer (line 29) | public IProducer<Null, string> GetProducer(KafkaSettings settings)
    method MapConsumerSettings (line 43) | private static ConsumerConfig MapConsumerSettings(KafkaSettings settings)
    method MapProducerSettings (line 59) | private static ProducerConfig MapProducerSettings(KafkaSettings settings)

FILE: src/Liquid.Messaging.Kafka/KafkaProducer.cs
  class KafkaProducer (line 17) | public class KafkaProducer<TEntity> : ILiquidProducer<TEntity>
    method KafkaProducer (line 28) | public KafkaProducer(IOptions<KafkaSettings> settings, IKafkaFactory f...
    method SendMessagesAsync (line 41) | public async Task SendMessagesAsync(IEnumerable<TEntity> messageBodies)
    method SendMessageAsync (line 57) | public async Task SendMessageAsync(TEntity messageBody, IDictionary<st...
    method GetMessage (line 71) | private Message<Null, string> GetMessage(TEntity messageBody, IDiction...

FILE: src/Liquid.Messaging.Kafka/Settings/KafkaSettings.cs
  class KafkaSettings (line 8) | [LiquidSectionName("liquid:messaging:kafka:")]

FILE: src/Liquid.Messaging.RabbitMq/Extensions/DependencyInjection/IServiceCollectionExtension.cs
  class IServiceCollectionExtension (line 14) | public static class IServiceCollectionExtension
    method AddLiquidRabbitMqProducer (line 25) | public static IServiceCollection AddLiquidRabbitMqProducer<TEntity>(th...
    method AddLiquidRabbitMqConsumer (line 60) | public static IServiceCollection AddLiquidRabbitMqConsumer<TWorker, TE...
    method AddLiquidRabbitMqConsumer (line 81) | public static IServiceCollection AddLiquidRabbitMqConsumer<TWorker, TE...
    method AddConsumer (line 91) | private static IServiceCollection AddConsumer<TEntity>(this IServiceCo...

FILE: src/Liquid.Messaging.RabbitMq/IRabbitMqFactory.cs
  type IRabbitMqFactory (line 9) | public interface IRabbitMqFactory
    method GetSender (line 15) | IModel GetSender(RabbitMqProducerSettings settings);
    method GetReceiver (line 21) | IModel GetReceiver(RabbitMqConsumerSettings settings);

FILE: src/Liquid.Messaging.RabbitMq/RabbitMqConsumer.cs
  class RabbitMqConsumer (line 21) | public class RabbitMqConsumer<TEntity> : ILiquidConsumer<TEntity>
    method RabbitMqConsumer (line 40) | public RabbitMqConsumer(IRabbitMqFactory factory, IOptions<RabbitMqCon...
    method RegisterMessageHandler (line 54) | public async Task RegisterMessageHandler(CancellationToken cancellatio...
    method MessageHandler (line 76) | protected async Task MessageHandler(BasicDeliverEventArgs deliverEvent...
    method GetEventArgs (line 110) | private ConsumerMessageEventArgs<TEntity> GetEventArgs(BasicDeliverEve...

FILE: src/Liquid.Messaging.RabbitMq/RabbitMqFactory.cs
  class RabbitMqFactory (line 10) | [ExcludeFromCodeCoverage]
    method RabbitMqFactory (line 21) | public RabbitMqFactory()
    method GetReceiver (line 26) | public IModel GetReceiver(RabbitMqConsumerSettings settings)
    method GetSender (line 64) | public IModel GetSender(RabbitMqProducerSettings settings)
    method Dispose (line 93) | protected virtual void Dispose(bool disposing)
    method Dispose (line 110) | public void Dispose()

FILE: src/Liquid.Messaging.RabbitMq/RabbitMqProducer.cs
  class RabbitMqProducer (line 15) | public class RabbitMqProducer<TEntity> : ILiquidProducer<TEntity>
    method RabbitMqProducer (line 27) | public RabbitMqProducer(IRabbitMqFactory factory, IOptions<RabbitMqPro...
    method SendMessageAsync (line 42) | public async Task SendMessageAsync(TEntity messageBody, IDictionary<st...
    method SendMessagesAsync (line 64) | public async Task SendMessagesAsync(IEnumerable<TEntity> messageBodies)
    method GetProperties (line 79) | private IBasicProperties GetProperties(IDictionary<string, object> cus...

FILE: src/Liquid.Messaging.RabbitMq/Settings/AdvancedSettings.cs
  class AdvancedSettings (line 9) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Messaging.RabbitMq/Settings/QueueAckModeEnum.cs
  type QueueAckModeEnum (line 6) | public enum QueueAckModeEnum

FILE: src/Liquid.Messaging.RabbitMq/Settings/QueueAckModeSettings.cs
  class QueueAckModeSettings (line 9) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Messaging.RabbitMq/Settings/RabbitMqConsumerSettings.cs
  class RabbitMqConsumerSettings (line 8) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Messaging.RabbitMq/Settings/RabbitMqProducerSettings.cs
  class RabbitMqProducerSettings (line 8) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Messaging.RabbitMq/Settings/RabbitMqSettings.cs
  class RabbitMqSettings (line 9) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Messaging.ServiceBus/Extensions/DependencyInjection/IServiceCollectionExtensions.cs
  class IServiceCollectionExtensions (line 15) | [ExcludeFromCodeCoverage]
    method AddLiquidServiceBusProducer (line 27) | public static IServiceCollection AddLiquidServiceBusProducer<TEntity>(...
    method AddLiquidServiceBusConsumer (line 71) | public static IServiceCollection AddLiquidServiceBusConsumer<TWorker, ...
    method AddLiquidServiceBusConsumer (line 101) | public static IServiceCollection AddLiquidServiceBusConsumer<TWorker, ...
    method AddConsumer (line 111) | private static IServiceCollection AddConsumer<TEntity>(this IServiceCo...

FILE: src/Liquid.Messaging.ServiceBus/IServiceBusFactory.cs
  type IServiceBusFactory (line 8) | public interface IServiceBusFactory
    method GetSender (line 13) | ServiceBusSender GetSender(string entityPath);
    method GetProcessor (line 18) | ServiceBusProcessor GetProcessor(string entityPath);
    method GetReceiver (line 23) | ServiceBusReceiver GetReceiver(string entityPath);

FILE: src/Liquid.Messaging.ServiceBus/ServiceBusConsumer.cs
  class ServiceBusConsumer (line 15) | public class ServiceBusConsumer<TEntity> : ILiquidConsumer<TEntity>
    method ServiceBusConsumer (line 34) | public ServiceBusConsumer(IServiceBusFactory factory, string settingsN...
    method RegisterMessageHandler (line 41) | public async Task RegisterMessageHandler(CancellationToken cancellatio...
    method MessageHandler (line 62) | protected async Task MessageHandler(ProcessMessageEventArgs message)
    method ErrorHandler (line 71) | protected async Task ErrorHandler(ProcessErrorEventArgs args)
    method GetEventArgs (line 79) | private ConsumerMessageEventArgs<TEntity> GetEventArgs(ServiceBusRecei...
    method ProcessError (line 92) | protected static Task ProcessError(ConsumerErrorEventArgs args)

FILE: src/Liquid.Messaging.ServiceBus/ServiceBusFactory.cs
  class ServiceBusFactory (line 11) | public class ServiceBusFactory : IServiceBusFactory
    method ServiceBusFactory (line 19) | public ServiceBusFactory(IOptions<ServiceBusSettings> settings)
    method GetProcessor (line 25) | public ServiceBusProcessor GetProcessor(string settingsName)
    method GetSender (line 63) | public ServiceBusSender GetSender(string settingsName)
    method GetReceiver (line 86) | public ServiceBusReceiver GetReceiver(string settingsName)

FILE: src/Liquid.Messaging.ServiceBus/ServiceBusProducer.cs
  class ServiceBusProducer (line 13) | public class ServiceBusProducer<TEntity> : ILiquidProducer<TEntity>
    method ServiceBusProducer (line 21) | public ServiceBusProducer(IServiceBusFactory factory, string settingsN...
    method SendMessagesAsync (line 28) | public async Task SendMessagesAsync(IEnumerable<TEntity> messageBodies)
    method SendMessageAsync (line 41) | public async Task SendMessageAsync(TEntity messageBody, IDictionary<st...
    method ToMessage (line 53) | private ServiceBusMessage ToMessage(TEntity messageBody, IDictionary<s...

FILE: src/Liquid.Messaging.ServiceBus/Settings/ServiceBusSettings.cs
  class ServiceBusSettings (line 10) | public class ServiceBusSettings
  class ServiceBusEntitySettings (line 20) | public class ServiceBusEntitySettings

FILE: src/Liquid.Repository.EntityFramework/EntityFrameworkDataContext.cs
  class EntityFrameworkDataContext (line 12) | public class EntityFrameworkDataContext<TContext> : IEntityFrameworkData...
    method EntityFrameworkDataContext (line 32) | public EntityFrameworkDataContext(TContext dbContext)
    method StartTransactionAsync (line 38) | public async Task StartTransactionAsync()
    method CommitAsync (line 45) | public async Task CommitAsync()
    method RollbackTransactionAsync (line 51) | public async Task RollbackTransactionAsync()
    method Dispose (line 57) | public void Dispose()
    method Dispose (line 67) | protected virtual void Dispose(bool disposing)

FILE: src/Liquid.Repository.EntityFramework/EntityFrameworkRepository.cs
  class EntityFrameworkRepository (line 20) | public class EntityFrameworkRepository<TEntity, TIdentifier, TContext> :...
    method EntityFrameworkRepository (line 42) | public EntityFrameworkRepository(IEntityFrameworkDataContext<TContext>...
    method AddAsync (line 53) | public async Task AddAsync(TEntity entity)
    method FindAllAsync (line 60) | public async Task<IEnumerable<TEntity>> FindAllAsync()
    method FindByIdAsync (line 68) | public async Task<TEntity> FindByIdAsync(TIdentifier id)
    method RemoveByIdAsync (line 76) | public async Task RemoveByIdAsync(TIdentifier id)
    method UpdateAsync (line 87) | public async Task UpdateAsync(TEntity entity)
    method WhereAsync (line 95) | public async Task<IEnumerable<TEntity>> WhereAsync(Expression<Func<TEn...
    method WhereInclude (line 111) | public IEnumerable<TEntity> WhereInclude(Expression<Func<TEntity, bool...
    method WhereInclude (line 124) | public IEnumerable<TEntity> WhereInclude(Expression<Func<TEntity, bool...

FILE: src/Liquid.Repository.EntityFramework/Exceptions/DatabaseDoesNotExistException.cs
  class DatabaseDoesNotExistException (line 11) | [Serializable]
    method DatabaseDoesNotExistException (line 16) | public DatabaseDoesNotExistException()
    method DatabaseDoesNotExistException (line 24) | public DatabaseDoesNotExistException(string databaseName) : base($"Dat...
    method DatabaseDoesNotExistException (line 29) | public DatabaseDoesNotExistException(string message, Exception innerEx...

FILE: src/Liquid.Repository.EntityFramework/Extensions/DbContextExtensions.cs
  class DbContextExtensions (line 9) | public static class DbContextExtensions
    method Detach (line 17) | public static void Detach<TEntity>(this DbContext dbContext, Func<TEnt...

FILE: src/Liquid.Repository.EntityFramework/Extensions/ILiquidRepositoryExtensions.cs
  class ILiquidRepositoryExtensions (line 13) | [ExcludeFromCodeCoverage]
    method WhereInclude (line 27) | public static ILiquidRepository<TEntity, TIdentifier> WhereInclude<TEn...
    method WhereInclude (line 49) | public static ILiquidRepository<TEntity, TIdentifier> WhereInclude<TEn...

FILE: src/Liquid.Repository.EntityFramework/Extensions/IServiceCollectionExtensions.cs
  class IServiceCollectionExtensions (line 15) | public static class IServiceCollectionExtensions
    method AddLiquidEntityFramework (line 27) | public static IServiceCollection AddLiquidEntityFramework<TContext, TE...
    method AddLiquidDbContext (line 40) | private static void AddLiquidDbContext<TContext>(IServiceCollection se...

FILE: src/Liquid.Repository.EntityFramework/IEntityFrameworkDataContext.cs
  type IEntityFrameworkDataContext (line 11) | public interface IEntityFrameworkDataContext<out TContext> : ILiquidData...

FILE: src/Liquid.Repository.Mongo/Exceptions/MongoEntitySettingsDoesNotExistException.cs
  class MongoEntitySettingsDoesNotExistException (line 12) | [ExcludeFromCodeCoverage]
    method MongoEntitySettingsDoesNotExistException (line 20) | public MongoEntitySettingsDoesNotExistException(string entityName)
    method MongoEntitySettingsDoesNotExistException (line 25) | public MongoEntitySettingsDoesNotExistException(string message, Except...

FILE: src/Liquid.Repository.Mongo/Exceptions/MongoException.cs
  class MongoException (line 11) | [ExcludeFromCodeCoverage]
    method MongoException (line 15) | public MongoException()
    method MongoException (line 23) | public MongoException(Exception innerException) : base("An error has o...
    method MongoException (line 28) | public MongoException(string message) : base(message)
    method MongoException (line 37) | public MongoException(string message, Exception innerException) : base...

FILE: src/Liquid.Repository.Mongo/Extensions/IMongoCollectionExtensions.cs
  class IMongoCollectionExtensions (line 11) | public static class IMongoCollectionExtensions
    method InsertOneAsync (line 20) | public static async Task InsertOneAsync<TDocument>(this IMongoCollecti...
    method FindAsync (line 38) | public static async Task<IAsyncCursor<TDocument>> FindAsync<TDocument>...
    method FindAsync (line 54) | public static async Task<IAsyncCursor<TDocument>> FindAsync<TDocument>...
    method DeleteOneAsync (line 70) | public static async Task<DeleteResult> DeleteOneAsync<TDocument>(this ...
    method ReplaceOneAsync (line 88) | public static async Task<ReplaceOneResult> ReplaceOneAsync<TDocument>(...

FILE: src/Liquid.Repository.Mongo/Extensions/IServiceCollectionExtensions.cs
  class IServiceCollectionExtensions (line 15) | public static class IServiceCollectionExtensions
    method AddLiquidMongoRepository (line 28) | public static IServiceCollection AddLiquidMongoRepository<TEntity, TId...

FILE: src/Liquid.Repository.Mongo/IMongoClientFactory.cs
  type IMongoClientFactory (line 10) | public interface IMongoClientFactory
    method GetClient (line 17) | IMongoClient GetClient(string collectionName, out MongoEntitySettings ...

FILE: src/Liquid.Repository.Mongo/IMongoDataContext.cs
  type IMongoDataContext (line 11) | public interface IMongoDataContext<TEntity> : ILiquidDataContext
    method SetDatabase (line 43) | void SetDatabase(string databaseName);

FILE: src/Liquid.Repository.Mongo/MongoClientFactory.cs
  class MongoClientFactory (line 12) | public class MongoClientFactory : IMongoClientFactory
    method MongoClientFactory (line 20) | public MongoClientFactory(IOptions<MongoDbSettings> settings)
    method GetClient (line 27) | public IMongoClient GetClient(string collectionName, out MongoEntitySe...
    method CreateClient (line 40) | private IMongoClient CreateClient(MongoEntitySettings databaseSettings)

FILE: src/Liquid.Repository.Mongo/MongoDataContext.cs
  class MongoDataContext (line 13) | public class MongoDataContext<TEntity> : IMongoDataContext<TEntity>
    method MongoDataContext (line 65) | public MongoDataContext(IMongoClientFactory clientProvider, string col...
    method StartTransactionAsync (line 80) | public async Task StartTransactionAsync()
    method CommitAsync (line 89) | public async Task CommitAsync()
    method RollbackTransactionAsync (line 97) | public async Task RollbackTransactionAsync()
    method Dispose (line 103) | public void Dispose()
    method Dispose (line 113) | protected virtual void Dispose(bool disposing)
    method SetDatabase (line 130) | public void SetDatabase(string databaseName)

FILE: src/Liquid.Repository.Mongo/MongoRepository.cs
  class MongoRepository (line 22) | public class MongoRepository<TEntity, TIdentifier> : ILiquidRepository<T...
    method MongoRepository (line 41) | public MongoRepository(IMongoDataContext<TEntity> dataContext)
    method AddAsync (line 49) | public async Task AddAsync(TEntity entity)
    method FindAllAsync (line 58) | public async Task<IEnumerable<TEntity>> FindAllAsync()
    method FindByIdAsync (line 69) | public async Task<TEntity> FindByIdAsync(TIdentifier id)
    method RemoveByIdAsync (line 79) | public async Task RemoveByIdAsync(TIdentifier id)
    method UpdateAsync (line 86) | public async Task UpdateAsync(TEntity entity)
    method WhereAsync (line 95) | public async Task<IEnumerable<TEntity>> WhereAsync(Expression<Func<TEn...

FILE: src/Liquid.Repository.Mongo/Settings/MongoEntitySettings.cs
  class MongoDbSettings (line 10) | public class MongoDbSettings
  class MongoEntitySettings (line 21) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.Repository.OData/Extensions/IServiceCollectionExtension.cs
  class IServiceCollectionExtensions (line 19) | public static class IServiceCollectionExtensions
    method AddLiquidOdataRepository (line 30) | public static IServiceCollection AddLiquidOdataRepository<TEntity, TId...

FILE: src/Liquid.Repository.OData/IODataClientFactory.cs
  type IODataClientFactory (line 13) | public interface IODataClientFactory
    method CreateODataClientAsync (line 19) | IODataClient CreateODataClientAsync(string entityName);

FILE: src/Liquid.Repository.OData/ODataClientFactory.cs
  class ODataClientFactory (line 8) | public class ODataClientFactory : IODataClientFactory
    method ODataClientFactory (line 18) | public ODataClientFactory(IOptions<ODataOptions> options, ILiquidConte...
    method CreateODataClientAsync (line 25) | public IODataClient CreateODataClientAsync(string entityName)
    method GetODataSettings (line 52) | private static ODataClientSettings GetODataSettings(ODataSettings? set...

FILE: src/Liquid.Repository.OData/ODataRepository.cs
  class ODataRepository (line 8) | public class ODataRepository<TEntity, TIdentifier> : ILiquidRepository<T...
    method ODataRepository (line 22) | public ODataRepository(IODataClientFactory clientFactory, string entit...
    method AddAsync (line 30) | public async Task AddAsync(TEntity entity)
    method FindAllAsync (line 38) | public async Task<IEnumerable<TEntity>> FindAllAsync()
    method FindByIdAsync (line 46) | public async Task<TEntity> FindByIdAsync(TIdentifier id)
    method RemoveByIdAsync (line 54) | public async Task RemoveByIdAsync(TIdentifier id)
    method UpdateAsync (line 62) | public async Task UpdateAsync(TEntity entity)
    method WhereAsync (line 70) | public async Task<IEnumerable<TEntity>> WhereAsync(Expression<Func<TEn...

FILE: src/Liquid.Repository.OData/ODataSettings.cs
  class ODataSettings (line 6) | public class ODataSettings
  class ODataOptions (line 27) | public class ODataOptions

FILE: src/Liquid.Storage.AzureStorage/BlobClientFactory.cs
  class BlobClientFactory (line 7) | public class BlobClientFactory : IBlobClientFactory
    method BlobClientFactory (line 20) | public BlobClientFactory(IOptions<StorageSettings>? options)
    method SetContainerClients (line 26) | public void SetContainerClients()
    method GetContainerClient (line 40) | public BlobContainerClient GetContainerClient(string containerName)

FILE: src/Liquid.Storage.AzureStorage/Extensions/IServiceCollectionExtensions.cs
  class IServiceCollectionExtensions (line 12) | [ExcludeFromCodeCoverage]
    method AddLiquidAzureStorageAdapter (line 22) | public static IServiceCollection AddLiquidAzureStorageAdapter(this ISe...

FILE: src/Liquid.Storage.AzureStorage/IBlobClientFactory.cs
  type IBlobClientFactory (line 8) | public interface IBlobClientFactory
    method SetContainerClients (line 20) | void SetContainerClients();
    method GetContainerClient (line 28) | BlobContainerClient GetContainerClient(string containerName);

FILE: src/Liquid.Storage.AzureStorage/LiquidStorageAzure.cs
  class LiquidStorageAzure (line 12) | public class LiquidStorageAzure : ILiquidStorage
    method LiquidStorageAzure (line 21) | public LiquidStorageAzure(IBlobClientFactory factory)
    method DeleteByTags (line 29) | public async Task DeleteByTags(IDictionary<string, string> tags, strin...
    method GetAllBlobs (line 52) | public async Task<List<LiquidBlob>> GetAllBlobs(string containerName)
    method Delete (line 78) | public async Task Delete(string id, string containerName)
    method ReadBlobsByTags (line 88) | public async Task<List<LiquidBlob>> ReadBlobsByTags(IDictionary<string...
    method UploadBlob (line 121) | public async Task<string> UploadBlob(byte[] data, string name, string ...
    method ReadBlobsByName (line 137) | public async Task<LiquidBlob> ReadBlobsByName(string blobName, string ...
    method GetBlobSasUri (line 169) | public string? GetBlobSasUri(string blobName, string containerName, Da...

FILE: src/Liquid.Storage.AzureStorage/StorageSettings.cs
  class StorageSettings (line 6) | public class StorageSettings
  class ContainerSettings (line 17) | public class ContainerSettings

FILE: src/Liquid.WebApi.Http/Attributes/SwaggerAuthorizationHeaderAttribute.cs
  class SwaggerAuthorizationHeaderAttribute (line 10) | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowM...
    method SwaggerAuthorizationHeaderAttribute (line 17) | public SwaggerAuthorizationHeaderAttribute() : base("Authorization", t...

FILE: src/Liquid.WebApi.Http/Attributes/SwaggerBaseHeaderAttribute.cs
  class SwaggerBaseHeaderAttribute (line 10) | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowM...
    method SwaggerBaseHeaderAttribute (line 44) | protected SwaggerBaseHeaderAttribute(string name, bool required = fals...

FILE: src/Liquid.WebApi.Http/Attributes/SwaggerChannelHeaderAttribute.cs
  class SwaggerChannelHeaderAttribute (line 10) | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowM...
    method SwaggerChannelHeaderAttribute (line 17) | public SwaggerChannelHeaderAttribute() : base("Channel", false, "Examp...

FILE: src/Liquid.WebApi.Http/Attributes/SwaggerCultureHeaderAttribute.cs
  class SwaggerCultureHeaderAttribute (line 10) | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowM...
    method SwaggerCultureHeaderAttribute (line 17) | public SwaggerCultureHeaderAttribute() : base("Culture", false, "Examp...

FILE: src/Liquid.WebApi.Http/Attributes/SwaggerCustomHeaderAttribute.cs
  class SwaggerCustomHeaderAttribute (line 10) | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowM...
    method SwaggerCustomHeaderAttribute (line 20) | public SwaggerCustomHeaderAttribute(string name, bool required = false...

FILE: src/Liquid.WebApi.Http/Entities/LiquidErrorResponse.cs
  class LiquidErrorResponse (line 11) | [ExcludeFromCodeCoverage]

FILE: src/Liquid.WebApi.Http/Exceptions/LiquidContextKeysException.cs
  class LiquidContextKeysException (line 9) | [ExcludeFromCodeCoverage]
    method LiquidContextKeysException (line 14) | public LiquidContextKeysException()
    method LiquidContextKeysException (line 19) | public LiquidContextKeysException(string contextKey) : base($"The valu...
    method LiquidContextKeysException (line 24) | public LiquidContextKeysException(string message, Exception innerExcep...

FILE: src/Liquid.WebApi.Http/Exceptions/LiquidScopedKeysException.cs
  class LiquidScopedtKeysException (line 9) | [ExcludeFromCodeCoverage]
    method LiquidScopedtKeysException (line 14) | public LiquidScopedtKeysException()
    method LiquidScopedtKeysException (line 19) | public LiquidScopedtKeysException(string contextKey) : base($"The valu...
    method LiquidScopedtKeysException (line 24) | public LiquidScopedtKeysException(string message, Exception innerExcep...

FILE: src/Liquid.WebApi.Http/Extensions/DependencyInjection/IApplicationBuilderExtensions.cs
  class IApplicationBuilderExtensions (line 13) | [ExcludeFromCodeCoverage]
    method UseLiquidCulture (line 20) | public static IApplicationBuilder UseLiquidCulture(this IApplicationBu...
    method UseLiquidException (line 29) | public static IApplicationBuilder UseLiquidException(this IApplication...
    method UseLiquidContext (line 38) | public static IApplicationBuilder UseLiquidContext(this IApplicationBu...
    method UseLiquidScopedLogging (line 47) | public static IApplicationBuilder UseLiquidScopedLogging(this IApplica...
    method UseLiquidSwagger (line 56) | public static IApplicationBuilder UseLiquidSwagger(this IApplicationBu...
    method UseLiquidConfigure (line 75) | public static IApplicationBuilder UseLiquidConfigure(this IApplication...

FILE: src/Liquid.WebApi.Http/Extensions/DependencyInjection/IServiceCollectionExtensions.cs
  class IServiceCollectionExtensions (line 24) | [ExcludeFromCodeCoverage]
    method AddLiquidHttp (line 37) | public static IServiceCollection AddLiquidHttp(this IServiceCollection...
    method AddLiquidSwagger (line 82) | public static IServiceCollection AddLiquidSwagger(this IServiceCollect...

FILE: src/Liquid.WebApi.Http/Extensions/HttpContextExtensions.cs
  class HttpContextExtensions (line 11) | [ExcludeFromCodeCoverage]
    method GetValueFromHeader (line 20) | public static string GetValueFromHeader(this HttpContext context, stri...
    method GetValueFromQuery (line 45) | public static string GetValueFromQuery(this HttpContext context, strin...

FILE: src/Liquid.WebApi.Http/Filters/Swagger/AddHeaderParameterFilter.cs
  class AddHeaderParameterFilter (line 16) | [ExcludeFromCodeCoverage]
    method Apply (line 24) | public void Apply(OpenApiOperation operation, OperationFilterContext c...

FILE: src/Liquid.WebApi.Http/Filters/Swagger/DefaultResponseFilter.cs
  class DefaultResponseFilter (line 11) | [ExcludeFromCodeCoverage]
    method Apply (line 19) | public void Apply(OpenApiOperation operation, OperationFilterContext c...

FILE: src/Liquid.WebApi.Http/Filters/Swagger/DocumentSortFilter.cs
  class DocumentSortFilter (line 14) | [ExcludeFromCodeCoverage]
    method Apply (line 22) | public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext co...

FILE: src/Liquid.WebApi.Http/Filters/Swagger/OverloadMethodsSameVerb.cs
  class OverloadMethodsSameVerb (line 16) | [ExcludeFromCodeCoverage]
    method Apply (line 24) | public void Apply(OpenApiOperation operation, OperationFilterContext c...

FILE: src/Liquid.WebApi.Http/Implementations/LiquidControllerBase.cs
  class LiquidControllerBase (line 14) | public abstract class LiquidControllerBase : ControllerBase
    method LiquidControllerBase (line 29) | protected LiquidControllerBase(IMediator mediator)
    method ExecuteAsync (line 39) | protected virtual async Task<TResponse> ExecuteAsync<TResponse>(IReque...
    method ExecuteAsync (line 50) | protected virtual async Task<IActionResult> ExecuteAsync<TRequest>(IRe...

FILE: src/Liquid.WebApi.Http/Implementations/LiquidNotificationHelper.cs
  class LiquidNotificationHelper (line 8) | public class LiquidNotificationHelper : ILiquidNotificationHelper
    method LiquidNotificationHelper (line 16) | public LiquidNotificationHelper(ILiquidContextNotifications contextNot...
    method IncludeMessages (line 22) | public object IncludeMessages<TResponse>(TResponse response)

FILE: src/Liquid.WebApi.Http/Interfaces/ILiquidNotificationHelper.cs
  type ILiquidNotificationHelper (line 6) | public interface ILiquidNotificationHelper
    method IncludeMessages (line 13) | object IncludeMessages<TResponse>(TResponse response);

FILE: src/Liquid.WebApi.Http/Middlewares/LiquidContextMiddleware.cs
  class LiquidContextMiddleware (line 19) | [ExcludeFromCodeCoverage]
    method LiquidContextMiddleware (line 30) | public LiquidContextMiddleware(RequestDelegate next, IOptions<ScopedCo...
    method InvokeAsync (line 41) | public async Task InvokeAsync(HttpContext context)

FILE: src/Liquid.WebApi.Http/Middlewares/LiquidCultureMiddleware.cs
  class LiquidCultureMiddleware (line 16) | [ExcludeFromCodeCoverage]
    method LiquidCultureMiddleware (line 28) | public LiquidCultureMiddleware(RequestDelegate next, IOptions<CultureS...
    method InvokeAsync (line 39) | public async Task InvokeAsync(HttpContext context)

FILE: src/Liquid.WebApi.Http/Middlewares/LiquidExceptionMiddleware.cs
  class LiquidExceptionMiddleware (line 18) | [ExcludeFromCodeCoverage]
    method LiquidExceptionMiddleware (line 31) | public LiquidExceptionMiddleware(RequestDelegate next
    method InvokeAsync (line 46) | public async Task InvokeAsync(HttpContext context)
    method HandleExceptionAsync (line 64) | private Task HandleExceptionAsync(HttpContext context, Exception excep...
    method GetSerializer (line 82) | private ILiquidSerializer GetSerializer(string contentType)

FILE: src/Liquid.WebApi.Http/Middlewares/LiquidScopedLoggingMiddleware.cs
  class LiquidScopedLoggingMiddleware (line 18) | [ExcludeFromCodeCoverage]
    method LiquidScopedLoggingMiddleware (line 31) | public LiquidScopedLoggingMiddleware(RequestDelegate next, ILogger<Liq...
    method InvokeAsync (line 43) | public async Task InvokeAsync(HttpContext context)

FILE: src/Liquid.WebApi.Http/Settings/SwaggerSettings.cs
  class SwaggerSettings (line 10) | [ExcludeFromCodeCoverage]
  class SwaggerEndpoint (line 81) | [ExcludeFromCodeCoverage]

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Entities/ENTITYNAME.cs
  class ENTITYNAME (line 6) | public class ENTITYNAME : LiquidEntity<ENTITYIDTYPE>

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/CreateENTITYNAME/CreateENTITYNAMEHandler.cs
  class CreateENTITYNAMEHandler (line 10) | public class CreateENTITYNAMEHandler : IRequestHandler<CreateENTITYNAMER...
    method CreateENTITYNAMEHandler (line 14) | public CreateENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTITYIDT...
    method Handle (line 19) | public async Task Handle(CreateENTITYNAMERequest request, Cancellation...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/CreateENTITYNAME/CreateENTITYNAMERequest.cs
  class CreateENTITYNAMERequest (line 6) | public class CreateENTITYNAMERequest : IRequest
    method CreateENTITYNAMERequest (line 10) | public CreateENTITYNAMERequest(ENTITYNAME body)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/CreateENTITYNAME/CreateENTITYNAMEValidator.cs
  class CreateENTITYNAMEValidator (line 5) | public class CreateENTITYNAMEValidator : AbstractValidator<CreateENTITYN...
    method CreateENTITYNAMEValidator (line 7) | public CreateENTITYNAMEValidator()

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/ListENTITYNAME/ListENTITYNAMEHandler.cs
  class ListENTITYNAMEHandler (line 10) | public class ListENTITYNAMEHandler : IRequestHandler<ListENTITYNAMEReque...
    method ListENTITYNAMEHandler (line 14) | public ListENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTITYIDTYP...
    method Handle (line 20) | public async Task<ListENTITYNAMEResponse> Handle(ListENTITYNAMERequest...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/ListENTITYNAME/ListENTITYNAMERequest.cs
  class ListENTITYNAMERequest (line 5) | public class ListENTITYNAMERequest : IRequest<ListENTITYNAMEResponse>
    method ListENTITYNAMERequest (line 7) | public ListENTITYNAMERequest()

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/ListENTITYNAME/ListENTITYNAMEResponse.cs
  class ListENTITYNAMEResponse (line 6) | public class ListENTITYNAMEResponse
    method ListENTITYNAMEResponse (line 10) | public ListENTITYNAMEResponse(IEnumerable<ENTITYNAME> data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/ReadENTITYNAME/ReadENTITYNAMEHandler.cs
  class ReadENTITYNAMEHandler (line 10) | public class ReadENTITYNAMEHandler : IRequestHandler<ReadENTITYNAMEReque...
    method ReadENTITYNAMEHandler (line 14) | public ReadENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTITYIDTYP...
    method Handle (line 20) | public async Task<ReadENTITYNAMEResponse> Handle(ReadENTITYNAMERequest...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/ReadENTITYNAME/ReadENTITYNAMERequest.cs
  class ReadENTITYNAMERequest (line 6) | public class ReadENTITYNAMERequest : IRequest<ReadENTITYNAMEResponse>
    method ReadENTITYNAMERequest (line 10) | public ReadENTITYNAMERequest(ENTITYIDTYPE id)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/ReadENTITYNAME/ReadENTITYNAMEResponse.cs
  class ReadENTITYNAMEResponse (line 5) | public class ReadENTITYNAMEResponse
    method ReadENTITYNAMEResponse (line 9) | public ReadENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/RemoveENTITYNAME/RemoveENTITYNAMEHandler.cs
  class RemoveENTITYNAMEHandler (line 10) | public class RemoveENTITYNAMEHandler : IRequestHandler<RemoveENTITYNAMER...
    method RemoveENTITYNAMEHandler (line 14) | public RemoveENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTITYIDT...
    method Handle (line 20) | public async Task<RemoveENTITYNAMEResponse> Handle(RemoveENTITYNAMEReq...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/RemoveENTITYNAME/RemoveENTITYNAMERequest.cs
  class RemoveENTITYNAMERequest (line 6) | public class RemoveENTITYNAMERequest : IRequest<RemoveENTITYNAMEResponse>
    method RemoveENTITYNAMERequest (line 10) | public RemoveENTITYNAMERequest(ENTITYIDTYPE id)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/RemoveENTITYNAME/RemoveENTITYNAMEResponse.cs
  class RemoveENTITYNAMEResponse (line 5) | public class RemoveENTITYNAMEResponse
    method RemoveENTITYNAMEResponse (line 9) | public RemoveENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/UpdateENTITYNAME/UpdateENTITYNAMEHandler.cs
  class UpdateENTITYNAMEHandler (line 10) | public class UpdateENTITYNAMEHandler : IRequestHandler<UpdateENTITYNAMER...
    method UpdateENTITYNAMEHandler (line 14) | public UpdateENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTITYIDT...
    method Handle (line 20) | public async Task<UpdateENTITYNAMEResponse> Handle(UpdateENTITYNAMEReq...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/UpdateENTITYNAME/UpdateENTITYNAMERequest.cs
  class UpdateENTITYNAMERequest (line 6) | public class UpdateENTITYNAMERequest : IRequest<UpdateENTITYNAMEResponse>
    method UpdateENTITYNAMERequest (line 10) | public UpdateENTITYNAMERequest(ENTITYNAME body)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/UpdateENTITYNAME/UpdateENTITYNAMEResponse.cs
  class UpdateENTITYNAMEResponse (line 5) | public class UpdateENTITYNAMEResponse
    method UpdateENTITYNAMEResponse (line 9) | public UpdateENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.Domain/Handlers/UpdateENTITYNAME/UpdateENTITYNAMEValidator.cs
  class UpdateENTITYNAMEValidator (line 5) | public class UpdateENTITYNAMEValidator : AbstractValidator<UpdateENTITYN...
    method UpdateENTITYNAMEValidator (line 7) | public UpdateENTITYNAMEValidator()

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.AddEntity/PROJECTNAME.WebApi/Controllers/ENTITYNAMEController.cs
  class ENTITYNAMEController (line 13) | [ApiController]
    method ENTITYNAMEController (line 17) | public ENTITYNAMEController(IMediator mediator) : base(mediator)
    method GetById (line 21) | [HttpGet("{id}")]
    method Get (line 33) | [HttpGet]
    method Post (line 44) | [HttpPost]
    method Put (line 53) | [HttpPut]
    method Delete (line 64) | [HttpDelete("{id}")]

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Entities/ENTITYNAME.cs
  class ENTITYNAME (line 6) | public class ENTITYNAME : LiquidEntity<ENTITYIDTYPE>

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/CreateENTITYNAME/CreateENTITYNAMEHandler.cs
  class CreateENTITYNAMEHandler (line 10) | public class CreateENTITYNAMEHandler : IRequestHandler<CreateENTITYNAMER...
    method CreateENTITYNAMEHandler (line 14) | public CreateENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTITYIDT...
    method Handle (line 19) | public async Task Handle(CreateENTITYNAMERequest request, Cancellation...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/CreateENTITYNAME/CreateENTITYNAMERequest.cs
  class CreateENTITYNAMERequest (line 6) | public class CreateENTITYNAMERequest : IRequest
    method CreateENTITYNAMERequest (line 10) | public CreateENTITYNAMERequest(ENTITYNAME body)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/CreateENTITYNAME/CreateENTITYNAMEValidator.cs
  class CreateENTITYNAMEValidator (line 5) | public class CreateENTITYNAMEValidator : AbstractValidator<CreateENTITYN...
    method CreateENTITYNAMEValidator (line 7) | public CreateENTITYNAMEValidator()

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/ListENTITYNAME/ListENTITYNAMEHandler.cs
  class ListENTITYNAMEHandler (line 10) | public class ListENTITYNAMEHandler : IRequestHandler<ListENTITYNAMEReque...
    method ListENTITYNAMEHandler (line 14) | public ListENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTITYIDTYP...
    method Handle (line 20) | public async Task<ListENTITYNAMEResponse> Handle(ListENTITYNAMERequest...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/ListENTITYNAME/ListENTITYNAMERequest.cs
  class ListENTITYNAMERequest (line 5) | public class ListENTITYNAMERequest : IRequest<ListENTITYNAMEResponse>
    method ListENTITYNAMERequest (line 7) | public ListENTITYNAMERequest()

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/ListENTITYNAME/ListENTITYNAMEResponse.cs
  class ListENTITYNAMEResponse (line 6) | public class ListENTITYNAMEResponse
    method ListENTITYNAMEResponse (line 10) | public ListENTITYNAMEResponse(IEnumerable<ENTITYNAME> data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/ReadENTITYNAME/ReadENTITYNAMEHandler.cs
  class ReadENTITYNAMEHandler (line 10) | public class ReadENTITYNAMEHandler : IRequestHandler<ReadENTITYNAMEReque...
    method ReadENTITYNAMEHandler (line 14) | public ReadENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTITYIDTYP...
    method Handle (line 20) | public async Task<ReadENTITYNAMEResponse> Handle(ReadENTITYNAMERequest...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/ReadENTITYNAME/ReadENTITYNAMERequest.cs
  class ReadENTITYNAMERequest (line 6) | public class ReadENTITYNAMERequest : IRequest<ReadENTITYNAMEResponse>
    method ReadENTITYNAMERequest (line 10) | public ReadENTITYNAMERequest(ENTITYIDTYPE id)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/ReadENTITYNAME/ReadENTITYNAMEResponse.cs
  class ReadENTITYNAMEResponse (line 5) | public class ReadENTITYNAMEResponse
    method ReadENTITYNAMEResponse (line 9) | public ReadENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/RemoveENTITYNAME/RemoveENTITYNAMEHandler.cs
  class RemoveENTITYNAMEHandler (line 10) | public class RemoveENTITYNAMEHandler : IRequestHandler<RemoveENTITYNAMER...
    method RemoveENTITYNAMEHandler (line 14) | public RemoveENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTITYIDT...
    method Handle (line 20) | public async Task<RemoveENTITYNAMEResponse> Handle(RemoveENTITYNAMEReq...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/RemoveENTITYNAME/RemoveENTITYNAMERequest.cs
  class RemoveENTITYNAMERequest (line 6) | public class RemoveENTITYNAMERequest : IRequest<RemoveENTITYNAMEResponse>
    method RemoveENTITYNAMERequest (line 10) | public RemoveENTITYNAMERequest(ENTITYIDTYPE id)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/RemoveENTITYNAME/RemoveENTITYNAMEResponse.cs
  class RemoveENTITYNAMEResponse (line 5) | public class RemoveENTITYNAMEResponse
    method RemoveENTITYNAMEResponse (line 9) | public RemoveENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/UpdateENTITYNAME/UpdateENTITYNAMEHandler.cs
  class UpdateENTITYNAMEHandler (line 10) | public class UpdateENTITYNAMEHandler : IRequestHandler<UpdateENTITYNAMER...
    method UpdateENTITYNAMEHandler (line 14) | public UpdateENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTITYIDT...
    method Handle (line 20) | public async Task<UpdateENTITYNAMEResponse> Handle(UpdateENTITYNAMEReq...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/UpdateENTITYNAME/UpdateENTITYNAMERequest.cs
  class UpdateENTITYNAMERequest (line 6) | public class UpdateENTITYNAMERequest : IRequest<UpdateENTITYNAMEResponse>
    method UpdateENTITYNAMERequest (line 10) | public UpdateENTITYNAMERequest(ENTITYNAME body)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/UpdateENTITYNAME/UpdateENTITYNAMEResponse.cs
  class UpdateENTITYNAMEResponse (line 5) | public class UpdateENTITYNAMEResponse
    method UpdateENTITYNAMEResponse (line 9) | public UpdateENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/Handlers/UpdateENTITYNAME/UpdateENTITYNAMEValidator.cs
  class UpdateENTITYNAMEValidator (line 5) | public class UpdateENTITYNAMEValidator : AbstractValidator<UpdateENTITYN...
    method UpdateENTITYNAMEValidator (line 7) | public UpdateENTITYNAMEValidator()

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.Domain/IDomainInjection.cs
  type IDomainInjection (line 3) | public interface IDomainInjection

FILE: templates/src/Liquid.Templates/Templates/Liquid.Crud.Solution/src/PROJECTNAME.WebApi/Controllers/ENTITYNAMEController.cs
  class ENTITYNAMEController (line 13) | [ApiController]
    method ENTITYNAMEController (line 17) | public ENTITYNAMEController(IMediator mediator) : base(mediator)
    method GetById (line 21) | [HttpGet("{id}")]
    method Get (line 33) | [HttpGet]
    method Post (line 44) | [HttpPost]
    method Put (line 53) | [HttpPut]
    method Delete (line 64) | [HttpDelete("{id}")]

FILE: templates/src/Liquid.Templates/Templates/Liquid.DbContext.AddEntity/PROJECTNAME.Repository/Configurations/ENTITYNAMEConfiguration.cs
  class ENTITYNAMEConfiguration (line 7) | public class ENTITYNAMEConfiguration : IEntityTypeConfiguration<ENTITYNAME>
    method Configure (line 9) | public void Configure(EntityTypeBuilder<ENTITYNAME> builder)

FILE: templates/src/Liquid.Templates/Templates/Liquid.DbContext.Project/PROJECTNAME.Repository/Configurations/ENTITYNAMEConfiguration.cs
  class ENTITYNAMEConfiguration (line 7) | public class ENTITYNAMEConfiguration : IEntityTypeConfiguration<ENTITYNAME>
    method Configure (line 9) | public void Configure(EntityTypeBuilder<ENTITYNAME> builder)

FILE: templates/src/Liquid.Templates/Templates/Liquid.DbContext.Project/PROJECTNAME.Repository/LiquidDbContext.cs
  class LiquidDbContext (line 6) | public class LiquidDbContext : DbContext
    method LiquidDbContext (line 8) | public LiquidDbContext() : base() { }
    method LiquidDbContext (line 10) | public LiquidDbContext(DbContextOptions<LiquidDbContext> options) : ba...
    method OnModelCreating (line 12) | protected override void OnModelCreating(ModelBuilder modelBuilder)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Domain.AddHandler/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEHandler.cs
  class COMMANDNAMEENTITYNAMEHandler (line 10) | public class COMMANDNAMEENTITYNAMEHandler : IRequestHandler<COMMANDNAMEE...
    method COMMANDNAMEENTITYNAMEHandler (line 14) | public COMMANDNAMEENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTI...
    method Handle (line 20) | public async Task<COMMANDNAMEENTITYNAMEResponse> Handle(COMMANDNAMEENT...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Domain.AddHandler/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMERequest.cs
  class COMMANDNAMEENTITYNAMERequest (line 6) | public class COMMANDNAMEENTITYNAMERequest : IRequest<COMMANDNAMEENTITYNA...
    method COMMANDNAMEENTITYNAMERequest (line 10) | public COMMANDNAMEENTITYNAMERequest(ENTITYNAME body)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Domain.AddHandler/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEResponse.cs
  class COMMANDNAMEENTITYNAMEResponse (line 5) | public class COMMANDNAMEENTITYNAMEResponse
    method COMMANDNAMEENTITYNAMEResponse (line 9) | public COMMANDNAMEENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Domain.AddHandler/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEValidator.cs
  class COMMANDNAMEENTITYNAMEValidator (line 5) | public class COMMANDNAMEENTITYNAMEValidator : AbstractValidator<COMMANDN...
    method COMMANDNAMEENTITYNAMEValidator (line 7) | public COMMANDNAMEENTITYNAMEValidator()

FILE: templates/src/Liquid.Templates/Templates/Liquid.Domain.Project/PROJECTNAME.Domain/Entities/ENTITYNAME.cs
  class ENTITYNAME (line 6) | public class ENTITYNAME : LiquidEntity<ENTITYIDTYPE>

FILE: templates/src/Liquid.Templates/Templates/Liquid.Domain.Project/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEHandler.cs
  class COMMANDNAMEENTITYNAMEHandler (line 10) | public class COMMANDNAMEENTITYNAMEHandler : IRequestHandler<COMMANDNAMEE...
    method COMMANDNAMEENTITYNAMEHandler (line 14) | public COMMANDNAMEENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTI...
    method Handle (line 20) | public async Task<COMMANDNAMEENTITYNAMEResponse> Handle(COMMANDNAMEENT...

FILE: templates/src/Liquid.Templates/Templates/Liquid.Domain.Project/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMERequest.cs
  class COMMANDNAMEENTITYNAMERequest (line 6) | public class COMMANDNAMEENTITYNAMERequest : IRequest<COMMANDNAMEENTITYNA...
    method COMMANDNAMEENTITYNAMERequest (line 10) | public COMMANDNAMEENTITYNAMERequest(ENTITYNAME body)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Domain.Project/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEResponse.cs
  class COMMANDNAMEENTITYNAMEResponse (line 5) | public class COMMANDNAMEENTITYNAMEResponse
    method COMMANDNAMEENTITYNAMEResponse (line 9) | public COMMANDNAMEENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.Domain.Project/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEValidator.cs
  class COMMANDNAMEENTITYNAMEValidator (line 5) | public class COMMANDNAMEENTITYNAMEValidator : AbstractValidator<COMMANDN...
    method COMMANDNAMEENTITYNAMEValidator (line 7) | public COMMANDNAMEENTITYNAMEValidator()

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.AddEntity/PROJECTNAME.Domain/Entities/ENTITYNAME.cs
  class ENTITYNAME (line 6) | public class ENTITYNAME : LiquidEntity<ENTITYIDTYPE>

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.AddEntity/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEHandler.cs
  class COMMANDNAMEENTITYNAMEHandler (line 10) | public class COMMANDNAMEENTITYNAMEHandler : IRequestHandler<COMMANDNAMEE...
    method COMMANDNAMEENTITYNAMEHandler (line 14) | public COMMANDNAMEENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTI...
    method Handle (line 20) | public async Task<COMMANDNAMEENTITYNAMEResponse> Handle(COMMANDNAMEENT...

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.AddEntity/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMERequest.cs
  class COMMANDNAMEENTITYNAMERequest (line 6) | public class COMMANDNAMEENTITYNAMERequest : IRequest<COMMANDNAMEENTITYNA...
    method COMMANDNAMEENTITYNAMERequest (line 10) | public COMMANDNAMEENTITYNAMERequest(ENTITYNAME body)

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.AddEntity/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEResponse.cs
  class COMMANDNAMEENTITYNAMEResponse (line 5) | public class COMMANDNAMEENTITYNAMEResponse
    method COMMANDNAMEENTITYNAMEResponse (line 9) | public COMMANDNAMEENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.AddEntity/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEValidator.cs
  class COMMANDNAMEENTITYNAMEValidator (line 5) | public class COMMANDNAMEENTITYNAMEValidator : AbstractValidator<COMMANDN...
    method COMMANDNAMEENTITYNAMEValidator (line 7) | public COMMANDNAMEENTITYNAMEValidator()

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.AddEntity/PROJECTNAME.WebApi/Controllers/ENTITYNAMEController.cs
  class ENTITYNAMEController (line 13) | [ApiController]
    method ENTITYNAMEController (line 17) | public ENTITYNAMEController(IMediator mediator) : base(mediator)
    method COMMANDNAME (line 21) | [HttpPost]

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.Project/PROJECTNAME.WebApi/Controllers/ENTITYNAMEController.cs
  class ENTITYNAMEController (line 13) | [ApiController]
    method ENTITYNAMEController (line 17) | public ENTITYNAMEController(IMediator mediator) : base(mediator)
    method COMMANDNAME (line 21) | [HttpPost]

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.Solution/src/PROJECTNAME.Domain/Entities/ENTITYNAME.cs
  class ENTITYNAME (line 6) | public class ENTITYNAME : LiquidEntity<ENTITYIDTYPE>

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.Solution/src/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEHandler.cs
  class COMMANDNAMEENTITYNAMEHandler (line 10) | public class COMMANDNAMEENTITYNAMEHandler : IRequestHandler<COMMANDNAMEE...
    method COMMANDNAMEENTITYNAMEHandler (line 14) | public COMMANDNAMEENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTI...
    method Handle (line 20) | public async Task<COMMANDNAMEENTITYNAMEResponse> Handle(COMMANDNAMEENT...

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.Solution/src/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMERequest.cs
  class COMMANDNAMEENTITYNAMERequest (line 6) | public class COMMANDNAMEENTITYNAMERequest : IRequest<COMMANDNAMEENTITYNA...
    method COMMANDNAMEENTITYNAMERequest (line 10) | public COMMANDNAMEENTITYNAMERequest(ENTITYNAME body)

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.Solution/src/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEResponse.cs
  class COMMANDNAMEENTITYNAMEResponse (line 5) | public class COMMANDNAMEENTITYNAMEResponse
    method COMMANDNAMEENTITYNAMEResponse (line 9) | public COMMANDNAMEENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.Solution/src/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEValidator.cs
  class COMMANDNAMEENTITYNAMEValidator (line 5) | public class COMMANDNAMEENTITYNAMEValidator : AbstractValidator<COMMANDN...
    method COMMANDNAMEENTITYNAMEValidator (line 7) | public COMMANDNAMEENTITYNAMEValidator()

FILE: templates/src/Liquid.Templates/Templates/Liquid.WebApi.Solution/src/PROJECTNAME.WebApi/Controllers/ENTITYNAMEController.cs
  class ENTITYNAMEController (line 13) | [ApiController]
    method ENTITYNAMEController (line 17) | public ENTITYNAMEController(IMediator mediator) : base(mediator)
    method COMMANDNAME (line 21) | [HttpPost]

FILE: templates/src/Liquid.Templates/Templates/Liquid.WorkerService.Project/PROJECTNAME.WorkerService/Program.cs
  class Program (line 9) | public class Program
    method Main (line 11) | public static void Main(string[] args)
    method CreateHostBuilder (line 16) | public static IHostBuilder CreateHostBuilder(string[] args) =>

FILE: templates/src/Liquid.Templates/Templates/Liquid.WorkerService.Project/PROJECTNAME.WorkerService/Worker.cs
  class Worker (line 12) | public class Worker : ILiquidWorker<ENTITYNAME>
    method Worker (line 17) | public Worker(ILogger<Worker> logger, IMediator mediator)
    method ProcessMessageAsync (line 23) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<ENTITYN...

FILE: templates/src/Liquid.Templates/Templates/Liquid.WorkerService.Solution/src/PROJECTNAME.Domain/Entities/ENTITYNAME.cs
  class ENTITYNAME (line 6) | public class ENTITYNAME : LiquidEntity<ENTITYIDTYPE>

FILE: templates/src/Liquid.Templates/Templates/Liquid.WorkerService.Solution/src/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEHandler.cs
  class COMMANDNAMEENTITYNAMEHandler (line 10) | public class COMMANDNAMEENTITYNAMEHandler : IRequestHandler<COMMANDNAMEE...
    method COMMANDNAMEENTITYNAMEHandler (line 14) | public COMMANDNAMEENTITYNAMEHandler(ILiquidRepository<ENTITYNAME, ENTI...
    method Handle (line 20) | public async Task<COMMANDNAMEENTITYNAMEResponse> Handle(COMMANDNAMEENT...

FILE: templates/src/Liquid.Templates/Templates/Liquid.WorkerService.Solution/src/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMERequest.cs
  class COMMANDNAMEENTITYNAMERequest (line 6) | public class COMMANDNAMEENTITYNAMERequest : IRequest<COMMANDNAMEENTITYNA...
    method COMMANDNAMEENTITYNAMERequest (line 10) | public COMMANDNAMEENTITYNAMERequest(ENTITYNAME body)

FILE: templates/src/Liquid.Templates/Templates/Liquid.WorkerService.Solution/src/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEResponse.cs
  class COMMANDNAMEENTITYNAMEResponse (line 5) | public class COMMANDNAMEENTITYNAMEResponse
    method COMMANDNAMEENTITYNAMEResponse (line 9) | public COMMANDNAMEENTITYNAMEResponse(ENTITYNAME data)

FILE: templates/src/Liquid.Templates/Templates/Liquid.WorkerService.Solution/src/PROJECTNAME.Domain/Handlers/COMMANDNAMEENTITYNAME/COMMANDNAMEENTITYNAMEValidator.cs
  class COMMANDNAMEENTITYNAMEValidator (line 5) | public class COMMANDNAMEENTITYNAMEValidator : AbstractValidator<COMMANDN...
    method COMMANDNAMEENTITYNAMEValidator (line 7) | public COMMANDNAMEENTITYNAMEValidator()

FILE: templates/src/Liquid.Templates/Templates/Liquid.WorkerService.Solution/src/PROJECTNAME.WorkerService/Program.cs
  class Program (line 9) | public class Program
    method Main (line 11) | public static void Main(string[] args)
    method CreateHostBuilder (line 16) | public static IHostBuilder CreateHostBuilder(string[] args) =>

FILE: templates/src/Liquid.Templates/Templates/Liquid.WorkerService.Solution/src/PROJECTNAME.WorkerService/Worker.cs
  class Worker (line 12) | public class Worker : ILiquidWorker<ENTITYNAME>
    method Worker (line 17) | public Worker(ILogger<Worker> logger, IMediator mediator)
    method ProcessMessageAsync (line 23) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<ENTITYN...

FILE: test/Liquid.Cache.Memory.Tests/IServiceCollectionExtensionTest.cs
  class IServiceCollectionExtensionTest (line 12) | public class IServiceCollectionExtensionTest
    method SetCollection (line 18) | private void SetCollection()
    method AddLiquidMemoryDistributedCache_WhenWithTelemetryTrue_GetServicesReturnLiqudCache (line 25) | [Fact]
    method AddLiquidMemoryDistributedCache_WhenWithTelemetryfalse_GetServicesReturnLiqudCache (line 43) | [Fact]

FILE: test/Liquid.Cache.NCache.Tests/IServiceCollectionExtensionTest.cs
  class IServiceCollectionExtensionTest (line 10) | public class IServiceCollectionExtensionTest
    method SetCollection (line 16) | private void SetCollection()
    method AddLiquidNCacheDistributedCache_WhenWithTelemetryTrue_GetServicesReturnLiqudCache (line 23) | [Fact]
    method AddLiquidNCacheDistributedCache_WhenWithTelemetryfalse_GetServicesReturnLiqudCache (line 42) | [Fact]

FILE: test/Liquid.Cache.Redis.Tests/IServiceCollectionExtensionTest.cs
  class IServiceCollectionExtensionTest (line 13) | public class IServiceCollectionExtensionTest
    method SetCollection (line 19) | private void SetCollection()
    method AddLiquidRedisDistributedCache_WhenWithTelemetryTrue_GetServicesReturnLiqudCache (line 26) | [Fact]
    method AddLiquidRedisDistributedCache_WhenWithTelemetryfalse_GetServicesReturnLiqudCache (line 45) | [Fact]

FILE: test/Liquid.Cache.SqlServer.Tests/IServiceCollectionExtensionTest.cs
  class IServiceCollectionExtensionTest (line 11) | public class IServiceCollectionExtensionTest
    method SetCollection (line 17) | private void SetCollection()
    method AddLiquidSqlServerDistributedCache_WhenWithTelemetryTrue_GetServicesReturnLiqudCache (line 24) | [Fact]
    method AddLiquidSqlServerDistributedCache_WhenWithTelemetryfalse_GetServicesReturnLiqudCache (line 44) | [Fact]

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/Extensions/IServiceCollectionExtension.cs
  class IServiceCollectionExtension (line 10) | internal static class IServiceCollectionExtension
    method AddElasticApmByConfiguration (line 12) | public static IServiceCollection AddElasticApmByConfiguration(this ISe...

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/IApplicationBuilderExtensionsTests.cs
  class IApplicationBuilderExtensionsTests (line 11) | public sealed class IApplicationBuilderExtensionsTests
    method IApplicationBuilderExtensionsTests (line 15) | public IApplicationBuilderExtensionsTests()
    method UseElasticApmTelemetry_WhenConfigured (line 20) | [Fact]
    method UseElasticApmTelemetry_WhenNotConfigured (line 35) | [Fact]
    method UseElasticApmTelemetry_WhenConfigured_Enabled (line 50) | [Fact]
    method UseElasticApmTelemetry_WhenConfigured_NotEnabled (line 65) | [Fact]
    method UseElasticApmTelemetry_WhenEnvironement_Enabled (line 80) | [Fact]
    method UseElasticApmTelemetry_WhenEnvironement_NotEnabled (line 95) | [Fact]

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/IServiceCollectionExtensionsTests.cs
  class IServiceCollectionExtensionsTests (line 12) | public sealed class IServiceCollectionExtensionsTests
    method AddElasticApmTelemetry_WhenConfigured (line 14) | [Fact]
    method AddElasticApmTelemetry_WhenNotConfigured (line 34) | [Fact]
    method AddElasticApmTelemetry_WhenConfigured_Enabled (line 53) | [Fact]
    method AddElasticApmTelemetry_WhenConfigured_NotEnabled (line 73) | [Fact]
    method AddElasticApmTelemetry_WhenEnvironement_Enabled (line 93) | [Fact]
    method AddElasticApmTelemetry_WhenEnvironement_NotEnabled (line 114) | [Fact]

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/LiquidElasticApmInterceptorTests.cs
  class LiquidElasticApmInterceptorTests (line 13) | public class LiquidElasticApmInterceptorTests
    method LiquidElasticApmInterceptorTests (line 23) | public LiquidElasticApmInterceptorTests()
    method Intercept_WhenMethodExecutionIsSucessfull_TracerStarts (line 40) | [Fact]
    method Intercept_WhenMethodExecutionThrowsException_TracerStartsLogsException (line 50) | [Fact]

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/LiquidElasticApmTelemetryBehaviorTests.cs
  class LiquidElasticApmTelemetryBehavior (line 14) | public class LiquidElasticApmTelemetryBehavior
    method LiquidElasticApmTelemetryBehavior (line 20) | public LiquidElasticApmTelemetryBehavior()
    method Handle_WhenMethodExecutionIsSucessfull_LogsStartEnd (line 26) | [Fact]
    method Handle_WhenMethodExecutionThrowsException_LogsException (line 44) | [Fact]

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/Mocks/CommandHandlerMock.cs
  class CommandHandlerMock (line 8) | public sealed class CommandHandlerMock : IRequestHandler<RequestMock, Re...
    method Handle (line 10) | public Task<ResponseMock> Handle(RequestMock request, CancellationToke...

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/Mocks/IMockService.cs
  type IMockService (line 5) | public interface IMockService
    method Get (line 7) | Task<string> Get();
    method GetError (line 8) | Task<string> GetError();

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/Mocks/MockService.cs
  class MockService (line 7) | public class MockService : IMockService
    method MockService (line 10) | public MockService(ILogger<MockService> logger)
    method MockService (line 14) | public MockService()
    method Get (line 19) | public async Task<string> Get()
    method GetError (line 27) | public async Task<string> GetError()

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/Mocks/RequestMock.cs
  class RequestMock (line 5) | public sealed class RequestMock : IRequest<ResponseMock>

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/Mocks/ResponseMock.cs
  class ResponseMock (line 3) | public sealed class ResponseMock

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/Settings/ConfigurationSettings.cs
  class ConfigurationSettings (line 9) | internal class ConfigurationSettings
    method AddElasticApm (line 11) | internal IConfiguration AddElasticApm(bool? enable = null)

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/Settings/ElasticApmSettings.cs
  class ElasticApmSettings (line 3) | internal sealed class ElasticApmSettings : IElasticApmSettings

FILE: test/Liquid.Core.Telemetry.ElasticApm.Tests/Settings/IElasticApmSettings.cs
  type IElasticApmSettings (line 3) | internal interface IElasticApmSettings

FILE: test/Liquid.Core.Tests/Cache/IServiceCollectionExtensionTests.cs
  class IServiceCollectionExtensionTests (line 12) | public class IServiceCollectionExtensionTests
    method SetCollection (line 19) | private void SetCollection()
    method AddLiquidDistributedCache_WhenWithTelemetryTrue_GetServicesReturnLiqudCache (line 26) | [Fact]
    method AddLiquidDistributedCache_WhenWithTelemetryfalse_GetServicesReturnLiqudCache (line 41) | [Fact]

FILE: test/Liquid.Core.Tests/Cache/LiquidCacheTests.cs
  class LiquidCacheTests (line 12) | public class LiquidCacheTests
    method LiquidCacheTests (line 17) | public LiquidCacheTests()
    method Ctor_WhenIDistributedCacheIsNull_ThrowException (line 21) | [Fact]
    method GetByteArray_WhenKeyExists_ThenReturnByteArray (line 27) | [Fact]
    method GetAsyncByteArray_WhenKeyExists_ThenReturnByteArray (line 41) | [Fact]
    method GetComplexType_WhenKeyExists_ThenReturnType (line 56) | [Fact]
    method GetAsyncComplexType_WhenKeyExists_ThenReturnType (line 70) | [Fact]
    method GetPrimitiveType_WhenKeyExists_ThenReturnPrimitive (line 85) | [Fact]
    method GetAsyncPrimitiveType_WhenKeyExists_ThenReturnPrimitive (line 100) | [Fact]
    method GetGuid_WhenKeyExists_ThenReturnGuid (line 115) | [Fact]
    method GetAsyncGuid_WhenKeyExists_ThenReturnGuid (line 130) | [Fact]
    method SetByteArray_WhenSucessfullySet_ThenDistributeCacheSetReceivedCall (line 145) | [Fact]
    method SetAsyncByteArray_WhenSucessfullySet_ThenDistributeCacheSetReceivedCall (line 159) | [Fact]
    method SetComplexType_WhenSucessfullySet_ThenDistributeCacheSetReceivedCall (line 173) | [Fact]
    method SetAsyncComplexType_WhenSucessfullySet_ThenDistributeCacheSetReceivedCall (line 187) | [Fact]
    method SetPrimitiveType_WhenSucessfullySet_ThenDistributeCacheSetReceivedCall (line 201) | [Fact]
    method SetAsyncPrimitiveType_WhenSucessfullySet_ThenDistributeCacheSetReceivedCall (line 215) | [Fact]
    method SetGuid_WhenSucessfullySet_ThenDistributeCacheSetReceivedCall (line 229) | [Fact]
    method SetAsyncGuid_WhenSucessfullySet_ThenDistributeCacheSetReceivedCall (line 243) | [Fact]
    method Refresh_WhenSucessfull_ThenDistributeCacheRefreshReceivedCall (line 257) | [Fact]
    method RefreshAsync_WhenSucessfull_ThenDistributeCacheRefreshAsyncReceivedCall (line 270) | [Fact]
    method Remove_WhenSucessfull_ThenDistributeCacheRemoveReceivedCall (line 284) | [Fact]
    method RemoveAsync_WhenSucessfull_ThenDistributeCacheRemoveAsyncReceivedCall (line 297) | [Fact]

FILE: test/Liquid.Core.Tests/CommandHandlers/Test1/Test1Command.cs
  class Test1Command (line 5) | public class Test1Command : IRequest<Test1Response>

FILE: test/Liquid.Core.Tests/CommandHandlers/Test1/Test1CommandHandler.cs
  class Test1CommandHandler (line 8) | public class Test1CommandHandler : IRequestHandler<Test1Command, Test1Re...
    method Handle (line 10) | public async Task<Test1Response> Handle(Test1Command request, Cancella...

FILE: test/Liquid.Core.Tests/CommandHandlers/Test1/Test1Response.cs
  class Test1Response (line 3) | public class Test1Response

FILE: test/Liquid.Core.Tests/CommandHandlers/Test2/Test2Command.cs
  class Test2Command (line 6) | public class Test2Command : IRequest<Test2Response>

FILE: test/Liquid.Core.Tests/CommandHandlers/Test2/Test2CommandHandler.cs
  class Test2CommandHandler (line 8) | public class Test2CommandHandler : IRequestHandler<Test2Command, Test2Re...
    method Handle (line 10) | public async Task<Test2Response> Handle(Test2Command request, Cancella...

FILE: test/Liquid.Core.Tests/CommandHandlers/Test2/Test2CommandValidator.cs
  class Test2CommandValidator (line 5) | public class Test2CommandValidator : AbstractValidator<Test2Command>
    method Test2CommandValidator (line 7) | public Test2CommandValidator()

FILE: test/Liquid.Core.Tests/CommandHandlers/Test2/Test2Response.cs
  class Test2Response (line 3) | public class Test2Response

FILE: test/Liquid.Core.Tests/Core/IServiceCollectionLiquidExtensionTest.cs
  class IServiceCollectionLiquidExtensionTest (line 12) | public class IServiceCollectionLiquidExtensionTest
    method AddLiquidTelemetryInterceptor_WhenSuccessfullyInjectsInterceptor_GetServiceSuccessfully (line 16) | [Fact]
    method AddScopedLiquidTelemetry_WhenSuccessfullyInjectsInterceptor_GetServiceSuccessfully (line 31) | [Fact]
    method SetCollection (line 45) | private void SetCollection()
    method AddSingletonLiquidTelemetry_WhenSuccessfullyInjectsInterceptor_GetServiceSuccessfully (line 52) | [Fact]
    method AddTransientLiquidTelemetry_WhenSuccessfullyInjectsInterceptor_GetServiceSuccessfully (line 66) | [Fact]

FILE: test/Liquid.Core.Tests/Core/LiquidContextNotificationsTest.cs
  class LiquidContextNotificationsTest (line 7) | public class LiquidContextNotificationsTest
    method LiquidContextNotificationsTest (line 11) | public LiquidContextNotificationsTest()
    method InitializeNotifications (line 16) | private void InitializeNotifications()
    method InsertNotificaton_WhenContextHasNoNotifications_Inserted (line 21) | [Fact]
    method InsertNotification_WhenContextHasNotifications_Inserted (line 32) | [Fact]
    method UpdateNotification_WhenNotificationTextAlredyExists_Inserted (line 45) | [Fact]
    method GetNotifications_WhenContexthasNone_ReturnNull (line 58) | [Fact]
    method GetNotifications_WhenContexthasNotifications_ReturnNotifications (line 66) | [Fact]

FILE: test/Liquid.Core.Tests/Core/LiquidContextTest.cs
  class LiquidContextTest (line 7) | public class LiquidContextTest
    method LiquidContextTest (line 10) | public LiquidContextTest()
    method UpsertKey_WhenContextIsEmpty_KeyInserted (line 16) | [Fact]
    method UpsertKey_WhenInsertNewKey_NewKeyInserted (line 26) | [Fact]
    method UpsertKey_WhenUpdateKey_KeyUpdated (line 36) | [Fact]
    method Get_WhenKeyExists_ReturnValue (line 45) | [Fact]
    method Get_WhenKeyDoesntExist_ReturnNull (line 53) | [Fact]
    method Get_WhenCurrentHasNoItens_ReturnNull (line 62) | [Fact]

FILE: test/Liquid.Core.Tests/Core/LiquidJsonSerializerTest.cs
  class LiquidJsonSerializerTest (line 7) | public class LiquidJsonSerializerTest
    method LiquidJsonSerializerTest (line 11) | public LiquidJsonSerializerTest()
    method Serialize_WhenSerializeObject_ReturnJsonString (line 16) | [Fact]

FILE: test/Liquid.Core.Tests/Core/LiquidSerializerProviderTest.cs
  class LiquidSerializerProviderTest (line 9) | public class LiquidSerializerProviderTest
    method LiquidSerializerProviderTest (line 15) | public LiquidSerializerProviderTest()
    method GetSerializerByType_WhenServiceTypeExists_ReturnService (line 24) | [Fact]
    method GetSerializerByType_WhenServiceTypeDoesntExists_ReturnNull (line 33) | [Fact]
    method Ctor_WhenArgumentIsNull_ThrowException (line 41) | [Fact]

FILE: test/Liquid.Core.Tests/Core/LiquidTelemetryInterceptorTest.cs
  class LiquidTelemetryInterceptorTest (line 12) | public class LiquidTelemetryInterceptorTest
    method LiquidTelemetryInterceptorTest (line 18) | public LiquidTelemetryInterceptorTest()
    method Intercept_WhenMethodExecutionIsSucessfull_LogStarEnd (line 34) | [Fact]
    method Intercept_WhenMethodExecutionThrowsException_LogStarExceptionAndEnd (line 43) | [Fact]

FILE: test/Liquid.Core.Tests/Core/LiquidXmlSerializerTest.cs
  class LiquidXmlSerializerTest (line 9) | public class LiquidXmlSerializerTest
    method LiquidXmlSerializerTest (line 13) | public LiquidXmlSerializerTest()
    method Serialize_WhenContentTyped_ReturnXmlString (line 18) | [Fact]
    method Serialize_WhenContentIsAnonymous_ThrowException (line 28) | [Fact]

FILE: test/Liquid.Core.Tests/Core/LocalizationTest.cs
  class LocalizationTest (line 3) | public class LocalizationTest

FILE: test/Liquid.Core.Tests/Domain/RequestHandlerTest.cs
  class RequestHandlerTest (line 26) | [ExcludeFromCodeCoverage]
    method RequestHandlerTest (line 34) | public RequestHandlerTest()
    method Test_WhenCommandHasntValidator_Sucess (line 55) | [Fact]
    method Test_WhenValidatorPassed_Sucess (line 68) | [Fact]
    method Test_WhenValidatorThrowError_ThowException (line 80) | [Fact]

FILE: test/Liquid.Core.Tests/Messaging/IServiceCollectionExtensionTest.cs
  class IServiceCollectionExtensionTest (line 18) | public class IServiceCollectionExtensionTest
    method IServiceCollectionExtensionTest (line 25) | public IServiceCollectionExtensionTest()
    method AddLiquidWorkerService_WhenAdded_ServiceProvideCanResolveHostedService (line 31) | [Fact]
    method AddLiquidDomain_WhenAdded_ServiceProviderCanResolveMediatorService (line 43) | [Fact]
    method AddLiquidPipeline_WhenAdded_ServiceProviderCanResolveLiquidWorkerService (line 52) | [Fact]
    method AddLiquidMessageConsumer_WhenAdded_ServiceProviderCanResolveLiquidMessagingConsumerServices (line 65) | [Fact]
    method ConfigureServices (line 81) | private void ConfigureServices()

FILE: test/Liquid.Core.Tests/Messaging/LiquidBackgroundServiceTest.cs
  class LiquidBackgroundServiceTest (line 14) | public class LiquidBackgroundServiceTest : LiquidBackgroundService<Entit...
    method LiquidBackgroundServiceTest (line 19) | public LiquidBackgroundServiceTest() : base(_serviceProvider, _consumer)
    method ExecuteAsync_WhenStart_ConsumerReceivedStartCall (line 24) | [Fact]
    method ExecuteAsync_WhenStartFail_ThrowException (line 32) | [Fact]
    method ProcessMessageAsync_WhenMessageProcessedSuccessfuly_WorkerReceiveCall (line 44) | [Fact]
    method ProcessMessageAsync_WhenMessageProcessedWithError_ThrowException (line 56) | [Fact]
    method GetProvider (line 67) | private static ServiceProvider GetProvider(ILiquidWorker<EntityMock> w...

FILE: test/Liquid.Core.Tests/Messaging/LiquidContextDecoratorTest.cs
  class LiquidContextDecoratorTest (line 18) | public class LiquidContextDecoratorTest
    method LiquidContextDecoratorTest (line 24) | public LiquidContextDecoratorTest()
    method ProcessMessageAsync_WhenHeaderHasRequiredContexKey_ContextKeyInserted (line 37) | [Fact]
    method ProcessMessageAsync_WhenHeaderHasntRequiredContexKey_ContextKeyInserted (line 49) | [Fact]
    method ProcessMessageAsync_WhenCultureTrue_ContextCultureCreated (line 59) | [Fact]

FILE: test/Liquid.Core.Tests/Messaging/LiquidCultureDecoratorTest.cs
  class LiquidCultureDecoratorTest (line 15) | public class LiquidCultureDecoratorTest
    method LiquidCultureDecoratorTest (line 20) | public LiquidCultureDecoratorTest()
    method ProcessMessageAsync_CultureSettingsIsNull_CurrentCultureNotChanged (line 26) | [Fact]
    method ProcessMessageAsync_CultureSettingsIsNotNull_CurrentCultureChanged (line 41) | [Fact]

FILE: test/Liquid.Core.Tests/Messaging/LiquidScopedLoggingDecoratorTest.cs
  class LiquidScopedLoggingDecoratorTest (line 18) | public class LiquidScopedLoggingDecoratorTest
    method LiquidScopedLoggingDecoratorTest (line 25) | public LiquidScopedLoggingDecoratorTest()
    method ProcessMessageAsync_WhenHeaderHasRequiredScopedLoggingKey_ScopeCreated (line 37) | [Fact]
    method ProcessMessageAsync_WhenHeaderHasntRequiredScopedLoggingKey_ThrowMessagingException (line 49) | [Fact]

FILE: test/Liquid.Core.Tests/Mocks/AnotherTestEntity.cs
  class AnotherTestEntity (line 13) | [ExcludeFromCodeCoverage]

FILE: test/Liquid.Core.Tests/Mocks/CommandHandlerMock.cs
  class CommandHandlerMock (line 7) | public class CommandHandlerMock : IRequestHandler<CommandRequestMock>
    method Handle (line 9) | public async Task Handle(CommandRequestMock request, CancellationToken...

FILE: test/Liquid.Core.Tests/Mocks/CommandRequestMock.cs
  class CommandRequestMock (line 5) | public class CommandRequestMock : IRequest
    method CommandRequestMock (line 9) | public CommandRequestMock(EntityMock entity)

FILE: test/Liquid.Core.Tests/Mocks/EntityMock.cs
  class EntityMock (line 3) | public class EntityMock

FILE: test/Liquid.Core.Tests/Mocks/IMockService.cs
  type IMockService (line 5) | public interface IMockService
    method Get (line 7) | Task<string> Get();
    method GetError (line 8) | Task<string> GetError();

FILE: test/Liquid.Core.Tests/Mocks/InMemoryRepository.cs
  class InMemoryRepository (line 12) | [ExcludeFromCodeCoverage]
    method InMemoryRepository (line 24) | public InMemoryRepository()
    method AddAsync (line 29) | public async Task AddAsync(TEntity entity)
    method FindAllAsync (line 34) | public async Task<IEnumerable<TEntity>> FindAllAsync()
    method FindByIdAsync (line 40) | public async Task<TEntity> FindByIdAsync(TIdentifier id)
    method RemoveByIdAsync (line 46) | public async Task RemoveByIdAsync(TIdentifier id)
    method UpdateAsync (line 51) | public async Task UpdateAsync(TEntity entity)
    method WhereAsync (line 57) | public async Task<IEnumerable<TEntity>> WhereAsync(Expression<Func<TEn...
    method StartTransactionAsync (line 64) | public async Task StartTransactionAsync()
    method CommitAsync (line 69) | public async Task CommitAsync()
    method RollbackTransactionAsync (line 74) | public async Task RollbackTransactionAsync()
    method Dispose (line 79) | protected virtual void Dispose(bool disposing)
    method Dispose (line 93) | public void Dispose()
    method CloneRepository (line 99) | private Dictionary<TIdentifier, TEntity> CloneRepository(Dictionary<TI...

FILE: test/Liquid.Core.Tests/Mocks/MockInterceptService.cs
  class MockInterceptService (line 7) | public class MockInterceptService : IMockService
    method MockInterceptService (line 10) | public MockInterceptService()
    method Get (line 15) | public async Task<string> Get()
    method GetError (line 22) | public async Task<string> GetError()

FILE: test/Liquid.Core.Tests/Mocks/MockSerializeObject.cs
  class MockSerializeObject (line 3) | public class MockSerializeObject
    method MockSerializeObject (line 5) | public MockSerializeObject()
    method MockSerializeObject (line 10) | public MockSerializeObject(int intProperty, string stringProperty)

FILE: test/Liquid.Core.Tests/Mocks/MockService.cs
  class MockService (line 7) | public class MockService : IMockService
    method MockService (line 10) | public MockService(ILogger<MockService> logger)
    method MockService (line 14) | public MockService()
    method Get (line 19) | public async Task<string> Get()
    method GetError (line 27) | public async Task<string> GetError()

FILE: test/Liquid.Core.Tests/Mocks/MockSettings.cs
  class MockSettings (line 5) | [LiquidSectionName("MockSettings")]
  class MockNoAttributeSettings (line 11) | public class MockNoAttributeSettings

FILE: test/Liquid.Core.Tests/Mocks/MockType.cs
  class MockType (line 3) | internal class MockType
    method MockType (line 9) | public MockType()

FILE: test/Liquid.Core.Tests/Mocks/TestEntity.cs
  class TestEntity (line 13) | [ExcludeFromCodeCoverage]

FILE: test/Liquid.Core.Tests/Mocks/WorkerMock.cs
  class WorkerMock (line 8) | public class WorkerMock : ILiquidWorker<EntityMock>
    method WorkerMock (line 10) | public WorkerMock()
    method ProcessMessageAsync (line 15) | public Task ProcessMessageAsync(ConsumerMessageEventArgs<EntityMock> a...

FILE: test/Liquid.Core.Tests/Repository/LiquidUnitOfWorkTests.cs
  class LiquidUnitOfWorkIntegrationTests (line 16) | [ExcludeFromCodeCoverage]
    method LiquidUnitOfWorkIntegrationTests (line 39) | public LiquidUnitOfWorkIntegrationTests()
    method LiquidUnitOfWorkConstructor_WhenServiceProviderDoesntExists_ThrowException (line 57) | [Fact]
    method GetRepository_WhenRepositoryDoesntExists_ThrowException (line 63) | [Fact]
    method GetRepository_WhenRepositoryExists_Success (line 69) | [Fact]
    method AddAsync_WhenCommitTransaction_ItemAdded (line 84) | [Fact]
    method AddAsync_WhenRollbackTransaction_ItemNotInserted (line 98) | [Fact]
    method RemoveByIdAsync_WhenCommitTransaction_ItemDeleted (line 112) | [Fact]
    method RemoveByIdAsync_WhenRollbackTransaction_ItemNotDeleted (line 128) | [Fact]
    method UpdateAsync_WhenCommitTransaction_ItemNotDeleted (line 144) | [Fact]
    method UpdateAsync_WhenRollbackTransaction_ItemNotDeleted (line 160) | [Fact]
    method StartTransactionAsync_WhenDataContextDoesntExists_ThrowException (line 176) | [Fact]
    method CommitAsync_WhenNoTransactionIsStarted_ThrowException (line 190) | [Fact]
    method RollbackTransactionAsync_WhenNoTransactionIsStarted_ThrowException (line 196) | [Fact]

FILE: test/Liquid.Dataverse.Tests/DataverseClientFactoryTests.cs
  class DataverseClientFactoryTests (line 6) | public class DataverseClientFactoryTests
    method DataverseClientFactoryTests (line 11) | public DataverseClientFactoryTests()
    method Ctor_WhenOptionsIsNull_ThenReturnArgumentNullException (line 19) | [Fact]
    method Ctor_WhenOptionsExists_ThenReturnDataverseClientFactoryInstance (line 25) | [Fact]

FILE: test/Liquid.Dataverse.Tests/LiquidDataverseTests.cs
  class LiquidDataverseTests (line 12) | public class LiquidDataverseTests
    method LiquidDataverseTests (line 16) | public LiquidDataverseTests()
    method Ctor_WhenClientFactoryIsNull_ThrowArgumentNullException (line 26) | [Fact]
    method GetById_WhenClientReturnResults_ReturnEntity (line 32) | [Fact]
    method ListByFilter_WhenUseFilterExpression_ReturnListOfEntities (line 46) | [Fact]
    method ListByFilter_WhenUseQueryExpression_ReturnListOfEntities (line 57) | [Fact]
    method GetMetadata_WhenEntityExists_ReturnEntityMetadataInstance (line 68) | [Fact]
    method SetState_WhenCallResultSucessfully_ExecuteAsyncMethodCalled (line 81) | [Fact]
    method Upsert_WhenCallResultSucessfully_ExecuteAsyncMethodCalled (line 93) | [Fact]
    method Update_WithOptions_UseRightOrganizationRequestType_RequestParameters (line 105) | [Fact]
    method DeleteById_WithOptions_UseRightOrganizationRequestType_RequestParameters (line 121) | [Fact]
    method Create_WithOptions_UseRightOrganizationRequestType_RequestParameters (line 135) | [Fact]

FILE: test/Liquid.GenAi.OpenAi.Tests/OpenAiClientFactoryTests.cs
  class OpenAiClientFactoryTests (line 10) | public class OpenAiClientFactoryTests
    method OpenAiClientFactoryTests (line 15) | public OpenAiClientFactoryTests()
    method Constructor_ShouldThrowArgumentNullException_WhenOptionsIsNull (line 21) | [Fact]
    method GetOpenAIClient_ShouldThrowKeyNotFoundException_WhenNoSettingsForClientId (line 28) | [Fact]
    method GetOpenAIClient_ShouldReturnExistingClient_WhenClientAlreadyExists (line 41) | [Fact]
    method GetOpenAIClient_ShouldCreateAndReturnNewClient_WhenClientDoesNotExist (line 69) | [Fact]
    method CreateClient_ShouldThrowArgumentNullException_WhenSettingsIsNull (line 95) | [Fact]
    method CreateClient_ShouldThrowArgumentNullException_WhenSettingsIsEmpty (line 104) | [Fact]
    method CreateClient_ShouldCreateClients_WhenValidSettingsProvided (line 114) | [Fact]

FILE: test/Liquid.Messaging.Kafka.Tests/IServiceCollectionExtensionTest.cs
  class IServiceCollectionExtensionTest (line 14) | public class IServiceCollectionExtensionTest
    method SetCollection (line 20) | private void SetCollection()
    method AddLiquidKafkaProducer_WhenSuccessfullyInjectProducer_GetServicesSucessfully (line 27) | [Fact]
    method AddLiquidKafkaProducer_WhenSuccessfullyInjectWhitoutTelemetry_GetServicesSucessfully (line 39) | [Fact]
    method AddLiquidKafkaConsumer_WhenSuccessfullyInjectConsumer_GetServicesSucessfully (line 51) | [Fact]
    method AddLiquidKafkaConsumer_WhenSuccessfullyInjectConsumerAndHandlers_GetServicesSucessfully (line 67) | [Fact]

FILE: test/Liquid.Messaging.Kafka.Tests/KafkaFactoryTest.cs
  class KafkaFactoryTest (line 7) | public class KafkaFactoryTest
    method KafkaFactoryTest (line 12) | public KafkaFactoryTest()
    method GetConsumer_WhenSettingsINull_ThrowLiquidMessagingException (line 17) | [Fact]
    method GetProducer_WhenSettingsIsNull_ThrowLiquidMessagingException (line 23) | [Fact]
    method GetConsumer_WhenSettingsIsNotValid_ThrowLiquidMessagingException (line 29) | [Fact]
    method GetProducer_WhenSettingsIsValid_ResposeIsNotNull (line 40) | [Fact]

FILE: test/Liquid.Messaging.Kafka.Tests/KafkaProducerTest.cs
  class KafkaProducerTest (line 16) | public class KafkaProducerTest
    method KafkaProducerTest (line 23) | public KafkaProducerTest()
    method SendMessageAsync_WhenMessageSended_ClientReceivedCall (line 38) | [Fact]
    method SendMessageAsync_WhenSendMessageFail_ThrowException (line 48) | [Fact]
    method SendMessagesAsync_WhenMessagesSended_ClientReceivedCall (line 61) | [Fact]
    method SendMessagesAsync_WhenSendMessagesFail_ThrowException (line 75) | [Fact]
    method Ctor_WhenRabbitMqFactoryIsNull_ThrowException (line 92) | [Fact]

FILE: test/Liquid.Messaging.Kafka.Tests/Mock/HandlerMock/MockCommandHandler.cs
  class MockCommandHandler (line 7) | public class MockCommandHandler : IRequestHandler<MockRequest>
    method Handle (line 9) | public Task Handle(MockRequest request, CancellationToken cancellation...

FILE: test/Liquid.Messaging.Kafka.Tests/Mock/HandlerMock/MockRequest.cs
  class MockRequest (line 5) | public class MockRequest : IRequest
    method MockRequest (line 9) | public MockRequest(MessageMock message)

FILE: test/Liquid.Messaging.Kafka.Tests/Mock/HandlerMock/MockValidator.cs
  class MockValidator (line 5) | public class MockValidator : AbstractValidator<MockRequest>
    method MockValidator (line 7) | public MockValidator()

FILE: test/Liquid.Messaging.Kafka.Tests/Mock/MessageMock.cs
  class MessageMock (line 9) | [ExcludeFromCodeCoverage]

FILE: test/Liquid.Messaging.Kafka.Tests/Mock/WorkerMediatorMock.cs
  class WorkerMediatorMock (line 10) | public class WorkerMediatorMock : ILiquidWorker<MessageMock>
    method WorkerMediatorMock (line 14) | public WorkerMediatorMock(IMediator mediator)
    method ProcessMessageAsync (line 19) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<Message...

FILE: test/Liquid.Messaging.Kafka.Tests/Mock/WorkerMock .cs
  class WorkerMock (line 8) | public class WorkerMock : ILiquidWorker<MessageMock>
    method ProcessMessageAsync (line 11) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<Message...

FILE: test/Liquid.Messaging.Kafka.Tests/kafkaConsumerTest.cs
  class kafkaConsumerTest (line 17) | public class kafkaConsumerTest : KafkaConsumer<MessageMock>
    method GetOptions (line 22) | public static IOptions<KafkaSettings> GetOptions()
    method kafkaConsumerTest (line 28) | public kafkaConsumerTest()
    method RegisterMessageHandler_WhenRegisteredSucessfully_BasicConsumeReceivedCall (line 33) | [Fact]
    method RegisterMessageHandler_WhenRegistereFail_ThrowException (line 46) | [Fact]
    method MessageHandler_WhenProcessExecutedSucessfully (line 56) | [Fact]
    method MessageHandler_WhenProcessExecutionFail_ThrowException (line 84) | [Fact]
    method ProcessMessageAsyncMock (line 112) | private async Task ProcessMessageAsyncMock(ConsumerMessageEventArgs<Me...
    method ProcessErrorAsyncMock (line 119) | private async Task ProcessErrorAsyncMock(ConsumerErrorEventArgs args)
    method RegisterHandleMock (line 125) | private bool RegisterHandleMock()

FILE: test/Liquid.Messaging.RabbitMq.Tests/IServiceCollectionExtensionTest.cs
  class IServiceCollectionExtensionTest (line 15) | public class IServiceCollectionExtensionTest
    method SetCollection (line 21) | private void SetCollection()
    method AddLiquidRabbitMqProducer_WhenSuccessfullyInjectProducer_GetServicesSucessfully (line 28) | [Fact]
    method AddLiquidRabbitMqProducer_WhenSuccessfullyInjectWhitoutTelemetry_GetServicesSucessfully (line 40) | [Fact]
    method AddLiquidRabbitMqConsumer_WhenSuccessfullyInjectConsumer_GetServicesSucessfully (line 52) | [Fact]
    method AddLiquidRabbitMqConsumer_WhenSuccessfullyInjectConsumerAndHandlers_GetServicesSucessfully (line 68) | [Fact]

FILE: test/Liquid.Messaging.RabbitMq.Tests/Mock/HandlerMock/MockCommandHandler.cs
  class MockCommandHandler (line 7) | public class MockCommandHandler : IRequestHandler<MockRequest>
    method Handle (line 9) | public Task Handle(MockRequest request, CancellationToken cancellation...

FILE: test/Liquid.Messaging.RabbitMq.Tests/Mock/HandlerMock/MockRequest.cs
  class MockRequest (line 5) | public class MockRequest : IRequest
    method MockRequest (line 9) | public MockRequest(MessageMock message)

FILE: test/Liquid.Messaging.RabbitMq.Tests/Mock/HandlerMock/MockValidator.cs
  class MockValidator (line 5) | public class MockValidator : AbstractValidator<MockRequest>
    method MockValidator (line 7) | public MockValidator()

FILE: test/Liquid.Messaging.RabbitMq.Tests/Mock/MessageMock.cs
  class MessageMock (line 9) | [ExcludeFromCodeCoverage]

FILE: test/Liquid.Messaging.RabbitMq.Tests/Mock/WorkerMediatorMock.cs
  class WorkerMediatorMock (line 10) | public class WorkerMediatorMock : ILiquidWorker<MessageMock>
    method WorkerMediatorMock (line 14) | public WorkerMediatorMock(IMediator mediator)
    method ProcessMessageAsync (line 19) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<Message...

FILE: test/Liquid.Messaging.RabbitMq.Tests/Mock/WorkerMock .cs
  class WorkerMock (line 8) | public class WorkerMock : ILiquidWorker<MessageMock>
    method ProcessMessageAsync (line 11) | public async Task ProcessMessageAsync(ConsumerMessageEventArgs<Message...

FILE: test/Liquid.Messaging.RabbitMq.Tests/RabbitMqConsumerTest.cs
  class RabbitMqConsumerTest (line 16) | public class RabbitMqConsumerTest : RabbitMqConsumer<MessageMock>
    method GetOptions (line 21) | public static IOptions<RabbitMqConsumerSettings> GetOptions()
    method RabbitMqConsumerTest (line 40) | public RabbitMqConsumerTest()
    method Constructor_WhenFactoryIsNull_ThrowArgumentNullException (line 47) | [Fact]
    method Constructor_WhenSettingsIsNull_ThrowArgumentNullException (line 53) | [Fact]
    method Constructor_WhenSettingsValueIsNull_ThrowArgumentNullException (line 59) | [Fact]
    method RegisterMessageHandler_WhenRegisteredSucessfully_BasicConsumeReceivedCall (line 68) | [Fact]
    method RegisterMessageHandler_WhenRegistereFail_ThrowException (line 81) | [Fact]
    method MessageHandler_WhenProcessExecutedSucessfully (line 91) | [Fact]
    method MessageHandler_CallsConsumeMessageAsync_AndAcks_WhenAutoAckIsFalse (line 108) | [Fact]
    method MessageHandler_CallsConsumeMessageAsync_AndNacks_WhenAutoAckIsFalse (line 125) | [Fact]
    method MessageHandler_CallsConsumeMessageAsync_AndRejects_WhenAutoAckIsFalse (line 140) | [Fact]
    method ProcessMessageAsyncMock (line 172) | private async Task ProcessMessageAsyncMock(ConsumerMessageEventArgs<Me...
    method RegisterHandleMock (line 179) | private bool RegisterHandleMock()

FILE: test/Liquid.Messaging.RabbitMq.Tests/RabbitMqProducerTest.cs
  class RabbitMqProducerTest (line 15) | public class RabbitMqProducerTest
    method RabbitMqProducerTest (line 22) | public RabbitMqProducerTest()
    method SendMessageAsync_WhenMessageSended_BasicPublishReceivedCall (line 37) | [Fact]
    method SendMessageAsync_WhenSendMessageFail_ThrowException (line 47) | [Fact]
    method SendMessagesAsync_WhenMessagesSended_BasicPublishReceivedCall (line 60) | [Fact]
    method SendMessagesAsync_WhenSendMessagesFail_ThrowException (line 74) | [Fact]
    method Ctor_WhenRabbitMqFactoryIsNull_ThrowException (line 91) | [Fact]
    method Ctor_WhenProducerSettingsIsNull_ThrowException (line 97) | [Fact]

FILE: test/Liquid.Messaging.ServiceBus.Tests/Mock/EntityMock.cs
  class EntityMock (line 5) | [Serializable]

FILE: test/Liquid.Messaging.ServiceBus.Tests/ServiceBusConsumerTest.cs
  class ServiceBusConsumerTest (line 16) | public class ServiceBusConsumerTest : ServiceBusConsumer<EntityMock>
    method ServiceBusConsumerTest (line 22) | public ServiceBusConsumerTest() : base(_factory, "test")
    method RegisterMessageHandler_WhenRegisteredSucessfully_StartProcessingReceivedCall (line 27) | [Fact]
    method RegisterMessageHandler_WhenConsumeMessageAssyncIsNull_ThrowNotImplementedException (line 40) | [Fact]
    method MessageHandler_WhenProcessExecutedSucessfully (line 49) | [Fact]
    method ErrorHandler_WhenProcessErrorExecuted_ThrowsMessagingConsumerException (line 75) | [Fact]
    method Constructor_WhenFactoryIsNull_ThrowsArgumentNullException (line 87) | [Fact]
    method Constructor_WhenSettingsNameIsNull_ThrowsArgumentNullException (line 93) | [Fact]
    method ProcessMessageAsyncMock (line 100) | private async Task ProcessMessageAsyncMock(ConsumerMessageEventArgs<En...

FILE: test/Liquid.Messaging.ServiceBus.Tests/ServiceBusFactoryTest.cs
  class ServiceBusFactoryTest (line 11) | public class ServiceBusFactoryTest
    method ServiceBusFactoryTest (line 17) | public ServiceBusFactoryTest()
    method Ctor_WhenOptionsValueIsNull_ThrowArgumentNullException (line 27) | [Fact]
    method GetProcessor_WhenPeekModeAndConnectionStringIsMissing_ThrowMessagingMissingConfigurationException (line 33) | [Fact]
    method GetProcessor_WhenReceiveModeAndConnectionStringIsMissing_ThrowMessagingMissingConfigurationException (line 40) | [Fact]
    method GetReceiver_WhenPeekModeAndConnectionIsMissing_ThrowMessagingMissingConfigurationException (line 48) | [Fact]
    method GetReceiver_WhenReceiveModeAndConnectionIsMissing_ThrowMessagingMissingConfigurationException (line 56) | [Fact]
    method GetSender_WhenPeekModeAndConnectionIsMissing_ThrowMessagingMissingConfigurationException (line 64) | [Fact]
    method GetSender_WhenReceiveModeAndConnectionIsMissing_ThrowMessagingMissingConfigurationException (line 71) | [Fact]

FILE: test/Liquid.Messaging.ServiceBus.Tests/ServiceBusFactoryTests.cs
  class ServiceBusFactoryTests (line 14) | public class ServiceBusFactoryTests
    method ServiceBusFactoryTests (line 19) | public ServiceBusFactoryTests()
    method GetSender_ReturnsSender_WhenConfigExists (line 47) | [Fact]
    method GetSender_ThrowsArgumentOutOfRangeException_WhenConfigMissing (line 61) | [Fact]
    method GetProcessor_ReturnsProcessor_WhenQueueConfigExists (line 72) | [Fact]
    method GetProcessor_ReturnsProcessor_WhenTopicConfigExists (line 86) | [Fact]
    method GetProcessor_ThrowsMessagingMissingConfigurationException_WhenConfigMissing (line 100) | [Fact]
    method GetReceiver_ReturnsReceiver_WhenConfigExists (line 111) | [Fact]
    method GetReceiver_ThrowsArgumentOutOfRangeException_WhenConfigMissing (line 125) | [Fact]

FILE: test/Liquid.Messaging.ServiceBus.Tests/ServiceBusProducerTest.cs
  class ServiceBusProducerTest (line 13) | public class ServiceBusProducerTest
    method ServiceBusProducerTest (line 20) | public ServiceBusProducerTest()
    method SendAsync_WhenSingleEntitySendedSuccessfully_ClientReceivedCall (line 33) | [Fact]
    method SendAsync_WhenListEntitiesSendedSuccessfully_ClientReceivedCall (line 45) | [Fact]
    method SendAsync_WhenSingleEntitySendFailed_ThrowError (line 55) | [Fact]
    method SendAsync_WhenListEntitiesSendFailed_ThrowError (line 65) | [Fact]

FILE: test/Liquid.Repository.EntityFramework.Tests/Configurations/MockTypeConfiguration.cs
  class MockTypeConfiguration (line 8) | [ExcludeFromCodeCoverage]
    method Configure (line 11) | public void Configure(EntityTypeBuilder<MockEntity> builder)

FILE: test/Liquid.Repository.EntityFramework.Tests/Entities/MockEntity.cs
  class MockEntity (line 13) | [ExcludeFromCodeCoverage]

FILE: test/Liquid.Repository.EntityFramework.Tests/Entities/MockSubEntity.cs
  class MockSubEntity (line 3) | public class MockSubEntity

FILE: test/Liquid.Repository.EntityFramework.Tests/EntityFrameworkDataContextTests.cs
  class EntityFrameworkDataContextTests (line 12) | [ExcludeFromCodeCoverage]
    method EntityFrameworkDataContextTests (line 20) | public EntityFrameworkDataContextTests()
    method StartTransactionAsync_WhenClientExecutedSucessfuly_Success (line 32) | [Fact]
    method StartTransactionAsync_WhenClientThrow_ThrowException (line 40) | [Fact]
    method CommitAsync_WhenClientExecutedSucessfuly_Success (line 50) | [Fact]
    method CommitAsync_WhenClientExcept_ThrowException (line 58) | [Fact]
    method RollbackTransactionAsync_WhenClientExecutedSucessfuly_Success (line 68) | [Fact]
    method RollbackTransactionAsync_WhenClientExcept_ThrowException (line 76) | [Fact]
    method Verify_Dispose (line 86) | [Fact]
    method Verify_Dispose_Except (line 97) | [Fact]
    method EntityFrameworkDataContext_WhenCreated_DbContextIsValid (line 105) | [Fact]
    method EntityFrameworkDataContext_WhenCreatedWithoutDbContext_ThrowException (line 112) | [Fact]
    method EntityFrameworkDataContext_IdIsAlwaysNull (line 118) | [Fact]

FILE: test/Liquid.Repository.EntityFramework.Tests/EntityFrameworkRepositoryTest.cs
  class EntityFrameworkRepositoryTest (line 15) | [ExcludeFromCodeCoverage]
    method EntityFrameworkRepositoryTest (line 21) | public EntityFrameworkRepositoryTest()
    method GenerateMockRepository (line 33) | private EntityFrameworkRepository<MockEntity, int, MockDbContext> Gene...
    method GenerateMockRepository (line 38) | private EntityFrameworkRepository<MockEntity, int, MockDbContext> Gene...
    method Verify_insert (line 50) | [Fact]
    method Verify_insert_Except (line 65) | [Fact]
    method Verify_find_by_id (line 82) | [Fact]
    method Verify_find_by_id_Except (line 97) | [Fact]
    method Verify_where (line 112) | [Fact]
    method Verify_where_Except (line 128) | [Fact]
    method Verify_find_all (line 144) | [Fact]
    method Verify_find_all_Except (line 159) | [Fact]
    method Verify_delete (line 174) | [Fact]
    method Verify_delete_invalid (line 189) | [Fact]
    method Verify_delete_Except (line 204) | [Fact]
    method Verify_updates (line 219) | [Fact]
    method Verify_updates_Except (line 237) | [Fact]
    method SeedDataAsync (line 252) | private void SeedDataAsync(IServiceProvider serviceProvider)
    method EntityFrameworkRepository_WhenCreatedWithoutDataContext_ThrowException (line 264) | [Fact]
    method EntityFrameworkRepository_WhenCreated_DataContextIsValid (line 270) | [Fact]
    method WhereInclude_WhenCalled_ReturnsExpected (line 289) | [Fact]
    method WhereInclude_WhenCalledExpressionOverload_ReturnsExpected (line 304) | [Fact]

FILE: test/Liquid.Repository.EntityFramework.Tests/MockDbContext.cs
  class MockDbContext (line 6) | [ExcludeFromCodeCoverage]
    method MockDbContext (line 9) | public MockDbContext() : base() { }
    method MockDbContext (line 11) | public MockDbContext(DbContextOptions<MockDbContext> options) : base(o...
    method OnModelCreating (line 14) | protected override void OnModelCreating(ModelBuilder modelBuilder)

FILE: test/Liquid.Repository.Mongo.Tests/IServiceCollectionExtensionsTests.cs
  class IServiceCollectionExtensionsTests (line 17) | [ExcludeFromCodeCoverage]
    method IServiceCollectionExtensionsTests (line 27) | public IServiceCollectionExtensionsTests()
    method AddLiquidMongoRepository_WhenAdded_ServicesIsFilledForTestEntity (line 60) | [Fact]

FILE: test/Liquid.Repository.Mongo.Tests/Mock/AnotherTestEntity.cs
  class AnotherTestEntity (line 13) | [ExcludeFromCodeCoverage]

FILE: test/Liquid.Repository.Mongo.Tests/Mock/AsyncCursorMock.cs
  class AsyncCursorMock (line 10) | [ExcludeFromCodeCoverage]
    method AsyncCursorMock (line 15) | public AsyncCursorMock(IEnumerable<TDocument> documents)
    method Dispose (line 20) | public void Dispose()
    method Dispose (line 26) | protected virtual void Dispose(bool disposing)
    method MoveNext (line 31) | public bool MoveNext(CancellationToken cancellationToken = default)
    method MoveNextAsync (line 37) | public async Task<bool> MoveNextAsync(CancellationToken cancellationTo...
    method ToEnumerable (line 43) | public IEnumerable<TDocument> ToEnumerable()

FILE: test/Liquid.Repository.Mongo.Tests/Mock/TestEntity.cs
  class TestEntity (line 13) | [ExcludeFromCodeCoverage]

FILE: test/Liquid.Repository.Mongo.Tests/MongoClientFactoryTests.cs
  class MongoClientFactoryTests (line 12) | [ExcludeFromCodeCoverage]
    method MongoClientFactoryTests (line 19) | public MongoClientFactoryTests()
    method MongoClientFactory_WhenSettingsIsNull_ThrowException (line 59) | [Fact]
    method GetClient_WhenDatabaseIdsExists_ClientCreated (line 66) | [Fact]
    method GetClient_WhenDatabaseSettingsIsWrong_ThrowException (line 75) | [Fact]
    method Constructor_WhenSettingsIsNull_ThrowException (line 82) | [Fact]

FILE: test/Liquid.Repository.Mongo.Tests/MongoDataContextTests.cs
  class MongoDataContextTests (line 13) | [ExcludeFromCodeCoverage]
    method MongoDataContextTests (line 20) | public MongoDataContextTests()
    method MongoDataContext_WhenCreatedWithNullArguments_ThrowsException (line 40) | [Fact]
    method StartTransaction_WhenDBInitialized_Sucess (line 48) | [Fact]
    method CommitAsync_WhenTansactionIsStarted_Sucess (line 57) | [Fact]
    method CommitAsync_WhenTansactionIsntStarted_ThrowException (line 68) | [Fact]
    method RollbackAsync_WhenTansactionIsStarted_Sucess (line 76) | [Fact]
    method RollbackAsync_WhenTansactionIsntStarted_ThrowException (line 87) | [Fact]
    method Dispose_WhenTansactionIsStarted_Sucess (line 96) | [Fact]
    method Dispose_WhenTansactionIsntStarted_HandlerDisposed (line 109) | [Fact]

FILE: test/Liquid.Repository.Mongo.Tests/MongoRepositoryTests.cs
  class MongoRepositoryTests (line 16) | [ExcludeFromCodeCoverage]
    method MongoRepositoryTests (line 26) | public MongoRepositoryTests()
    method GetCollection (line 60) | private IMongoCollection<TestEntity> GetCollection()
    method MongoRepository_WhenCreatedWithNoDataContext_ThrowException (line 74) | [Fact]
    method ValidateCollection_WhenCollectionExists_Success (line 80) | [Fact]
    method AddAsync_WhenActionIsSuccessful_CallInsertOneMethod (line 88) | [Fact]
    method AddAsync_WhenClientThrowsError_ThrowException (line 99) | [Fact]
    method FindAllAsync_WhenCollectionExists_ReturnItens (line 109) | [Fact]
    method FindAllAsync_WhenClientThrowsError_ThrowException (line 121) | [Fact]
    method FindByIdAsync_WhenItemExists_ReturnItem (line 131) | [Fact]
    method FindByIdAsync_WhenClientThrowsError_ThrowException (line 143) | [Fact]
    method RemoveByIdAsync_WhenActionIsSuccessful_CallDeleteOneMethod (line 154) | [Fact]
    method RemoveByIdAsync_WhenClientThrowsError_ThrowException (line 165) | [Fact]
    method UpdateAsync_WhenActionIsSuccessful_CallReplaceOneMethod (line 175) | [Fact]
    method UpdateAsync_WhenClientThrowsError_ThrowException (line 187) | [Fact]
    method WhereAsync_WhenItensExists_ReturnItens (line 197) | [Fact]
    method WhereAsync_WhenClientThrowsError_ThrowException (line 208) | [Fact]

FILE: test/Liquid.Repository.OData.Tests/IServiceCollectionExtensionTests.cs
  class IServiceCollectionExtensionTests (line 15) | public class IServiceCollectionExtensionTests
    method IServiceCollectionExtensionTests (line 21) | public IServiceCollectionExtensionTests()
    method AddLiquidODataRepository_WhenAdded_ServicesIsFilledForTestEntity (line 39) | [Fact]

FILE: test/Liquid.Repository.OData.Tests/Mock/AnotherTestEntity.cs
  class AnotherTestEntity (line 13) | [ExcludeFromCodeCoverage]

FILE: test/Liquid.Repository.OData.Tests/Mock/MockPeople.cs
  class People (line 10) | public class People : LiquidEntity<string>

FILE: test/Liquid.Repository.OData.Tests/Mock/MyMockHttpMessageHandler.cs
  class MyMockHttpMessageHandler (line 11) | public class MyMockHttpMessageHandler : HttpMessageHandler
    method MyMockHttpMessageHandler (line 16) | public MyMockHttpMessageHandler(HttpStatusCode statusCode, object? res...
    method SendAsync (line 22) | protected override async Task<HttpResponseMessage> SendAsync(HttpReque...

FILE: test/Liquid.Repository.OData.Tests/Mock/TestEntity.cs
  class TestEntity (line 12) | [ExcludeFromCodeCoverage]

FILE: test/Liquid.Repository.OData.Tests/ODataClientFactoryTests.cs
  class ODataClientFactoryTests (line 7) | public class ODataClientFactoryTests
    method ODataClientFactoryTests (line 13) | public ODataClientFactoryTests()
    method ODataClientFactory_WhenEntityNameIsNotFound_ThrowException (line 39) | [Fact]
    method ODataClientFactory_WhenEntityNameIsNull_ThrowException (line 45) | [Fact]
    method OdataClientFactory_WhenValidateCertIsFalse_ReturnClient (line 51) | [Fact]
    method OdataClientFactory_WhenValidateCertIsTrue_ReturnClient (line 59) | [Fact]
    method OdataClientFactory_WhenTokenIsNotSet_ThrowException (line 81) | [Fact]
    method OdataClientFactory_WhenTokenIsNotSetInContext_ThrowException (line 94) | [Fact]
    method OdataClientFactory_WhenOptionsIsNull_ThrowException (line 107) | [Fact]
    method OdataClientFactory_WhenContextIsNull_ThrowException (line 115) | [Fact]

FILE: test/Liquid.Repository.OData.Tests/ODataRepositoryTests.cs
  class OdataRepositoryTests (line 10) | public class OdataRepositoryTests
    method OdataRepositoryTests (line 16) | public OdataRepositoryTests()
    method ODataRepository_WhenCreatedWithNoClientFactory_ThrowException (line 29) | [Fact]
    method ODataRepository_WhenCreatedWithNoEntityName_ThrowException (line 35) | [Fact]
    method AddAsync_WhenActionIsSuccessful_CallClient (line 41) | [Fact]
    method FindAllAsync_WhenActionIsSuccessful_CallClient (line 51) | [Fact]
    method FindByIdAsync_WhenActionIsSuccessful_CallClient (line 60) | [Fact]
    method RemoveByIdAsync_WhenActionIsSuccessful_CallClient (line 69) | [Fact]
    method UpdateAsync_WhenActionIsSuccessful_CallClient (line 77) | [Fact]
    method WhereAsync_WhenActionIsSuccessful_CallClient (line 87) | [Fact]

FILE: test/Liquid.Storage.AzureStorage.Tests/BlobClientFactoryTests.cs
  class BlobClientFactoryTests (line 6) | public class BlobClientFactoryTests
    method BlobClientFactoryTests (line 12) | public BlobClientFactoryTests()
    method Ctor_WhenOptionsIsNull_ThenReturnArgumentNullException (line 28) | [Fact]
    method Ctor_WhenOptionsExists_ThenBlobClientFactoryInstance (line 34) | [Fact]
    method SetContainerClients_WhenOptionsNotSet_ThenThrowArgumentNullException (line 41) | [Fact]
    method SetContainerClients_WhenContainerNameIsInvalid_ThenThrowFormatException (line 53) | [Fact]
    method GetContainerClient_WhenClientDoesntExists_ThenThrowArgumentException (line 60) | [Fact]

FILE: test/Liquid.Storage.AzureStorage.Tests/LiquidStorageAzureTests.cs
  class LiquidStorageAzureTests (line 12) | public class LiquidStorageAzureTests
    method LiquidStorageAzureTests (line 17) | public LiquidStorageAzureTests()
    method Ctor_WhenClientFactoryIsNull_ThrowsArgumentNullException (line 28) | [Fact]
    method Ctor_WhenClientFactoryIsNotNull_DoesNotThrow (line 37) | [Fact]
    method DeleteByTags_WhenTagsAreValid_DoesNotThrow (line 47) | [Fact]
    method GetAllBlobs_WhenContainerNameIsValid_ReturnsListOfLiquidBlob (line 73) | [Fact]
    method ReadBlobsByName_WhenBlobNameIsValid_ReturnsLiquidBlob (line 95) | [Fact]
    method ReadBlobsByName_WhenRequestFail_ThrowsException (line 119) | [Fact]
    method ReadBlobsByName_WhenRequestFailedException_ReturnNull (line 130) | [Fact]
    method UploadBlob_WhenDataIsValid_ReturnsBlobUri (line 143) | [Fact]
    method UploadBlob_WhenDataIsNull_ThrowsArgumentNullException (line 166) | [Fact]
    method GetBlobSasUri_WhenBlobNameIsValid_ReturnsSasUri (line 177) | [Fact]
    method GetBlobSasUri_WhenCantGenerateSasUri_ReturnsNull (line 195) | [Fact]
    method Delete_WhenBlobNameIsValid_DoesNotThrow (line 210) | [Fact]
    method ReadBlobsByTags_WhenTagsAreValid_ReturnsListOfLiquidBlob (line 226) | [Fact]

FILE: test/Liquid.WebApi.Http.Tests/LiquidControllerBaseTest.cs
  class LiquidControllerBaseTest (line 11) | [ExcludeFromCodeCoverage]
    method LiquidControllerBaseTest (line 17) | public LiquidControllerBaseTest()
    method ExecuteAsync_WhenIActionResultOverload_Return200 (line 24) | [Fact]
    method ExecuteAsync_WhenGenericResultOverload_Return200 (line 36) | [Fact]

FILE: test/Liquid.WebApi.Http.Tests/LiquidNotificationHelperTest.cs
  class LiquidNotificationHelperTest (line 11) | public class LiquidNotificationHelperTest
    method LiquidNotificationHelperTest (line 15) | public LiquidNotificationHelperTest()
    method IncludeMessages_WhenNotificationContextHasMessages_ResponseHasMessagesList (line 20) | [Fact]
    method IncludeMessages_WhenNotificationContextHasNoMessages_ResponseWithoutMessages (line 40) | [Fact]

FILE: test/Liquid.WebApi.Http.Tests/Mocks/Handlers/TestCaseQueryHandler.cs
  class TestCaseQueryHandler (line 11) | [ExcludeFromCodeCoverage]
    method Handle (line 15) | public async Task<TestCaseResponse> Handle(TestCaseRequest request, Ca...

FILE: test/Liquid.WebApi.Http.Tests/Mocks/Handlers/TestCaseRequest.cs
  class TestCaseRequest (line 6) | [ExcludeFromCodeCoverage]

FILE: test/Liquid.WebApi.Http.Tests/Mocks/Handlers/TestCaseResponse.cs
  class TestCaseResponse (line 5) | [ExcludeFromCodeCoverage]
    method TestCaseResponse (line 10) | public TestCaseResponse(string myProperty)

FILE: test/Liquid.WebApi.Http.Tests/Mocks/TestController.cs
  class TestController (line 13) | [ExcludeFromCodeCoverage]
    method TestController (line 16) | public TestController(IMediator mediator) : base(mediator)
    method GetCase1 (line 21) | public async Task<IActionResult> GetCase1() => await ExecuteAsync(new ...
    method GetCase2 (line 23) | public async Task<IActionResult> GetCase2() => Ok(await ExecuteAsync(n...

FILE: test/Liquid.WebApi.Http.Tests/Mocks/TestNotificationController.cs
  class TestNotificationController (line 14) | [ExcludeFromCodeCoverage]
    method TestNotificationController (line 18) | public TestNotificationController(IMediator mediator, ILiquidNotificat...
    method GetCase2 (line 24) | public async Task<IActionResult> GetCase2() => Ok(await ExecuteAsync(n...
Condensed preview — 536 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (997K chars).
[
  {
    "path": ".editorconfig",
    "chars": 169,
    "preview": "[*.cs]\n\n# CS8618: Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as null"
  },
  {
    "path": ".github/dco.yml",
    "chars": 43,
    "preview": "allowRemediationCommits:\n  individual: true"
  },
  {
    "path": ".github/workflows/base-liquid-ci-and-cd.yml",
    "chars": 5175,
    "preview": "# CI & CD workflow\nname: CI/CD - Base Reusable CI & CD workflow used by Liquid Application Framework components\n\non:\n  #"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-cache-memory.yml",
    "chars": 760,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Cache.Memory component for Liquid Application Framework\n\non:\n  push:\n    branche"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-cache-ncache.yml",
    "chars": 760,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Cache.NCache component for Liquid Application Framework\n\non:\n  push:\n    branche"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-cache-redis.yml",
    "chars": 755,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Cache.Redis component for Liquid Application Framework\n\non:\n  push:\n    branches"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-cache-sqlserver.yml",
    "chars": 775,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Cache.SqlServer component for Liquid Application Framework\n\non:\n  push:\n    bran"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-core-telemetry-elasticapm.yaml",
    "chars": 797,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Core.Telemetry.ElasticApm component for Liquid Application Framework\n\non:\n  push"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-core.yml",
    "chars": 720,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Core component for Liquid Application Framework\n\non:\n  push:\n    branches: [ mai"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-dataverse.yml",
    "chars": 745,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Dataverse component for Liquid Application Framework\n\non:\n  push:\n    branches: "
  },
  {
    "path": ".github/workflows/liquid-ci-cd-genai-openai.yml",
    "chars": 720,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.GenAi.OpenAi component for Liquid Application Framework\n\non:\n  push:\n    branche"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-http.yml",
    "chars": 748,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.WebApi.Http component for Liquid Application Framework\n\non:\n  push:\n    branches"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-messaging-kafka.yaml",
    "chars": 765,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Messaging.Kafka cartridge for Liquid Application Framework\n\non:\n  push:\n    bran"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-messaging-rabbitmq.yaml",
    "chars": 778,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Messaging.RabbitMq cartridge for Liquid Application Framework\n\non:\n  push:\n    b"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-messaging-servicebus.yaml",
    "chars": 782,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Messaging.ServiceBus cartridge for Liquid Application Framework\n\non:\n  push:\n   "
  },
  {
    "path": ".github/workflows/liquid-ci-cd-repository-entityframework.yml",
    "chars": 806,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Repository.EntityFramework Cartridge for Liquid Application Framework\n\non:\n  pus"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-repository-mongodb.yml",
    "chars": 769,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Repository.Mongo Cartridge for Liquid Application Framework\n\non:\n  push:\n    bra"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-repository-odata.yml",
    "chars": 769,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Repository.OData Cartridge for Liquid Application Framework\n\non:\n  push:\n    bra"
  },
  {
    "path": ".github/workflows/liquid-ci-cd-storage-azurestorage.yml",
    "chars": 787,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Storage.AzureStorage component for Liquid Application Framework\n\non:\n  push:\n   "
  },
  {
    "path": ".github/workflows/liquid-ci-cd-templates.yaml",
    "chars": 2234,
    "preview": "# CI & CD workflow\nname: CI/CD - Liquid.Templates for Liquid Application Framework\n\non:\n  push:\n    branches: [ main, re"
  },
  {
    "path": ".gitignore",
    "chars": 5582,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 20415,
    "preview": "# How to contribute\n\nThis project welcomes contributions and suggestions. By contributing, you confirm that you have the"
  },
  {
    "path": "LICENSE",
    "chars": 1064,
    "preview": "MIT License\n\nCopyright (c) 2021 Avanade\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof"
  },
  {
    "path": "Liquid.Adapters.sln",
    "chars": 3440,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.6.3420"
  },
  {
    "path": "Liquid.Application.Framework.sln",
    "chars": 19437,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.8.3440"
  },
  {
    "path": "Liquid.WebApi.sln",
    "chars": 2402,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.0.3161"
  },
  {
    "path": "README.md",
    "chars": 7228,
    "preview": "# Liquid Application Framework\n\n![GitHub issues](https://img.shields.io/github/issues/Avanade/Liquid-Application-Framewo"
  },
  {
    "path": "docs/About-Lightweight-Architectures.md",
    "chars": 1185,
    "preview": "| [Main](About-Liquid.md) > About Lightweight Architectures |\n|----|\n\nSuccessful modern digital solutions, like startups"
  },
  {
    "path": "docs/About-Liquid-Applications.md",
    "chars": 870,
    "preview": "| [Main](About-Liquid.md) > About Liquid Applications |\n|----|\n\nAccenture uses the term [Liquid Applications](https://ww"
  },
  {
    "path": "docs/About-Liquid.md",
    "chars": 2050,
    "preview": "The **Liquid Application Framework** is a set of pre-integrated, ready-to-use binding code that supports the creation of"
  },
  {
    "path": "docs/Business-logic-seggregation.md",
    "chars": 9385,
    "preview": "| [Main](About-Liquid.md) > [Key Concepts](Key-Concepts.md) > Business Logic Separation |\n|----|\n\nFor the sake of produc"
  },
  {
    "path": "docs/Introduction.md",
    "chars": 7622,
    "preview": "| [Main](About-Liquid.md) > Introduction | \n|----|\n\nIn the last years, the always challenging task of developing multi-h"
  },
  {
    "path": "docs/Key-Concepts.md",
    "chars": 1329,
    "preview": "| [Main](About-Liquid) > Key Concepts |\n|----|\n\nA small group of core concepts balances the many aspects dealt by Liquid"
  },
  {
    "path": "docs/Platform-Abstraction-Layer.md",
    "chars": 2973,
    "preview": "| [Main](About-Liquid.md) > [Key Concepts](Key-Concepts.md) > Platform Abstraction Layer |\n|----|\n\nThe most fundamental "
  },
  {
    "path": "docs/Using-Liquid-for-building-your-application.md",
    "chars": 2261,
    "preview": "# WIP - This tutorial is still a Work In Progress and should not be used yet\n - TODO: create the templates\n - TODO: crea"
  },
  {
    "path": "nuget.config",
    "chars": 182,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <packageSources>\n    <add key=\"Nuget.org\" value=\"https://api.nu"
  },
  {
    "path": "samples/Liquid.Sample.Dataverse.sln",
    "chars": 1721,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.6.3420"
  },
  {
    "path": "samples/Liquid.Sample.MessagingConsumer.sln",
    "chars": 1688,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.3141"
  },
  {
    "path": "samples/Liquid.Sample.WebApi.sln",
    "chars": 1646,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.8.3440"
  },
  {
    "path": "samples/src/Liquid.Sample.Api/Controllers/SampleController.cs",
    "chars": 813,
    "preview": "using Liquid.Sample.Domain.Entities;\nusing Liquid.Sample.Domain.Handlers;\nusing Liquid.WebApi.Http.Controllers;\nusing Me"
  },
  {
    "path": "samples/src/Liquid.Sample.Api/Liquid.Sample.Api.csproj",
    "chars": 501,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>net6.0</TargetFramework>\n    <Nullable>ena"
  },
  {
    "path": "samples/src/Liquid.Sample.Api/Program.cs",
    "chars": 1047,
    "preview": "using Liquid.Messaging.ServiceBus.Extensions.DependencyInjection;\nusing Liquid.Repository.Mongo.Extensions;\nusing Liquid"
  },
  {
    "path": "samples/src/Liquid.Sample.Api/appsettings.Development.json",
    "chars": 119,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  }\n}\n"
  },
  {
    "path": "samples/src/Liquid.Sample.Api/appsettings.json",
    "chars": 1156,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hostin"
  },
  {
    "path": "samples/src/Liquid.Sample.Dataverse.Domain/Liquid.Sample.Dataverse.Domain.csproj",
    "chars": 312,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6.0</TargetFramework>\n    <ImplicitUsings>e"
  },
  {
    "path": "samples/src/Liquid.Sample.Dataverse.Domain/PostSampleService.cs",
    "chars": 932,
    "preview": "using Liquid.Adapter.Dataverse;\nusing Liquid.Adapter.Dataverse.Extensions;\nusing Microsoft.Xrm.Sdk;\n\nnamespace Liquid.S"
  },
  {
    "path": "samples/src/Liquid.Sample.Dataverse.Function/.gitignore",
    "chars": 4364,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# Azur"
  },
  {
    "path": "samples/src/Liquid.Sample.Dataverse.Function/DataverseIntegration.cs",
    "chars": 1209,
    "preview": "using System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Azure.WebJo"
  },
  {
    "path": "samples/src/Liquid.Sample.Dataverse.Function/Liquid.Sample.Dataverse.Function.csproj",
    "chars": 834,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net6.0</TargetFramework>\n    <AzureFunctionsVer"
  },
  {
    "path": "samples/src/Liquid.Sample.Dataverse.Function/Properties/serviceDependencies.json",
    "chars": 177,
    "preview": "{\n  \"dependencies\": {\n    \"appInsights1\": {\n      \"type\": \"appInsights\"\n    },\n    \"storage1\": {\n      \"type\": \"storage\""
  },
  {
    "path": "samples/src/Liquid.Sample.Dataverse.Function/Properties/serviceDependencies.local.json",
    "chars": 190,
    "preview": "{\n  \"dependencies\": {\n    \"appInsights1\": {\n      \"type\": \"appInsights.sdk\"\n    },\n    \"storage1\": {\n      \"type\": \"stor"
  },
  {
    "path": "samples/src/Liquid.Sample.Dataverse.Function/Startup.cs",
    "chars": 952,
    "preview": "using Liquid.Adapter.Dataverse.Extensions.DependencyInjection;\nusing Liquid.Sample.Dataverse.Function;\nusing Microsoft."
  },
  {
    "path": "samples/src/Liquid.Sample.Dataverse.Function/host.json",
    "chars": 263,
    "preview": "{\n    \"version\": \"2.0\",\n    \"logging\": {\n        \"applicationInsights\": {\n            \"samplingSettings\": {\n            "
  },
  {
    "path": "samples/src/Liquid.Sample.Dataverse.Function/local.settings.json",
    "chars": 250,
    "preview": "{\n  \"IsEncrypted\": false,\n  \"Values\": {\n    \"AzureWebJobsStorage\": \"UseDevelopmentStorage=true\",\n    \"FUNCTIONS_WORKER_R"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Entities/SampleEntity.cs",
    "chars": 195,
    "preview": "using Liquid.Repository;\nusing System;\n\nnamespace Liquid.Sample.Domain.Entities\n{\n    public class SampleEntity : Liqui"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Entities/SampleMessageEntity.cs",
    "chars": 239,
    "preview": "using Liquid.Repository;\nusing System;\n\nnamespace Liquid.Sample.Domain.Entities\n{\n    [Serializable]\n    public class S"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleCommandHandler.cs",
    "chars": 835,
    "preview": "using Liquid.Repository;\nusing Liquid.Sample.Domain.Entities;\nusing MediatR;\nusing System;\nusing System.Linq;\nusing Sys"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleRequest.cs",
    "chars": 266,
    "preview": "using MediatR;\nusing System;\n\nnamespace Liquid.Sample.Domain.Handlers\n{\n    public class SampleRequest : IRequest<Sampl"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleRequestValidator.cs",
    "chars": 398,
    "preview": "using FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Sys"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Handlers/SampleGet/SampleResponse.cs",
    "chars": 320,
    "preview": "using Liquid.Sample.Domain.Entities;\nusing System.Collections.Generic;\n\nnamespace Liquid.Sample.Domain.Handlers\n{\n    p"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Handlers/SamplePost/SampleEventCommandHandler.cs",
    "chars": 1299,
    "preview": "using Liquid.Core.Implementations;\nusing Liquid.Core.Interfaces;\nusing Liquid.Messaging;\nusing Liquid.Messaging.Interfa"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Handlers/SamplePost/SampleEventRequest.cs",
    "chars": 325,
    "preview": "using Liquid.Sample.Domain.Entities;\nusing MediatR;\n\nnamespace Liquid.Sample.Domain.Handlers\n{\n    public class SampleE"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Handlers/SamplePost/SampleEventRequestValidator.cs",
    "chars": 420,
    "preview": "using FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Sys"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Handlers/SamplePut/PutCommandHandler.cs",
    "chars": 821,
    "preview": "using Liquid.Repository;\nusing Liquid.Sample.Domain.Entities;\nusing MediatR;\nusing System;\nusing System.Threading;\nusin"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Handlers/SamplePut/PutCommandRequest.cs",
    "chars": 337,
    "preview": "using Liquid.Sample.Domain.Entities;\nusing MediatR;\n\nnamespace Liquid.Sample.Domain.Handlers.SamplePut\n{\n    public cla"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Handlers/SamplePut/PutCommandRequestValidator.cs",
    "chars": 312,
    "preview": "using FluentValidation;\n\nnamespace Liquid.Sample.Domain.Handlers.SamplePut\n{\n    public class PutCommandRequestValidato"
  },
  {
    "path": "samples/src/Liquid.Sample.Domain/Liquid.Sample.Domain.csproj",
    "chars": 444,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6.0</TargetFramework>\n  </PropertyGroup>\n\n"
  },
  {
    "path": "samples/src/Liquid.Sample.MessagingConsumer/Liquid.Sample.MessagingConsumer.csproj",
    "chars": 474,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Worker\">\n\n  <PropertyGroup>\n    <TargetFramework>net6.0</TargetFramework>\n    <UserSecre"
  },
  {
    "path": "samples/src/Liquid.Sample.MessagingConsumer/Program.cs",
    "chars": 1153,
    "preview": "using Liquid.Core.Extensions.DependencyInjection;\nusing Liquid.Messaging.ServiceBus.Extensions.DependencyInjection;\nusin"
  },
  {
    "path": "samples/src/Liquid.Sample.MessagingConsumer/Worker.cs",
    "chars": 839,
    "preview": "using Liquid.Messaging;\nusing Liquid.Messaging.Interfaces;\nusing Liquid.Sample.Domain.Entities;\nusing Liquid.Sample.Doma"
  },
  {
    "path": "samples/src/Liquid.Sample.MessagingConsumer/appsettings.Development.json",
    "chars": 159,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hostin"
  },
  {
    "path": "samples/src/Liquid.Sample.MessagingConsumer/appsettings.json",
    "chars": 1010,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hostin"
  },
  {
    "path": "src/Liquid.Cache.Memory/Extensions/DependencyInjection/IServiceCollectionExtension.cs",
    "chars": 1377,
    "preview": "using Liquid.Core.Extensions.DependencyInjection;\nusing Liquid.Core.Implementations;\nusing Microsoft.Extensions.Caching"
  },
  {
    "path": "src/Liquid.Cache.Memory/Liquid.Cache.Memory.csproj",
    "chars": 1219,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n\t  <PackageId>Liquid"
  },
  {
    "path": "src/Liquid.Cache.NCache/Extensions/DependencyInjection/IServiceCollectionExtension.cs",
    "chars": 1371,
    "preview": "using Alachisoft.NCache.Caching.Distributed;\nusing Alachisoft.NCache.Caching.Distributed.Configuration;\nusing Liquid.Co"
  },
  {
    "path": "src/Liquid.Cache.NCache/Liquid.Cache.NCache.csproj",
    "chars": 1638,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n\t  <PackageId>Liquid"
  },
  {
    "path": "src/Liquid.Cache.NCache/client.ncconf",
    "chars": 538,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n  <configuration>\n    <ncache-server connection-retries=\"3\" retry-connection-dela"
  },
  {
    "path": "src/Liquid.Cache.NCache/config.ncconf",
    "chars": 1609,
    "preview": "<configuration>\n  <cache-config cache-name=\"myCache\" alias=\"\" config-id=\"e097c2c0-88af-4aa2-8a8a-c6432eeaa3fe\" config-ve"
  },
  {
    "path": "src/Liquid.Cache.NCache/tls.ncconf",
    "chars": 522,
    "preview": "<tls-info>\n\t<server-certificate-cn>certificate-name</server-certificate-cn>\n\t<server-certificate-thumbprint>your-thumbpr"
  },
  {
    "path": "src/Liquid.Cache.Redis/Extensions/DependencyInjection/IServiceCollectionExtension.cs",
    "chars": 1337,
    "preview": "using Liquid.Core.Extensions.DependencyInjection;\nusing Liquid.Core.Implementations;\nusing Microsoft.Extensions.Caching"
  },
  {
    "path": "src/Liquid.Cache.Redis/Liquid.Cache.Redis.csproj",
    "chars": 1273,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <Nullable>enable"
  },
  {
    "path": "src/Liquid.Cache.SqlServer/Extensions/DependencyInjection/IServiceCollectionExtension.cs",
    "chars": 1319,
    "preview": "using Liquid.Core.Extensions.DependencyInjection;\nusing Liquid.Core.Implementations;\nusing Microsoft.Extensions.Caching"
  },
  {
    "path": "src/Liquid.Cache.SqlServer/Liquid.Cache.SqlServer.csproj",
    "chars": 1480,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n     <PackageId>Liqu"
  },
  {
    "path": "src/Liquid.Core/AbstractMappers/LiquidMapper.cs",
    "chars": 1514,
    "preview": "using Liquid.Core.Exceptions;\nusing Liquid.Core.Interfaces;\nusing System;\nusing System.Diagnostics.CodeAnalysis;\nusing "
  },
  {
    "path": "src/Liquid.Core/AbstractMappers/OcrResultMapper.cs",
    "chars": 1729,
    "preview": "using Liquid.Core.Entities;\nusing Liquid.Core.Exceptions;\nusing Liquid.Core.Interfaces;\nusing System;\nusing System.Diag"
  },
  {
    "path": "src/Liquid.Core/Attributes/LiquidSectionNameAttribute.cs",
    "chars": 871,
    "preview": "using System;\n\nnamespace Liquid.Core.Attributes\n{\n    /// <summary>\n    /// Defines which configuration section, the cu"
  },
  {
    "path": "src/Liquid.Core/Base/Enumeration.cs",
    "chars": 5915,
    "preview": "using Liquid.Core.Exceptions;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nus"
  },
  {
    "path": "src/Liquid.Core/Base/LiquidInterceptorBase.cs",
    "chars": 4170,
    "preview": "using Castle.DynamicProxy;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Liquid.Core.Base\n{\n    /// <summary>\n"
  },
  {
    "path": "src/Liquid.Core/Decorators/LiquidContextDecorator.cs",
    "chars": 2206,
    "preview": "using Liquid.Core.Entities;\nusing Liquid.Core.Exceptions;\nusing Liquid.Core.Interfaces;\nusing Liquid.Core.Settings;\nusi"
  },
  {
    "path": "src/Liquid.Core/Decorators/LiquidCultureDecorator.cs",
    "chars": 2025,
    "preview": "using Liquid.Core.Entities;\nusing Liquid.Core.Interfaces;\nusing Liquid.Core.Settings;\nusing Microsoft.Extensions.Option"
  },
  {
    "path": "src/Liquid.Core/Decorators/LiquidScopedLoggingDecorator.cs",
    "chars": 2393,
    "preview": "using Liquid.Core.Entities;\nusing Liquid.Core.Exceptions;\nusing Liquid.Core.Interfaces;\nusing Liquid.Core.Settings;\nusi"
  },
  {
    "path": "src/Liquid.Core/Entities/ChatCompletionResult.cs",
    "chars": 964,
    "preview": "namespace Liquid.Core.Entities\n{\n    /// <summary>\n    ///  Chat completions result set.\n    /// </summary>\n    public "
  },
  {
    "path": "src/Liquid.Core/Entities/ClientDictionary.cs",
    "chars": 1084,
    "preview": "using System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.Entities\n{\n    /// <summary>\n    /// Client dictionary to"
  },
  {
    "path": "src/Liquid.Core/Entities/ConsumerErrorEventArgs.cs",
    "chars": 377,
    "preview": "using System;\n\nnamespace Liquid.Core.Entities\n{\n    /// <summary>\n    /// Arguments for processing errors occurred duri"
  },
  {
    "path": "src/Liquid.Core/Entities/ConsumerMessageEventArgs.cs",
    "chars": 447,
    "preview": "using System.Collections.Generic;\n\nnamespace Liquid.Core.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /"
  },
  {
    "path": "src/Liquid.Core/Entities/FunctionBody.cs",
    "chars": 2991,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Text.Json;\n\nnamespace Liquid.Core.Entities\n{\n    /// "
  },
  {
    "path": "src/Liquid.Core/Entities/LiquidBlob.cs",
    "chars": 839,
    "preview": "using System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.Entities\n{\n    /// <sum"
  },
  {
    "path": "src/Liquid.Core/Entities/LiquidEntity.cs",
    "chars": 524,
    "preview": "using System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.Entities\n{\n    /// <summary>\n    /// Represents the repos"
  },
  {
    "path": "src/Liquid.Core/Entities/OcrResult.cs",
    "chars": 2816,
    "preview": "using System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Drawing;\n\nnamespace Liquid.Core.E"
  },
  {
    "path": "src/Liquid.Core/Exceptions/DataMappingException.cs",
    "chars": 1234,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.Exceptions\n{\n    /// <summary>\n    /// Occu"
  },
  {
    "path": "src/Liquid.Core/Exceptions/DatabaseContextException.cs",
    "chars": 896,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/ExceptionCustomCodes.cs",
    "chars": 2206,
    "preview": "using Liquid.Core.Base;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.Exceptions\n{\n    /// <summary>\n  "
  },
  {
    "path": "src/Liquid.Core/Exceptions/LiquidCustomException.cs",
    "chars": 1553,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/LiquidDatabaseSettingsDoesNotExistException.cs",
    "chars": 1084,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/LiquidException.cs",
    "chars": 1954,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/MessagingConsumerException.cs",
    "chars": 795,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/MessagingMissingConfigurationException.cs",
    "chars": 838,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/MessagingMissingContextKeysException.cs",
    "chars": 757,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/MessagingMissingScopedKeysException.cs",
    "chars": 759,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/MessagingMissingSettingsException.cs",
    "chars": 1003,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/MessagingProducerException.cs",
    "chars": 794,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/SerializerFailException.cs",
    "chars": 716,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/UnitOfWorkTransactionNotStartedException.cs",
    "chars": 1028,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Exceptions/UnitOfWorkTransactionWithoutRepositoryException.cs",
    "chars": 1115,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n\nnamespace Liquid.Core.Excepti"
  },
  {
    "path": "src/Liquid.Core/Extensions/ByteExtension.cs",
    "chars": 1981,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Text;\nusing System.Text.Json;\n\nnamespace Liquid.Core."
  },
  {
    "path": "src/Liquid.Core/Extensions/CommonExtensions.cs",
    "chars": 1205,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nnamespace Liquid.Core.Extensions\n{\n    /// <summary>\n    /// Util "
  },
  {
    "path": "src/Liquid.Core/Extensions/DateTimeExtension.cs",
    "chars": 5891,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\n\nnamespace Liquid.Core.Extensions\n{\n  "
  },
  {
    "path": "src/Liquid.Core/Extensions/DependencyInjection/IServiceCollectionAutoMapperExtensions.cs",
    "chars": 11530,
    "preview": "using AutoMapper;\nusing Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections.Generic;\nusing"
  },
  {
    "path": "src/Liquid.Core/Extensions/DependencyInjection/IServiceCollectionCoreExtensions.cs",
    "chars": 8339,
    "preview": "using Liquid.Core.Implementations;\nusing Liquid.Core.Interfaces;\nusing Liquid.Core.PipelineBehaviors;\nusing MediatR;\nus"
  },
  {
    "path": "src/Liquid.Core/Extensions/DependencyInjection/IServiceCollectionLiquidExtension.cs",
    "chars": 6621,
    "preview": "using Castle.DynamicProxy;\nusing Liquid.Core.Implementations;\nusing Liquid.Core.Interfaces;\nusing Microsoft.Extensions."
  },
  {
    "path": "src/Liquid.Core/Extensions/DependencyInjection/IServiceCollectionTypeExtensions.cs",
    "chars": 8344,
    "preview": "using Liquid.Core.Utils;\nusing Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections.Generic"
  },
  {
    "path": "src/Liquid.Core/Extensions/DependencyInjection/IServiceProviderExtensions.cs",
    "chars": 1566,
    "preview": "using Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections;\nusing System.Collections.Generi"
  },
  {
    "path": "src/Liquid.Core/Extensions/EnumExtension.cs",
    "chars": 1437,
    "preview": "using System;\nusing System.ComponentModel;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq;\n\nnamespace Liquid."
  },
  {
    "path": "src/Liquid.Core/Extensions/IEnumerableExtension.cs",
    "chars": 4813,
    "preview": "using Liquid.Core.Exceptions;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nus"
  },
  {
    "path": "src/Liquid.Core/Extensions/IntExtension.cs",
    "chars": 2141,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.Utils\n{\n    /// <summary>\n    /// Number Ex"
  },
  {
    "path": "src/Liquid.Core/Extensions/ObjectExtension.cs",
    "chars": 12261,
    "preview": "using Liquid.Core.Utils;\nusing System;\nusing System.Globalization;\nusing System.IO;\nusing System.Runtime.Serialization."
  },
  {
    "path": "src/Liquid.Core/Extensions/StreamExtension.cs",
    "chars": 2383,
    "preview": "using System.Diagnostics.CodeAnalysis;\nusing System.IO;\nusing System.Text;\n\nnamespace Liquid.Core.Extensions\n{\n    /// "
  },
  {
    "path": "src/Liquid.Core/Extensions/StringExtension.cs",
    "chars": 10680,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.IO;\nusing System.Security.Cryptography;\nusing System."
  },
  {
    "path": "src/Liquid.Core/Extensions/TypeExtensions.cs",
    "chars": 5468,
    "preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace Liquid.Core"
  },
  {
    "path": "src/Liquid.Core/GenAi/Entities/LiquidChatContent.cs",
    "chars": 682,
    "preview": "using Liquid.Core.GenAi.Enums;\nusing System;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.GenAi.Entiti"
  },
  {
    "path": "src/Liquid.Core/GenAi/Entities/LiquidChatMessage.cs",
    "chars": 3599,
    "preview": "using Liquid.Core.GenAi.Enums;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\n"
  },
  {
    "path": "src/Liquid.Core/GenAi/Entities/LiquidChatMessages.cs",
    "chars": 1162,
    "preview": "using System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.GenAi.Entities\n{\n    //"
  },
  {
    "path": "src/Liquid.Core/GenAi/Enums/LiquidContentKind.cs",
    "chars": 506,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
  },
  {
    "path": "src/Liquid.Core/GenAi/Enums/LiquidMessageRole.cs",
    "chars": 784,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
  },
  {
    "path": "src/Liquid.Core/GenAi/Interfaces/ILiquidGenAi.cs",
    "chars": 2676,
    "preview": "using Liquid.Core.Entities;\nusing Liquid.Core.GenAi.Entities;\nusing Liquid.Core.GenAi.Settings;\nusing Liquid.Core.Setti"
  },
  {
    "path": "src/Liquid.Core/GenAi/Interfaces/ILiquidGenAiHandler.cs",
    "chars": 1311,
    "preview": "using System;\nusing System.Net.WebSockets;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Liquid.Core"
  },
  {
    "path": "src/Liquid.Core/GenAi/Settings/CompletionsOptions.cs",
    "chars": 2219,
    "preview": "using Liquid.Core.Settings;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusin"
  },
  {
    "path": "src/Liquid.Core/Implementations/LiquidBackgroundService.cs",
    "chars": 2642,
    "preview": "using Liquid.Core.Entities;\nusing Liquid.Core.Interfaces;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microso"
  },
  {
    "path": "src/Liquid.Core/Implementations/LiquidCache.cs",
    "chars": 3076,
    "preview": "using Liquid.Core.Extensions;\nusing Liquid.Core.Interfaces;\nusing Microsoft.Extensions.Caching.Distributed;\nusing Syste"
  },
  {
    "path": "src/Liquid.Core/Implementations/LiquidContext.cs",
    "chars": 1161,
    "preview": "using Liquid.Core.Interfaces;\nusing System.Collections.Generic;\n\nnamespace Liquid.Core.Implementations\n{\n    ///<inheri"
  },
  {
    "path": "src/Liquid.Core/Implementations/LiquidContextNotifications.cs",
    "chars": 1546,
    "preview": "using Liquid.Core.Interfaces;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Liquid.Core.Implementations\n{\n"
  },
  {
    "path": "src/Liquid.Core/Implementations/LiquidJsonSerializer.cs",
    "chars": 576,
    "preview": "using Liquid.Core.Interfaces;\nusing System.Text.Json;\n\nnamespace Liquid.Core.Implementations\n{\n    /// <summary>\n    //"
  },
  {
    "path": "src/Liquid.Core/Implementations/LiquidSerializerProvider.cs",
    "chars": 891,
    "preview": "using Liquid.Core.Interfaces;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Liquid.Core"
  },
  {
    "path": "src/Liquid.Core/Implementations/LiquidTelemetryInterceptor.cs",
    "chars": 3105,
    "preview": "using Castle.DynamicProxy;\nusing Liquid.Core.Base;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Diagn"
  },
  {
    "path": "src/Liquid.Core/Implementations/LiquidUnitOfWork.cs",
    "chars": 4647,
    "preview": "using Liquid.Core.Entities;\nusing Liquid.Core.Exceptions;\nusing Liquid.Core.Interfaces;\nusing Microsoft.Extensions.Depe"
  },
  {
    "path": "src/Liquid.Core/Implementations/LiquidXmlSerializer.cs",
    "chars": 1064,
    "preview": "using Liquid.Core.Exceptions;\nusing Liquid.Core.Interfaces;\nusing System;\nusing System.IO;\nusing System.Xml;\nusing Syst"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidCache.cs",
    "chars": 2302,
    "preview": "using Microsoft.Extensions.Caching.Distributed;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Liquid"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidConsumer.cs",
    "chars": 942,
    "preview": "using Liquid.Core.Entities;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Liquid.Core."
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidContext.cs",
    "chars": 1040,
    "preview": "using System.Collections.Generic;\n\nnamespace Liquid.Core.Interfaces\n{\n    /// <summary>\n    /// Global context service."
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidContextNotifications.cs",
    "chars": 828,
    "preview": "using System.Collections.Generic;\n\nnamespace Liquid.Core.Interfaces\n{\n    /// <summary>\n    /// Manages notifications i"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidDataContext.cs",
    "chars": 952,
    "preview": "using System;\nusing System.Threading.Tasks;\n\nnamespace Liquid.Core.Interfaces\n{\n    /// <summary>\n    /// Represents th"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidMapper.cs",
    "chars": 733,
    "preview": "using System.Threading.Tasks;\n\nnamespace Liquid.Core.Interfaces\n{\n    /// <summary>\n    /// Defines object that map dat"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidOcr.cs",
    "chars": 4216,
    "preview": "using Liquid.Core.Entities;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Liquid.Ai.Core.Interfaces\n{\n    /"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidProducer.cs",
    "chars": 1027,
    "preview": "using System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Liquid.Core.Interfaces\n{\n    /// <summary>\n "
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidRepository.cs",
    "chars": 2299,
    "preview": "using Liquid.Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidSerializer.cs",
    "chars": 351,
    "preview": "namespace Liquid.Core.Interfaces\n{\n    /// <summary>\n    /// Serialization\n    /// </summary>\n    public interface ILiq"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidSerializerProvider.cs",
    "chars": 564,
    "preview": "using System;\n\nnamespace Liquid.Core.Interfaces\n{\n    /// <summary>\n    /// Generates a new instance of Serializer Serv"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidStorage.cs",
    "chars": 3242,
    "preview": "using Liquid.Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Li"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidUnitOfWork.cs",
    "chars": 1414,
    "preview": "using Liquid.Core.Entities;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Liquid.Core.Interfaces\n{\n    /// <su"
  },
  {
    "path": "src/Liquid.Core/Interfaces/ILiquidWorker.cs",
    "chars": 838,
    "preview": "using Liquid.Core.Entities;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Liquid.Core.Interfaces\n{\n "
  },
  {
    "path": "src/Liquid.Core/Liquid.Core.csproj",
    "chars": 2228,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <PackageId>Liqui"
  },
  {
    "path": "src/Liquid.Core/Localization/Entities/LocalizationCollection.cs",
    "chars": 816,
    "preview": "using System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Text.Json.Serialization;\n\nnamespa"
  },
  {
    "path": "src/Liquid.Core/Localization/Entities/LocalizationItem.cs",
    "chars": 1005,
    "preview": "using System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Text.Json.Serialization;\n\nnamespa"
  },
  {
    "path": "src/Liquid.Core/Localization/Entities/LocalizationValue.cs",
    "chars": 1214,
    "preview": "using System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Text.Json.Serialization;\n\nnamespa"
  },
  {
    "path": "src/Liquid.Core/Localization/ILocalization.cs",
    "chars": 1637,
    "preview": "using System;\nusing System.Globalization;\n\nnamespace Liquid.Core.Localization\n{\n    /// <summary>\n    /// Resource cata"
  },
  {
    "path": "src/Liquid.Core/Localization/JsonFileLocalization.cs",
    "chars": 5212,
    "preview": "using Liquid.Core.Extensions;\nusing Liquid.Core.Localization.Entities;\nusing Liquid.Core.Settings;\nusing Microsoft.Exte"
  },
  {
    "path": "src/Liquid.Core/Localization/LocalizationException.cs",
    "chars": 859,
    "preview": "using Liquid.Core.Exceptions;\nusing System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n"
  },
  {
    "path": "src/Liquid.Core/Localization/LocalizationExtensions.cs",
    "chars": 2184,
    "preview": "using Liquid.Core.Localization.Entities;\nusing Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Col"
  },
  {
    "path": "src/Liquid.Core/Localization/LocalizationReaderException.cs",
    "chars": 844,
    "preview": "using Liquid.Core.Exceptions;\nusing System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.Serialization;\n"
  },
  {
    "path": "src/Liquid.Core/PipelineBehaviors/LiquidTelemetryBehavior.cs",
    "chars": 3222,
    "preview": "using MediatR;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Diagnostics;\nusing System.Reflection;\nusi"
  },
  {
    "path": "src/Liquid.Core/PipelineBehaviors/LiquidValidationBehavior.cs",
    "chars": 2072,
    "preview": "using FluentValidation;\nusing MediatR;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusi"
  },
  {
    "path": "src/Liquid.Core/Settings/CultureSettings.cs",
    "chars": 537,
    "preview": "using Liquid.Core.Attributes;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.Settings\n{\n    /// <summary"
  },
  {
    "path": "src/Liquid.Core/Settings/DatabaseSettings.cs",
    "chars": 697,
    "preview": "using System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.Settings\n{\n    /// <summary>\n    /// Database configurati"
  },
  {
    "path": "src/Liquid.Core/Settings/GenAiOptions.cs",
    "chars": 1922,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq;\nusing System."
  },
  {
    "path": "src/Liquid.Core/Settings/OcrOptions.cs",
    "chars": 940,
    "preview": "using System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.Settings\n{\n    /// <sum"
  },
  {
    "path": "src/Liquid.Core/Settings/ScopedContextSettings.cs",
    "chars": 692,
    "preview": "using Liquid.Core.Attributes;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Liqui"
  },
  {
    "path": "src/Liquid.Core/Settings/ScopedKey.cs",
    "chars": 492,
    "preview": "using System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Core.Settings\n{\n    /// <summary>\n    /// Definition of scoped"
  },
  {
    "path": "src/Liquid.Core/Settings/ScopedLoggingSettings.cs",
    "chars": 535,
    "preview": "using Liquid.Core.Attributes;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Liqui"
  },
  {
    "path": "src/Liquid.Core/Utils/TypeUtils.cs",
    "chars": 3397,
    "preview": "using Liquid.Core.Extensions;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nus"
  },
  {
    "path": "src/Liquid.Core/Utils/ZipUtils.cs",
    "chars": 5474,
    "preview": "using System.Diagnostics.CodeAnalysis;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Text;\n\nnamespace Liqu"
  },
  {
    "path": "src/Liquid.Core.Telemetry.ElasticApm/Extensions/DependencyInjection/IApplicationBuilderExtensions.cs",
    "chars": 1056,
    "preview": "using System.Diagnostics.CodeAnalysis;\nusing Elastic.Apm.NetCoreAll;\nusing Microsoft.AspNetCore.Builder;\nusing Microsof"
  },
  {
    "path": "src/Liquid.Core.Telemetry.ElasticApm/Extensions/DependencyInjection/IServiceCollectionExtensions.cs",
    "chars": 1452,
    "preview": "using Elastic.Apm;\nusing Liquid.Core.Extensions.DependencyInjection;\nusing Liquid.Core.Telemetry.ElasticApm.Implementat"
  },
  {
    "path": "src/Liquid.Core.Telemetry.ElasticApm/Extensions/IConfigurationExtension.cs",
    "chars": 1261,
    "preview": "using System;\nusing Microsoft.Extensions.Configuration;\n\nnamespace Liquid.Core.Telemetry.ElasticApm.Extensions\n{\n    //"
  },
  {
    "path": "src/Liquid.Core.Telemetry.ElasticApm/Implementations/LiquidElasticApmInterceptor.cs",
    "chars": 3033,
    "preview": "using System;\nusing System.Threading.Tasks;\nusing Castle.DynamicProxy;\nusing Elastic.Apm.Api;\nusing Liquid.Core.Base;\nu"
  },
  {
    "path": "src/Liquid.Core.Telemetry.ElasticApm/Implementations/LiquidElasticApmTelemetryBehavior.cs",
    "chars": 3436,
    "preview": "using System;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Elastic.Apm.Api;\nusi"
  },
  {
    "path": "src/Liquid.Core.Telemetry.ElasticApm/Liquid.Core.Telemetry.ElasticApm.csproj",
    "chars": 1266,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <PackageId>Liqui"
  },
  {
    "path": "src/Liquid.Dataverse/DataverseClientFactory.cs",
    "chars": 1199,
    "preview": "using Microsoft.Extensions.Options;\nusing Microsoft.PowerPlatform.Dataverse.Client;\nusing System.Diagnostics.CodeAnalys"
  },
  {
    "path": "src/Liquid.Dataverse/DataverseEntityMapper.cs",
    "chars": 5979,
    "preview": "using Liquid.Core.AbstractMappers;\nusing Microsoft.Xrm.Sdk;\nusing Microsoft.Xrm.Sdk.Metadata;\nusing Newtonsoft.Json;\nus"
  },
  {
    "path": "src/Liquid.Dataverse/DataverseSettings.cs",
    "chars": 610,
    "preview": "using System.Diagnostics.CodeAnalysis;\n\nnamespace Liquid.Dataverse\n{\n    /// <summary>\n    /// Set of dataverse connect"
  },
  {
    "path": "src/Liquid.Dataverse/Extensions/DependencyInjection/IServiceCollectionExtensions.cs",
    "chars": 1558,
    "preview": "using Liquid.Core.Interfaces;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;"
  },
  {
    "path": "src/Liquid.Dataverse/Extensions/EntityExtensions.cs",
    "chars": 877,
    "preview": "using Microsoft.Xrm.Sdk;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Text.Json;\n\nnamespace Liquid.Dataverse.Ext"
  },
  {
    "path": "src/Liquid.Dataverse/IDataverseClientFactory.cs",
    "chars": 459,
    "preview": "using Microsoft.PowerPlatform.Dataverse.Client;\n\nnamespace Liquid.Dataverse\n{\n    /// <summary>\n    /// Defines Dataver"
  },
  {
    "path": "src/Liquid.Dataverse/ILiquidDataverse.cs",
    "chars": 4382,
    "preview": "using Microsoft.Xrm.Sdk;\nusing Microsoft.Xrm.Sdk.Metadata;\nusing Microsoft.Xrm.Sdk.Query;\n\nnamespace Liquid.Dataverse\n{"
  },
  {
    "path": "src/Liquid.Dataverse/Liquid.Dataverse.csproj",
    "chars": 1331,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <ImplicitUsings>"
  },
  {
    "path": "src/Liquid.Dataverse/LiquidDataverse.cs",
    "chars": 6308,
    "preview": "using Microsoft.Crm.Sdk.Messages;\nusing Microsoft.PowerPlatform.Dataverse.Client;\nusing Microsoft.Xrm.Sdk;\nusing Micros"
  },
  {
    "path": "src/Liquid.GenAi.OpenAi/Extensions/IServiceCollectionExtension.cs",
    "chars": 1316,
    "preview": "using Liquid.Core.GenAi;\nusing Liquid.GenAi.OpenAi.Settings;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft."
  },
  {
    "path": "src/Liquid.GenAi.OpenAi/IOpenAiClientFactory.cs",
    "chars": 456,
    "preview": "using OpenAI.Chat;\n\nnamespace Liquid.GenAi.OpenAi\n{\n    /// <summary>\n    /// Provide <see cref=\"ChatClient\"/> generato"
  },
  {
    "path": "src/Liquid.GenAi.OpenAi/Liquid.GenAi.OpenAi.csproj",
    "chars": 1342,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <ImplicitUsings>"
  },
  {
    "path": "src/Liquid.GenAi.OpenAi/OpenAiAdapter.cs",
    "chars": 8288,
    "preview": "using Liquid.Core.Entities;\nusing Liquid.Core.GenAi;\nusing Liquid.Core.GenAi.Entities;\nusing Liquid.Core.GenAi.Enums;\nu"
  },
  {
    "path": "src/Liquid.GenAi.OpenAi/OpenAiClientFactory.cs",
    "chars": 2842,
    "preview": "using Azure;\nusing Azure.AI.OpenAI;\nusing Liquid.Core.Entities;\nusing Liquid.GenAi.OpenAi.Settings;\nusing Microsoft.Ext"
  }
]

// ... and 336 more files (download for full content)

About this extraction

This page contains the full source code of the Avanade/Liquid-Application-Framework GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 536 files (887.5 KB), approximately 216.0k tokens, and a symbol index with 1476 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!