From a4b297f6fa2f83a77b299766fb98d8cf2b20ad2b Mon Sep 17 00:00:00 2001 From: vivet Date: Fri, 17 Jul 2026 10:30:28 +0200 Subject: [PATCH 01/16] Updated --- .../Mvc/Middleware/ExceptionHandlingMiddleware.cs | 2 +- Nano.App/ApiClient/BaseApiClient.cs | 8 +++----- Nano.App/Exceptions/ProblemDetailsException.cs | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Nano.App.Api/Mvc/Middleware/ExceptionHandlingMiddleware.cs b/Nano.App.Api/Mvc/Middleware/ExceptionHandlingMiddleware.cs index 2e47609e..c40c6827 100644 --- a/Nano.App.Api/Mvc/Middleware/ExceptionHandlingMiddleware.cs +++ b/Nano.App.Api/Mvc/Middleware/ExceptionHandlingMiddleware.cs @@ -226,7 +226,7 @@ private void LogRequest(HttpRequest httpRequest, LogLevel logLevel, int statusCo if (success) { queryString = queryString? - .Replace(accessToken.ToString(), "<>"); + .Replace(accessToken.ToString(), "***"); } var elapsed = (Stopwatch.GetTimestamp() - timestamp) * 1000D / Stopwatch.Frequency; diff --git a/Nano.App/ApiClient/BaseApiClient.cs b/Nano.App/ApiClient/BaseApiClient.cs index 17b29512..c3decde0 100644 --- a/Nano.App/ApiClient/BaseApiClient.cs +++ b/Nano.App/ApiClient/BaseApiClient.cs @@ -21,8 +21,6 @@ public abstract class BaseApiClient(ApiClient apiClient) public abstract class BaseApiClient(ApiClient apiClient) where TIdentity : IEquatable { - private readonly ApiClient apiClient = apiClient; - /// /// Provides access to authentication-related API endpoints. /// @@ -50,7 +48,7 @@ protected Task InvokeAsync(TRequest request, CancellationToken cancell { ArgumentNullException.ThrowIfNull(request); - return this.apiClient.InvokeAsync(request, cancellationToken); + return apiClient.InvokeAsync(request, cancellationToken); } /// @@ -67,7 +65,7 @@ protected Task InvokeAsync(TRequest request, CancellationToken cancell { ArgumentNullException.ThrowIfNull(request); - return this.apiClient.InvokeAsync(request, cancellationToken); + return apiClient.InvokeAsync(request, cancellationToken); } /// @@ -86,7 +84,7 @@ protected Task InvokeAsync(TRequest request, CancellationToken cancell { ArgumentNullException.ThrowIfNull(request); - return this.apiClient + return apiClient .InvokeAsync(request, cancellationToken); } } \ No newline at end of file diff --git a/Nano.App/Exceptions/ProblemDetailsException.cs b/Nano.App/Exceptions/ProblemDetailsException.cs index 90724079..9422c761 100644 --- a/Nano.App/Exceptions/ProblemDetailsException.cs +++ b/Nano.App/Exceptions/ProblemDetailsException.cs @@ -27,6 +27,6 @@ public ProblemDetailsException(ProblemDetails problemDetails) { ArgumentNullException.ThrowIfNull(problemDetails); - return problemDetails.Detail; + return problemDetails.Title; } } \ No newline at end of file From eb66a922953991fc6a715638a96fa3661e85ba11 Mon Sep 17 00:00:00 2001 From: vivet Date: Sat, 18 Jul 2026 09:24:19 +0200 Subject: [PATCH 02/16] Updated --- Nano.App/ApiClient/Apis/AuditApi.cs | 72 ----- Nano.App/ApiClient/Apis/EntityApi.cs | 382 --------------------------- 2 files changed, 454 deletions(-) diff --git a/Nano.App/ApiClient/Apis/AuditApi.cs b/Nano.App/ApiClient/Apis/AuditApi.cs index ed03a934..1389bea9 100644 --- a/Nano.App/ApiClient/Apis/AuditApi.cs +++ b/Nano.App/ApiClient/Apis/AuditApi.cs @@ -143,35 +143,6 @@ public async Task>> QueryAsync(Quer .InvokeAsync, IEnumerable>>(request, cancellationToken) ?? []; } - /// - /// Executes audit/query using a query abstraction. - /// - public Task>> QueryAsync(IQuery query, CancellationToken cancellationToken = default) - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(query); - - return this.QueryAsync(new QueryRequest - { - Query = query - }, cancellationToken); - } - - /// - /// Executes audit/query using a query abstraction with related data. - /// - public Task>> QueryAsync(IQuery query, int includeDepth, CancellationToken cancellationToken = default) - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(query); - - return this.QueryAsync(new QueryRequest - { - Query = query, - IncludeDepth = includeDepth - }, cancellationToken); - } - /// /// Executes audit/query/first to retrieve the first matching audit entry. /// @@ -186,35 +157,6 @@ public Task>> QueryAsync(IQuery, AuditEntry>(request, cancellationToken); } - /// - /// Executes audit/query/first using a query abstraction. - /// - public Task?> QueryFirstAsync(IQuery query, CancellationToken cancellationToken = default) - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(query); - - return this.QueryFirstAsync(new QueryFirstRequest - { - Query = query - }, cancellationToken); - } - - /// - /// Executes audit/query/first using a query abstraction with related data. - /// - public Task?> QueryFirstAsync(IQuery query, int includeDepth, CancellationToken cancellationToken = default) - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(query); - - return this.QueryFirstAsync(new QueryFirstRequest - { - Query = query, - IncludeDepth = includeDepth - }, cancellationToken); - } - /// /// Executes audit/query/count to count matching audit entries. /// @@ -232,18 +174,4 @@ public async Task QueryCountAsync(QueryCountRequest r return count; } - - /// - /// Executes audit/query/count using criteria. - /// - public Task QueryCountAsync(TCriteria criteria, CancellationToken cancellationToken = default) - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(criteria); - - return this.QueryCountAsync(new QueryCountRequest - { - Criteria = criteria - }, cancellationToken); - } } \ No newline at end of file diff --git a/Nano.App/ApiClient/Apis/EntityApi.cs b/Nano.App/ApiClient/Apis/EntityApi.cs index a14e2e87..3339c9b7 100644 --- a/Nano.App/ApiClient/Apis/EntityApi.cs +++ b/Nano.App/ApiClient/Apis/EntityApi.cs @@ -154,48 +154,6 @@ public async Task> QueryAsync(QueryRequ .InvokeAsync, IEnumerable>(request, cancellationToken) ?? []; } - /// - /// Executes query for using a query object. - /// - /// The entity type. - /// The query criteria type. - /// The query object. - /// The cancellation token. - /// A collection of matching entities. - public Task> QueryAsync(IQuery query, CancellationToken cancellationToken = default) - where TEntity : class, IEntity - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(query); - - return this.QueryAsync(new QueryRequest - { - Query = query - }, cancellationToken); - } - - /// - /// Executes query for using a query object with include depth. - /// - /// The entity type. - /// The query criteria type. - /// The query object. - /// The include depth level. - /// The cancellation token. - /// A collection of matching entities. - public Task> QueryAsync(IQuery query, int includeDepth, CancellationToken cancellationToken = default) - where TEntity : class, IEntity - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(query); - - return this.QueryAsync(new QueryRequest - { - Query = query, - IncludeDepth = includeDepth - }, cancellationToken); - } - /// /// Executes query/first for to retrieve the first matching entity by request. /// @@ -214,48 +172,6 @@ public Task> QueryAsync(IQuery, TEntity>(request, cancellationToken); } - /// - /// Executes query/first for using a query object. - /// - /// The entity type. - /// The query criteria type. - /// The query object. - /// The cancellation token. - /// The first matching entity, or null if none found. - public Task QueryFirstAsync(IQuery query, CancellationToken cancellationToken = default) - where TEntity : class, IEntity - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(query); - - return this.QueryFirstAsync(new QueryFirstRequest - { - Query = query - }, cancellationToken); - } - - /// - /// Executes query/first for using a query object with include depth. - /// - /// The entity type. - /// The query criteria type. - /// The query object. - /// The include depth level. - /// The cancellation token. - /// The first matching entity, or null if none found. - public Task QueryFirstAsync(IQuery query, int includeDepth, CancellationToken cancellationToken = default) - where TEntity : class, IEntity - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(query); - - return this.QueryFirstAsync(new QueryFirstRequest - { - Query = query, - IncludeDepth = includeDepth - }, cancellationToken); - } - /// /// Executes query/count for to count matching entities by request. /// @@ -278,26 +194,6 @@ public async Task QueryCountAsync(QueryCountRequest - /// Executes query/count for to count matching entities by criteria. - /// - /// The entity type. - /// The query criteria type. - /// The query criteria. - /// The cancellation token. - /// The number of matching entities. - public Task QueryCountAsync(TCriteria criteria, CancellationToken cancellationToken = default) - where TEntity : class, IEntity - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(criteria); - - return this.QueryCountAsync(new QueryCountRequest - { - Criteria = criteria - }, cancellationToken); - } - #endregion @@ -321,24 +217,6 @@ public async Task CreateAsync(CreateRequest request, Cancellat return entityCreated ?? throw new NotFoundException(nameof(entityCreated)); } - /// - /// Invokes the 'create' endpoint of the entity in the api. - /// - /// The entity type. - /// The entity to create. - /// The cancellation token. - /// The created entity. - public Task CreateAsync(IEntityCreatable entity, CancellationToken cancellationToken = default) - where TEntity : class, IEntityCreatable - { - ArgumentNullException.ThrowIfNull(entity); - - return this.CreateAsync(new CreateRequest - { - Entity = entity - }, cancellationToken); - } - /// /// Invokes the 'create/edit' endpoint of the entity in the api. /// @@ -357,24 +235,6 @@ public async Task CreateOrEditAsync(CreateOrEditRequest reques return entityCreated ?? throw new NotFoundException(nameof(entityCreated)); } - /// - /// Invokes the 'create/edit' endpoint of the entity in the api. - /// - /// The entity type. - /// The entity to create. - /// The cancellation token. - /// The created or edited entity. - public Task CreateOrEditAsync(IEntityCreatableAndUpdatable entity, CancellationToken cancellationToken = default) - where TEntity : class, IEntityCreatableAndUpdatable - { - ArgumentNullException.ThrowIfNull(entity); - - return this.CreateOrEditAsync(new CreateOrEditRequest - { - Entity = entity - }, cancellationToken); - } - /// /// Invokes the 'create/get' endpoint of the entity in the api. /// @@ -393,24 +253,6 @@ public async Task CreateOrGetAsync(CreateOrGetRequest request, return entityCreated ?? throw new NotFoundException(nameof(entityCreated)); } - /// - /// Invokes the 'create/get' endpoint of the entity in the api. - /// - /// The entity type. - /// The entity to create or get. - /// The cancellation token. - /// The created or existing entity. - public Task CreateOrGetAsync(IEntityCreatable entity, CancellationToken cancellationToken = default) - where TEntity : class, IEntityCreatable, IEntityIdentity - { - ArgumentNullException.ThrowIfNull(entity); - - return this.CreateOrGetAsync(new CreateOrGetRequest - { - Entity = entity - }, cancellationToken); - } - /// /// Invokes the 'create/reload' endpoint of the entity in the api. /// @@ -429,24 +271,6 @@ public Task CreateOrGetAsync(IEntityCreatable entity, Cancella return entityCreated ?? throw new NotFoundException(nameof(entityCreated)); } - /// - /// Invokes the 'create/reload' endpoint of the entity in the api. - /// - /// The entity type. - /// The entity to create and reload. - /// The cancellation token. - /// The created entity. - public Task CreateAndGetAsync(IEntityCreatable entity, CancellationToken cancellationToken = default) - where TEntity : class, IEntityCreatable, IEntityIdentity - { - ArgumentNullException.ThrowIfNull(entity); - - return this.CreateAndGetAsync(new CreateAndGetRequest - { - Entity = entity - }, cancellationToken); - } - /// /// Invokes the 'create/many' endpoint of the entity in the api. /// @@ -463,24 +287,6 @@ await this.api .InvokeAsync>(request, cancellationToken); } - /// - /// Invokes the 'create/many' endpoint of the entity in the api. - /// - /// The entity type. - /// The entities to create. - /// The cancellation token. - /// Operation result. - public Task CreateManyAsync(IEnumerable entities, CancellationToken cancellationToken = default) - where TEntity : class, IEntityCreatable - { - ArgumentNullException.ThrowIfNull(entities); - - return this.CreateManyAsync(new CreateManyRequest - { - Entities = entities - }, cancellationToken); - } - /// /// Invokes the 'create/many' bulk endpoint of the entity in the api. /// @@ -497,24 +303,6 @@ public Task CreateManyBulkAsync(CreateManyBulkRequest request, Cancella .InvokeAsync>(request, cancellationToken); } - /// - /// Invokes the 'create/many/bulk' bulk endpoint of the entity in the api. - /// - /// The entity type. - /// The entities to create in bulk. - /// The cancellation token. - /// Operation result. - public Task CreateManyBulkAsync(IEnumerable entities, CancellationToken cancellationToken = default) - where TEntity : class, IEntityCreatable - { - ArgumentNullException.ThrowIfNull(entities); - - return this.CreateManyBulkAsync(new CreateManyBulkRequest - { - Entities = entities - }, cancellationToken); - } - #endregion @@ -539,25 +327,6 @@ public Task CreateManyBulkAsync(IEnumerable entities, return entityEdited ?? throw new NotFoundException(nameof(entityEdited)); } - /// - /// Updates an entity via the 'edit' endpoint using an updatable entity instance. - /// Route: edit - /// - /// The entity type. - /// The entity containing updated values. - /// A token to cancel the operation. - /// The updated entity instance. - public Task EditAsync(IEntityUpdatable entity, CancellationToken cancellationToken = default) - where TEntity : class, IEntityUpdatable - { - ArgumentNullException.ThrowIfNull(entity); - - return this.EditAsync(new EditRequest - { - Entity = entity - }, cancellationToken); - } - /// /// Updates and returns an entity via the 'edit/get' endpoint. /// Route: edit/get @@ -577,25 +346,6 @@ public Task CreateManyBulkAsync(IEnumerable entities, return entityEdited ?? throw new NotFoundException(nameof(entityEdited)); } - /// - /// Updates and returns an entity via the 'edit/get' endpoint using an entity instance. - /// Route: edit/get - /// - /// The entity type. - /// The entity containing updated values. - /// A token to cancel the operation. - /// The updated entity instance. - public Task EditGetAsync(IEntityUpdatable entity, CancellationToken cancellationToken = default) - where TEntity : class, IEntityUpdatable, IEntityIdentity - { - ArgumentNullException.ThrowIfNull(entity); - - return this.EditAndGetAsync(new EditAndGetRequest - { - Entity = entity - }, cancellationToken); - } - /// /// Updates multiple entities via the 'edit/many' endpoint. /// Route: edit/many @@ -613,25 +363,6 @@ await this.api .InvokeAsync>(request, cancellationToken); } - /// - /// Updates multiple entities via the 'edit/many' endpoint using entity instances. - /// Route: edit/many - /// - /// The entity type. - /// The entities to update. - /// A token to cancel the operation. - /// A task representing the operation. - public Task EditManyAsync(IEnumerable entities, CancellationToken cancellationToken = default) - where TEntity : class, IEntityUpdatable - { - ArgumentNullException.ThrowIfNull(entities); - - return this.EditManyAsync(new EditManyRequest - { - Entities = entities - }, cancellationToken); - } - /// /// Bulk updates multiple entities via the 'edit/many/bulk' endpoint. /// Route: edit/many/bulk @@ -649,25 +380,6 @@ public Task EditManyBulkAsync(EditManyBulkRequest request, Cancellation .InvokeAsync>(request, cancellationToken); } - /// - /// Bulk updates multiple entities via the 'edit/many/bulk' endpoint using entity instances. - /// Route: edit/many/bulk - /// - /// The entity type. - /// The entities to update. - /// A token to cancel the operation. - /// A task representing the operation. - public Task EditManyBulkAsync(IEnumerable entities, CancellationToken cancellationToken = default) - where TEntity : class, IEntityUpdatable - { - ArgumentNullException.ThrowIfNull(entities); - - return this.EditManyBulkAsync(new EditManyBulkRequest - { - Entities = entities - }, cancellationToken); - } - /// /// Updates entities matching a query via the 'edit/query' endpoint. /// Route: edit/query @@ -687,33 +399,6 @@ await this.api .InvokeAsync, TEntity>(request, cancellationToken); } - /// - /// Updates entities matching a query via the 'edit/query' endpoint using criteria and property updates. - /// Route: edit/query - /// - /// The entity type. - /// The query criteria type. - /// Selection criteria for entities to update. - /// Dictionary of property updates to apply. - /// A token to cancel the operation. - /// A task representing the operation. - public Task EditQueryAsync(TCriteria criteria, IDictionary propertyUpdates, CancellationToken cancellationToken = default) - where TEntity : class, IEntityDeletable - where TCriteria : class, IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(criteria); - ArgumentNullException.ThrowIfNull(propertyUpdates); - - return this.EditQueryAsync(new EditQueryRequest - { - Query = - { - Criteria = criteria, - PropertyUpdates = propertyUpdates - } - }, cancellationToken); - } - /// /// Bulk (batch) updates entities matching a query via the 'edit/query/bulk' endpoint. /// Route: edit/query/bulk @@ -733,33 +418,6 @@ await this.api .InvokeAsync, TEntity>(request, cancellationToken); } - /// - /// Bulk (batch) updates entities matching a query via the 'edit/query/bulk' endpoint using criteria and property updates. - /// Route: edit/query/bulk - /// - /// The entity type. - /// The query criteria type. - /// Selection criteria for entities to update. - /// Dictionary of property updates to apply. - /// A token to cancel the operation. - /// A task representing the operation. - public Task EditQueryBulkAsync(TCriteria criteria, IDictionary propertyUpdates, CancellationToken cancellationToken = default) - where TEntity : class, IEntityDeletable - where TCriteria : class, IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(criteria); - ArgumentNullException.ThrowIfNull(propertyUpdates); - - return this.EditQueryBulkAsync(new EditQueryBulkRequest - { - Query = - { - Criteria = criteria, - PropertyUpdates = propertyUpdates - } - }, cancellationToken); - } - #endregion @@ -883,26 +541,6 @@ await this.api .InvokeAsync, TEntity>(request, cancellationToken); } - /// - /// Deletes entities matching criteria using the 'delete/query' endpoint. - /// - /// The entity type. - /// The criteria type. - /// The selection criteria. - /// A token to cancel the operation. - /// A task representing the asynchronous operation. - public Task DeleteQueryAsync(TCriteria criteria, CancellationToken cancellationToken = default) - where TEntity : class, IEntityDeletable - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(criteria); - - return this.DeleteQueryAsync(new DeleteQueryRequest - { - Criteria = criteria - }, cancellationToken); - } - /// /// Deletes (batch) entities in bulk using a query via the 'delete/query/bulk' endpoint. /// @@ -921,25 +559,5 @@ await this.api .InvokeAsync, TEntity>(request, cancellationToken); } - /// - /// Deletes (batch) entities in bulk matching criteria using the 'delete/query/bulk' endpoint. - /// - /// The entity type. - /// The criteria type. - /// The selection criteria. - /// A token to cancel the operation. - /// A task representing the asynchronous operation. - public Task DeleteQueryBulkAsync(TCriteria criteria, CancellationToken cancellationToken = default) - where TEntity : class, IEntityIdentity, IEntityDeletable - where TCriteria : IQueryCriteria, new() - { - ArgumentNullException.ThrowIfNull(criteria); - - return this.DeleteQueryBulkAsync(new DeleteQueryBulkRequest - { - Criteria = criteria - }, cancellationToken); - } - #endregion } \ No newline at end of file From 255f29b0f44d396436449b18e486314b16e5ed66 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 09:50:03 +0200 Subject: [PATCH 03/16] #101 OpenTelemetry Metrics Observability --- Nano.App.Api/Config/ApiOptions.cs | 5 ++ Nano.App.Api/Config/MetricsOptions.cs | 6 ++ .../ApplicationBuilderExtensions.cs | 15 +++++ .../Extensions/ServiceCollectionExtensions.cs | 24 +++++++- .../Extensions/WebApplicationExtensions.cs | 1 + Nano.App.Api/Nano.App.Api.csproj | 5 ++ Nano.App.Api/README.md | 57 +++++++++++++++---- 7 files changed, 100 insertions(+), 13 deletions(-) create mode 100644 Nano.App.Api/Config/MetricsOptions.cs diff --git a/Nano.App.Api/Config/ApiOptions.cs b/Nano.App.Api/Config/ApiOptions.cs index 86510431..ae58f525 100644 --- a/Nano.App.Api/Config/ApiOptions.cs +++ b/Nano.App.Api/Config/ApiOptions.cs @@ -56,6 +56,11 @@ public class ApiOptions : BaseAppOptions /// public virtual HealthCheckOptions? HealthCheck { get; set; } + /// + /// Metrics configuration options. + /// + public virtual MetricsOptions? Metrics { get; set; } + /// /// API documentation options. /// diff --git a/Nano.App.Api/Config/MetricsOptions.cs b/Nano.App.Api/Config/MetricsOptions.cs new file mode 100644 index 00000000..7bf3fc3a --- /dev/null +++ b/Nano.App.Api/Config/MetricsOptions.cs @@ -0,0 +1,6 @@ +namespace Nano.App.Api.Config; + +/// +/// Options for configuring metrics behavior. +/// +public class MetricsOptions; \ No newline at end of file diff --git a/Nano.App.Api/Extensions/ApplicationBuilderExtensions.cs b/Nano.App.Api/Extensions/ApplicationBuilderExtensions.cs index 568ba7d1..97871a7e 100644 --- a/Nano.App.Api/Extensions/ApplicationBuilderExtensions.cs +++ b/Nano.App.Api/Extensions/ApplicationBuilderExtensions.cs @@ -678,4 +678,19 @@ internal static IApplicationBuilder UseNanoHealthChecks(this IApplicationBuilder return applicationBuilder; } + + internal static IApplicationBuilder UseNanoMetrics(this IApplicationBuilder applicationBuilder, MetricsOptions? options = null) + { + ArgumentNullException.ThrowIfNull(applicationBuilder); + + if (options == null) + { + return applicationBuilder; + } + + applicationBuilder + .UseOpenTelemetryPrometheusScrapingEndpoint(); + + return applicationBuilder; + } } \ No newline at end of file diff --git a/Nano.App.Api/Extensions/ServiceCollectionExtensions.cs b/Nano.App.Api/Extensions/ServiceCollectionExtensions.cs index 767fdbdd..b8fa529a 100644 --- a/Nano.App.Api/Extensions/ServiceCollectionExtensions.cs +++ b/Nano.App.Api/Extensions/ServiceCollectionExtensions.cs @@ -29,6 +29,7 @@ using System; using System.Linq; using System.Text.Json.Serialization; +using OpenTelemetry.Metrics; using Vivet.AspNetCore.RequestTimeZone.Enums; using Vivet.AspNetCore.RequestTimeZone.Extensions; using Vivet.AspNetCore.RequestTimeZone.Providers; @@ -65,8 +66,9 @@ internal static IServiceCollection ConfigureNanoApiServices(this IServiceCollect .AddNanoFormOptions(options.Hosting.MultipartLimits) .AddNanoHttpsRedirection(options.Hosting.Http, options.Hosting.Https) .AddNanoMvc() + .AddNanoMetrics() .AddNanoDocumentation(options.Documentation) - .AddNanoSelfHealthChecking() + .AddNanoStartupHealthCheck() .AddHttpContextAccessor(); return services; @@ -460,6 +462,24 @@ internal static IServiceCollection AddNanoMvc(this IServiceCollection services) return services; } + internal static IServiceCollection AddNanoMetrics(this IServiceCollection services) + { + ArgumentNullException.ThrowIfNull(services); + + services + .AddOpenTelemetry() + .WithMetrics(metrics => + { + metrics + .AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddRuntimeInstrumentation() + .AddPrometheusExporter(); + }); + + return services; + } + internal static IServiceCollection AddNanoDocumentation(this IServiceCollection services, DocumentationOptions? options = null) { ArgumentNullException.ThrowIfNull(services); @@ -490,7 +510,7 @@ internal static IServiceCollection AddNanoDocumentation(this IServiceCollection return services; } - internal static IServiceCollection AddNanoSelfHealthChecking(this IServiceCollection services) + internal static IServiceCollection AddNanoStartupHealthCheck(this IServiceCollection services) { ArgumentNullException.ThrowIfNull(services); diff --git a/Nano.App.Api/Extensions/WebApplicationExtensions.cs b/Nano.App.Api/Extensions/WebApplicationExtensions.cs index 8d807897..96e678f2 100644 --- a/Nano.App.Api/Extensions/WebApplicationExtensions.cs +++ b/Nano.App.Api/Extensions/WebApplicationExtensions.cs @@ -29,6 +29,7 @@ internal static WebApplication ConfigureNanoApiApplication(this WebApplication w .UseStaticFiles() .UseCookiePolicy() .UseRouting() + .UseNanoMetrics(options.Metrics) .UseNanoHttpCorsPolicy(options.HttpPolicyHeaders.Cors) .UseAuthentication() .UseAuthorization() diff --git a/Nano.App.Api/Nano.App.Api.csproj b/Nano.App.Api/Nano.App.Api.csproj index 6144bd29..f727910f 100644 --- a/Nano.App.Api/Nano.App.Api.csproj +++ b/Nano.App.Api/Nano.App.Api.csproj @@ -6,6 +6,11 @@ + + + + + diff --git a/Nano.App.Api/README.md b/Nano.App.Api/README.md index f5e5bcb0..8997b365 100644 --- a/Nano.App.Api/README.md +++ b/Nano.App.Api/README.md @@ -37,6 +37,7 @@ * **[Versioning](#versioning)** * **[Documentation](#documentation)** * **[Health Checks](#health-checks)** + * **[Metrics (OpenTelemetry)](#opentelemetry-metrics)** * **[Virus Scan](#virus-scan)** * **[Content Negotiation](#content-negotiation)** * **[Request Tracing](#request-tracing)** @@ -112,7 +113,7 @@ These variables are required and must be configured for the system to function c ## Configuration The `App` section in the configuration defines behavior related to the application. -| Setting | Type | Default | Description | +| Setting | Type | Default | Description | | ------------------------- | ---------- | ---------- | ----------------------------------------------------------------------------------------------------------- | | `Version` | string | 1.0.0.0 | Application version identifier. | | `ShutdownTimeout` | int | 10 | Number of seconds to wait after a SIGTERM signal before shutting down. | @@ -124,7 +125,8 @@ The `App` section in the configuration defines behavior related to the applicati | `TimeZone` | object | null | Timezone configuration options. See **[TimeZone](#timezone)**. | | `Localization` | object | null | Localization configuration options. See **[Localization](#localization)**. | | `Documentation` | object | null | API documentation options (Swagger). See **[Documentation](#documentation)**. | -| `HealthCheck` | object | null | Health-check configuration options. See **[health Check](#health-check)**. | +| `HealthCheck` | object | null | Health-check configuration options. See **[Health Check](#health-check)**. | +| `Metrics` | object | null | OpenTelemetry metrics configuration options. See **[Metrics](#opentelemetry-metrics)**. | | `VirusScan` | object | null | Virus scanning options. See **[Virus Scan](#virus-scan)**. | | `ErrorHandling` | object | default | Error handling configuration options. See **[Error Handling](#error-handling)**. | | `Authentication` | object | default | Authentication configuration options. See **[Authentication](#authentication)**. | @@ -1321,6 +1323,15 @@ Try it out yourself using the **[Api.Documentation](https://github.com/Nano-Core ## Health Checks When health checks are enabled in the configuration, a `/healthz` endpoint is exposed. +There are no configuration options required for health checks. You can simply enable health-checks by adding an empty configuration object as shown below. + +```json +"App": { + "HealthCheck": { + } +} +``` + A _self_ startup health check is performed to await the completion of all pending startup tasks before the application is reported as ready. As additional Nano providers and services are added to the application, they will automatically appear in the health checks and report their status, if configured with health-check enabled. @@ -1344,15 +1355,6 @@ Dependencies between services are represented as a tree of health checks. If any to the configured rules, affecting the overall health status of the application. This makes it easy to monitor the health of all components and dependencies in a consistent and centralized way. -There are no configuration options required for health checks. You can simply enable health-checks by adding an empty configuration object as shown below. - -```json -"App": { - "HealthCheck": { - } -} -``` - It is also possible to add health checks for custom services. Simply register the health check during application startup in `ConfigureServices(...)`, and it will run alongside the built-in health checks provided by Nano. @@ -1363,6 +1365,39 @@ Try it out yourself using the **[Api.HealthChecks](https://github.com/Nano-Core/ > πŸ’‘ Health Checks can also serve as an availability check mechanism. The health check example also demonstrates how to configure availability monitoring using _Azure Application Insights_. +## Metrics (OpenTelemetry) +When health checks are enabled in the configuration, a `/metrics` endpoint is exposed. + +The endpoint provides Prometheus-compatible metrics collected through OpenTelemetry, including ASP.NET Core request metrics, HTTP client metrics, and .NET runtime +metrics. These metrics can be scraped by Azure Managed Prometheus and visualized in Grafana dashboards. + +There are no configuration options required for metrics. You can simply enable metrics by adding an empty configuration object as shown below. + +```json +"App": { + "Metrics": { + } +} +``` + +A Kubernetes `ServiceMonitor` is required to configure Prometheus scraping for the application metrics endpoint. + +```yaml +apiVersion: azmonitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: %SERVICE_NAME%-monitor + namespace: %KUBERNETES_NAMESPACE% +spec: + selector: + matchLabels: + app.kubernetes.io/name: %SERVICE_NAME% + endpoints: + - port: http + path: /metrics + interval: 1m +``` + ## Virus Scan Nano provides built-in virus scanning through a connected `ClamAV` service. From 48a550b4081027f8e06771601fe98c27eeecce39 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 11:24:00 +0200 Subject: [PATCH 04/16] Updated --- .assets/Nano-Application -Architecture.jpg | Bin 0 -> 35441 bytes README.md | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 .assets/Nano-Application -Architecture.jpg diff --git a/.assets/Nano-Application -Architecture.jpg b/.assets/Nano-Application -Architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d71ff3efd40eafe12afd44a13be1a3f1138ff13f GIT binary patch literal 35441 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 3372ac8c..84e466d2 100644 --- a/README.md +++ b/README.md @@ -131,9 +131,11 @@ Nano supports multiple distributed architecture styles, depending on the complex | Architecture | Description | | ------------------------------------------------ | -------------------------------------------------------------------------------- | | Solo Application | A single, independent application. | -| Microservice Orchestration (Top-down) | API-driven orchestration where a central API coordinates downstream services. | +| Microservice Orchestration (Top-Down) | API-driven orchestration where a central API coordinates downstream services. | | Microservice Orchestration (Service-to-Service) | Decentralized communication where services interact directly with each other. | +![Nano Application Architecture](https://raw.githubusercontent.com/Nano-Core/Nano.Library/10.0.0-rc7/.assets/Nano-Application-Architecture.jpg) + ## βš™οΈ Required Tools Before getting started, make sure you have the following tools installed and configured. From 4790eddb2156153830f67d7db81dbbe194ce1d76 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 11:26:06 +0200 Subject: [PATCH 05/16] Updated --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 84e466d2..1a856703 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ Nano supports multiple distributed architecture styles, depending on the complex | Microservice Orchestration (Top-Down) | API-driven orchestration where a central API coordinates downstream services. | | Microservice Orchestration (Service-to-Service) | Decentralized communication where services interact directly with each other. | -![Nano Application Architecture](https://raw.githubusercontent.com/Nano-Core/Nano.Library/10.0.0-rc7/.assets/Nano-Application-Architecture.jpg) +![Nano Application Architecture](https://raw.githubusercontent.com/Nano-Core/Nano.Library/tree/10.0.0-rc7/.assets/Nano-Application-Architecture.jpg) ## βš™οΈ Required Tools Before getting started, make sure you have the following tools installed and configured. From 7b30aeacb31ed0f712d63f1402c258383fff7498 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 11:28:05 +0200 Subject: [PATCH 06/16] Updated --- ...ecture.jpg => Nano-Application-Architecture.jpg} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename .assets/{Nano-Application -Architecture.jpg => Nano-Application-Architecture.jpg} (100%) diff --git a/.assets/Nano-Application -Architecture.jpg b/.assets/Nano-Application-Architecture.jpg similarity index 100% rename from .assets/Nano-Application -Architecture.jpg rename to .assets/Nano-Application-Architecture.jpg From b47310834dedc876c4bb2084827fa08734a7c890 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 11:32:58 +0200 Subject: [PATCH 07/16] Updated --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1a856703..99118619 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ Nano supports multiple distributed architecture styles, depending on the complex | Microservice Orchestration (Top-Down) | API-driven orchestration where a central API coordinates downstream services. | | Microservice Orchestration (Service-to-Service) | Decentralized communication where services interact directly with each other. | -![Nano Application Architecture](https://raw.githubusercontent.com/Nano-Core/Nano.Library/tree/10.0.0-rc7/.assets/Nano-Application-Architecture.jpg) +![Nano Application Architecture](https://raw.githubusercontent.com/Nano-Core/Nano.Library/refs/heads/10.0.0-rc7/.assets/Nano-Application-Architecture.jpg) ## βš™οΈ Required Tools Before getting started, make sure you have the following tools installed and configured. From 60bdde82142059ed712b4cf4c53d9019ff8e7f25 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 11:34:41 +0200 Subject: [PATCH 08/16] Updated --- .assets/Nano-Application-Architecture.jpg | Bin 35441 -> 62169 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.assets/Nano-Application-Architecture.jpg b/.assets/Nano-Application-Architecture.jpg index d71ff3efd40eafe12afd44a13be1a3f1138ff13f..7eb73f18d6703c47291e6d75da7de7911c12f950 100644 GIT binary patch literal 62169 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

x=!|d&9e|uuKr}A{)v^V{E4P4@8UzTH6ISe zdYXMya@lWw;}yiC4+(}0o7inq`K~NMBe3t9fsB9KR^WjRa@~%pR#N6SCCULOV%LD) zauJb7@e~ir{APg2?cDJ*uGZI7E$msWpjB++Ltd=TXpUrakI6UddIvbF!H=IU4-oUE zCqI|M3Ho4;DB}A!5qRLS0I>M>N_&2x^cp~c=J3ZurAxp|XF>cjeAJt#pOS-P$5W)h zEwB~=W`g{iy}*@rU{RCqNKnawhXDu{w%(vGbCb0mENHf~w*nMg493*>Aw3237zHBf zJ*C=k+kdZKmp3M2P;6lmY*4}TfMsovpObhGB&6+Bu{*z2#XV3XK*z}E^}XX0?lY__ z`467X?@j;YuX~@ep_S5Dng!ll|J}ri6=-j?D%L;=u`I7Tu_j%Weel9=P^kuBU+@RG z%#LzK#dtVy8I7`Ps9UDQL$q$y&W^oFZW?8$!@fy8_^A2G0h2h}1eb|zRhi&IXW|kX zMckZsW_#23+WOsHd&Wwwo0nIwnO($Qf2LbZ-EgakMq_MyU*fz5XAfM4h5IUB7r`Hl z-Q$K&q2j)$6T{mCzBS`lFYl}}eH5+8 zM$=iNa6XOhR8=ZMSFP$^HJpgKOT|^XSsE4;qxFqr>Qa$vG;xw*#6F5;!O|^#nsu^y zUImirdXHIT4q% zjyw+V$&uJ}erzoHF=zN$UgSoviT6&VlTFqp*-;L%?at-r);No|sGpNAJ5`8}wyA5M zfB51uNs7H6xygW;UJT8!5(!LXphfR!Lqs0)&QQYVrw*7W$z9=uT;(+}=2-cXTLqVL zcc?#*5E)+*JAc4Oi(imsUHVM^Kv)bMFD8fAWME^YyVIm?@Qx`%CK zK+Yy6*&LW$fSgiF=HHB#nR)~Gyg>mw} zMzgLxcaD0maSwk=D+Nw8IJg@TDdR%8*(YYlz$S|z1-oxK{uzT!=w`&-?ZD>+#pXN^ z(tae3q+A&HU3xk~rg`q_E**zUy_m*l1#k0;+nKjaY*Q_-JNFnFW8L1q^vu8^N8 zoDX6QGO0)gJ-bFvtWigIN1!TwJU@JkI~$)eLR83U%Hg;@cth1H3_g*13xR!y+9ng` z`0+RK67gj}bP=*b^en3rzZAI{3u8J@RBU>v_ei+f@wly1LLcVbDyciU%*guC+%Gag zad8#c;sO2W>@Qn;E+I$5Hr`$>cVktr^G$ud5tGC8Mi2`$VWcrn&q`dqw4kMg-43Va#+X~3_;zCttZy{syUuUnaY}*#RC9KVJ#hQ~s)gA07 zoF}E5i1n}}{=CN$WNUBF;bbS=tw4jcp{!4(>+d`e9~jtW!ZU^g1ykaWYE82$n~eIB z#rOX(-mH62numOhb4?KTPz|>Kq5Fk0LtS=Rfv1kxNaV{x2rL7CR)vi_a5s~JNVG+h zir?e>xMkmBQqA5pi&a^t5j*iymq`-%G4B?5rpRSl68i6#&enj??rCw4HRqn$&(c|Y zQx-sywH9~LcM0#DdR2dWhzC&*D6Cz48jTbQ!>!rJ+F+WTF+mdlx}j|pHMONqa;}|1 zt%k)wAw_04E{jqz$>QC^PH)t1C95>(Pe*sqT1*X@-VB2j$}N==p-Y!t)<+*N@Qks| z){YDf-(2FTDfno*qjV=dzY0W*!GS}iJHGWGS7>JZuE~3hUaOnH>u~Fw1BxG(WcrR5 zCSokXDr<;9-DEv6cywV|c*KnIJJqAvdEeAW5gYznt~V-U4o8+9z+{R693cQZ5U#^~ z-cQa|l*0lg3e-`YkiMIb?G=+F;tQ%1MzNlyA_s=sHsbK)oD(gH05!2lE8q%13i7ezzl+Z;7(2yQ8aMfnLq{lba|aP>rM%8OisfJ;)m{)Yz$+shvX0e z%T`N9O8aW%6RL7EO&&^`m45PbQ0b2Fz0>IWa_D+s&C~Ii##plg=YYi9da1EyvrfY{ z_lat7*{4CA$ZN{jN&F{ks{bxaLLrE6y$;q?j;eYH;yBB#seUfh>f#(vTB-d1tyO@o z*Zco3Y$ZuKoO9278OZeHbp>RR2`s00!#yBqrCT;EC6>V}H0qTr1KcxS*}M8V zd#%agUH!tM`5kAsHFedF9O3k2QSS|L*UFaqW$^Z@fKr%G#&d7rR!yXph+QkW-8ubx zec z#|D6egV0*`X0WE|PziF8)>N}GH=6Q1r3d8Ma@o;WJR3JfQm?)~EB^xhe&gbmi)Moa zumDx=m=1q2W}%?;2x&a=I-nAt-R-qN1o?y8s3^b@nKZb5aWM!C8va5C7q0Wbu3xVM zAzM=190&DaB%>lKi{tNJ96yQq8Xp(VyfOisbu)y><)j5Mw%L4&zaLxF5apMm&oOH` z@v{Wpp`rtYsUy~2hU%)GufBdbI+Z59YjT{>5dV)n73h^d5hj=t0GO6qkE+8i74yeo zr@F#?M$!f3Wk!@OXML|;+=4X7T^n#-dSlzBYXUHlY(s(O{?NF`^m+03Y9BuxfMymF z*tNwa_ffAcQ#x6i#~fl|$$Sr5#^IJ_5z4HB-aWZij_Va?sxDC(m(q?|Nq!&6*z-9d z*lCsra8xo-5jU-jkfv?$G&w>jerEC97(HcpJNFd6ZzEU`f*-NZ|1(G4G>jjIm9^kS z!I3C5IkQj<>In45by50&tuZy=FISK}3x3M}@4Smf4*7U2{4RUA<1Km&*A7;f%+f*5 z7l`(Zkd87fRrRa>F$Ma%zJ-+*KW_u+{E~QUPa0c@WkISU&@DZJi+t166GB6~Z*DLe zf3v1mG(8t_)Da@+`KMPEJ(p4Z_Em$w%BuJtwCNP)voq{cGry0eJBLr5L~b-t%{crr z3hc&c(C$o;>K2|Jtkp{YG1zoH}K^HHOWK?h+ zVo6h78%gsRX~_n*Q~JNVBtBFv!qkd2Nx812MM9^%mt@PU0K?| z+2G|{#S*P|9hI3~$Y3eMWxhTh0L4=e*$dF?Co9s&m45gYobXu|H+as&XT1ZR{K0Op zHDiAO^fSfFBkkSwKYNsp$7!Ha40o0HX)StI=9Cs4*}N5om!aD2Fs zlE%XKV!1gCDtm=N<{U9&P2)jE9mL{7y2v;9t30rPYKtox$kh<908}G|>LE}^>lQlh z>|4FT>&16Nw-qs!E^FHqVJ^Zb56pDX;zqKya zjGPf!({`rV@w-ZgDI%!6Ns)US z5B3Bb;0W<&aklXe%;-e|UjQGy@-E7504q(6aHUx(086g`twbkKSTjmTZ?jhFl`K?Y zM?J@)zvGab)79O-Gt7T-JRT&EpSjMb(4}+nlxr%w)nPQCMYE`oB#dE)8Zi|eGW*s1YZP7wBMR3 z9(|Z082SRSaXWuJ_i<59$G)R&bM5jh4|1 z4vSi1r%-N&?Aq6>P(zZep;DImyHY1_Y0UTDKR>3Pt~F5TpS*X1>NjJxlysU9;@U!a z+Ks5)Vv2q#k)rojQgXy8UMV|sXR?n$yrbHfU9XO(d4=;TuXnu zjFA^GjGD+uBkj18*>#2q|C;{Do+l@_>AaLe*3%8t;j#wePK#FRTKsG^7OmO)+gu1Tz}dqeLl@aH4ug82o_?%^|7f{n z>P=suV9#=z#}gZ!!Zu&O5w*>@pOL^$)G!__ONc6iwrvLLt?VT*teVQw!_ zliOk+PFaAhW_{CoTj93h*C5F7ZXVDW?#^pqCpuL%u%tCeoUI8Z)mK;kc}vXCzjH9| z2Nq=-ICm(ctyN$>I{*~?f?e05f?-$nGLbs)%;V>R4YmsG4_REW`LGllA$&Fzch24D zy%-4fBzFM@?_~4;eH(Uv&~EFZ#*I5{zMH!DoyxgzG{)vg!tKI`=Du+a!%{u*Yza*& zshn_KZ!P`Pg2WBgjbC1$$-aNQ*=lXvWjWn!JJ4ZB2vGvKYT1Sxl*ttGfFCMiN&tA| z-FCF_1#rwwz;-6ZO>$6|3I8^xHkvC_GXtEC5Z_`F@u_PiJlFX3pD$ad!OF>sRA6iO zD0j2i-})G-ug&UT62vB115X{2+w^jZaZOnEerb9E{3)9TtlbiOXAFCt6up2=q2ESs z&vt%{VqY7LK)qq7ZV0Ji#v)x*0uSQeYgy95wti`lW@{jN`xAe@%C&Dw6AojklmL9s zI{;nx3#jz~TPu9GOuM^6TE~z^y2ccGQ|xs%W6-tbcJjEU;Fa;afi=2(K%JsbEi{e= zXtMW9fo-*+Bq4wamg`az4u^IfK*&(9{_`&HO!ejcv+sdN4QUc`cuA9OtEv{ z<@NFK_YP5>(F8xXN_1NddSkH0jJ->oz`kbD5d#90{S@FrHh$~`^`0WFA3OaU*7?>$ zLAJnYIWV__$_Fh*6KJ&zc#8EFe|6LPqm~RQV=XwKAiKY6@Nd2)<>&oA30qXUj`$s) z!WNXbSQ$?9itpmbrGiL;T>=b zawKUyz2^ixwJb3Cw#<2X-X^eBG@U}dK&-~k80u-m)b}6_-nSC}r#th8a!s?z;P}h- zR!9bGO=fS;V9g;=8>yeU*vI@n&^qN9G{ZU1JK5b%pbn0CvCRE%RV@VKRuQ#^Rj7E( z2)b1TsC519ZWmjAFRiP*XNwO#=qy%PJLC$i&z}b2#}>B8W~lXI*JBY&nQe1i=z$k% zH5Hsnjfqm^9qC4FahcH^p@t|Da&Ze~eo6EnZV_dzV_gCk9hN}h`E}UNcSnl^%(v$Ysk7c-t1)c z;>Mg_*w+IO&4+4*Kj}D7Q^_w^tEGEEjj$;u|AlBc7XuyL(&kLzkQ3nUo>k!Gz5xd>>yj0^4oD7OTImzGC8B7I^<(wXZga0F25@P_;Eh z0p8XOl&deCeoMZmyjW!Xqun$9O- zv(@nts1jH(pSC4cwZU4qql{M2>4Fql@ZO_Z71%Y@D55TCQJ$X`I5Rz(yij{1ejx9QnnXIM!Jh1-l*SD=rc>1`R z7}!T50D$kZEI1Umcnvp5yZ*YgZdUTey(KvexP_GhKpuPmF59i{fovWe2k|5SEcV8I z3RYwHyPdZ0wz}Tp^)0&n!Fn4ceX-50>+(vMc=m3~D#CP)4H(A-64fq#Y>p)#Xv}#? z+~sdwgNg@v))DB5$>Pb*JBAyBUx&vHvrP)kTB2WBjmeY;MZd%MfYQvN)8UPJ?JkaT6!Mj|zB^Ee{(Y|KN&P3ws+?Pw-98=O=e^7QTcYIuVeZZ2q3qwk zVUmy}Np@2yWJ$6WGD#9Dp|YDwg(L}~#+;$Z)`UtaCLu{oLQ*nhYr)v}WyX-588S|@ zoY(!)wS2GdbzS#!e}DJ$d!ER&xA>VEh4Tl#7@C|pB)ye3P#FECVZ*;z zjs5{p4hK#WUJGyt_{!xHU`_7s%6%IkAHtFmIhMdQ@J6#-bwlE>1x*(Md*uw&8<_tcW4cy_Ypd&G--LJj@gbWbZ**%5}L(xE)?;1~8QO zjXEpg*;`%*ZLs-FpRvumF=4(bq4gs!4(S7X1M0bg>I!0F{TR*;{S4E}_bqUSUdJ?- z7=Lo2O>&hn`f?0m$13ef%>9SNT+$`dk`}&;jZ|}eK~8_?J>I!{cg|itzeoLwmr9Kk zsE5-6)zrrh3S7|oPiyoX!ScTH%m05)rUCVpo$b)y;SDzDA2QFuL*+;--E!%)qQ_cC z9f#wyD*e`5uWY@Us4u-n)J<(caycI}eElT4SpU;wYbn^-n%>dw#j}KLt!oexET&PmnyrzI2Q7MMq zl2{)+P>zEj;D9{&Q+TZrwjl%^$;HoE^He zk4fyoz>)rSA)w6u*MWB?BAq1q!CZ0|v4WX08XGXpQ}^QVsbVWH>8{r+hncj2q)N-q zccD(^Bk3#C{12@<;yKy;>Kb=KMQ|gvg71d0J0=}^?ZH{k_=V?EzuqCNe)d@OORu*! z{VuW3wW9gftkVFWsmoaUYIINljvkG7yo+jKNUtPZ)Te7c?YIk_V1p z?N1QA&Kt_H`WTPPQ|sb5_U!d)_Br`w*nV1>WBR8d>XInkWO?^g{ZHvJqa+Uwfb{+MXbv&0&@=3q| zIs>TAkgTi(zlbs;`6>>l6j~CSAiNMv1#cFp5-OIEqT&yGq7h@wP8)#c6@)A z_U%)Nr1s~Q25pxDuSX9HeCr8~$!+I2pIAlsnll+4@fjVYUuWZLtI;+*Ye|Rn=Y9U` zVnQbq;KGWaVNWAz3{O>qh|JypSwEW&@r~1`HKn3q_U7F^oUtXF4U{EIwlP zWN%)>hmD>aa(Nu*;xbSbxck#+dXRo3C?y=c;il76wvD10l_t}Q+X0s&)*FJeF(o@L zwdj*SQwn%TuArXp+@+OLK>vn_jKRfpkD;~rA@XWc)DLShPkrH_?7^Oahu@16t{L17 z-cpP+f+_`!^>M(S+MvntV60&8XV}N+9*g#S;WnUc_)_Kg(K7yHJkw!T6T6U8U{yc8 z9ljHqqlb6mK1b6pF5*!STCqwNv&@Kwf0JPUI;I{x*PC`(ORz1W^PU8~KmW8N z*|swE&8~$?BO3ZEFsLZ^Zld7r*%dBO(?TXRemwAt?ccQoO&qprJpzpw&iJvp^k(9nkF~5XfC3+ydT(s?+;WDu3`LEb|my0$4}Il%dIe z@DT|0!^!vO?uR-*1xkJ$2RJOw5rKqm-8O>F+J~}&Ds_83YE%xf2YrhH`Aj(Jl{}wW z0VL{GAHX##?Ac%a_^dM5iETdzgyc$KQYU6fa-kleYAP`uzEPxMmsa#-BZ|ARc#=w- zY94DQZINWJtwXRnz^THI=cvfYN23|kY%s&B&@IPHCgboABAS~Cc}hVZ_?2A~il%L4 zM{+N)?in0R%5<`pFDhBQGI}PY<;?C%-g1vkeoiE9bG1uXX{H6}x!-RiU|N9s<4s6* z)of3KW|{Jki1m>5Enh^K6ghHe)~-4wzU-}M{;tHlK9A3*{KI)a8_D#xfir`SG%&vv z5PxlUNI(2l5qjMyTk}}5{Vkv3b!9uFzf@6J$H)6zMo$G;@lT#U{R_{H9ArcG{sL)0 zix3(mAi$MD)AQYdD^8AMNX4%mXT`tG&6rSjQ0+Op{iUe@GhBS$=+dY+zuc3n<43`{ z@YLkJpn(2Be`2ghFDh4WrReLYY`KuIcj1*~`lEqOK`O_tSnm_rYZ#@~0-bSynvAP{ z;o$|iaW!VjP?RMA#4#*_f=`N8q2kk4!|fiS=x~lJmAtX)dA$a4Ym2VnOh?Pn^s_2Q z*BUCcx2Ao3@n%L+O=M#=3Z}p2_$2ZDAdc1{Yj?zN;bw8J-p-Lxbbh&INBfC7p4CXC zho`PX_xUNX7V$ z1?3n8t&SkIa6Gpjm{5NOvpfW9s8rAB6tD>glHl$&-0B*P~o$7pnQsNIx-0fZ3uX@hU-A_IQm*@!hsY_)wGGtvF@ zeAna?F&DV(@a491PEKES*||&-La`vG;5W7;zRytXM5=N)V;pp!XFukhA|et1 z-?-+5TLn(nNd(qg0he&N}L zD*>gglV79yWX8(V^1D<5e zC$<$Y zCBWEYEO$m`@7#BiIf;@!NIxvbUfE@l9ek(C%%GtoW$`XIJ}y>fl;;TxxxZBVrAUUk z>q(Ck+;}Y3CBNs%?s~b`)7t}$!Nv@K1$_?sgGNI+5x`Nge`nDs1o*{a)P?&ea?QcN zach3Gi~BE;Z4k;=qu}>F%3N#=@{B~eU59>sK8dh|JYMRYo21(zmT#j$di5643nIKl zlk?Cm3A}5C41T;OeZpm*mpvcqcTmM>b%edXMP`3-xT(fm#rN)QJ_%(Xj@Gz$iN~dk z``V?8H)F)G;@k{QAQc_UR2(t~_(i(APq~NS3KGq*Yu~yl+^&tA-uNh|I%0awjdMX- zeNPv2-By7~>4Qb<6sv^LOUmp*F^kNQxBioR&Pa%1&cyldN09P53(*Xj#>qxka@meuLcwiF*}vL%~0vb9sO zVBvY@!?yfwIG}PWs|jVxT#pVbT6pp$X0JTGifYdRikUx}F8YZae-&BNcBVB@M{l`K>QUoOClOxcSbn|MNnj%(qRXkLMtR{8j>lj)~ zxLml};?!Vt_}hb9P>9Tj?W>*hPT}G0+a5pWULaQ)YqqavNo}Fegvs`9?{KqNZLWUB zT`T0_8EoT*?HQ>8S_`gH#02A=U^bnLfI?$Bx#DASvJ-C7jJ)Bb;?AgI;(CYiPc4F^ zk)ohP+;@upY1AHCUZ^77kfs#H-p|LK&ngyEA1+h>1Gu*6MRMgy0s<2zHAZmt@ z2$@sYxn%zZRqVmJAA+8|34JYp3-<6vpb~0>Ws#~$PVSv3cGaGA&Uxrar;!VqUHiz^ z6{`F83s2dFogv2UEpN>aorzfjd{naxs9JQ@I3k-|CDR#;)uaYJu*siP*wA!_v8wbU ztZ=~3(cmrIU-yf zhu^Q*y+cw;>&C8Yw*H5b4N(`wQq)G`1(4OzJ`B~yUK_eVmG%1I$pc6QzFOwiLRyy3 zrS|~`&ExN?6LjkHWapl&E0vRJWtaob;i~shu>oB=gz4(0X=Aegi;0f%0}nc}GvM)g!~tet z!Q>&Jm0wJ@lPGTpb8bdY3YN;2S=yC$UW61kPg4U!25GMei+>W&ZwRm6(9> zZibVQZ*Hl}Am{6nWqDo`G$M%G2BM~&+0c06T)FL2(JVCOF*J7^%np%_;Yz8o8t99h z*c1I5bHh2|Lt zIk(?l3*x9X05}SWHG`vuFrU2hl&e_Ew~TB%*Q=B@Ei5_pv^qq=>5^*6CAcB8m2se0 zE;VnAwAhq>B3Y`UPHyK=QDXT>QTGyihzKj;tBD&qf^9{4iq&~@AXhd63mEK85G^}R{fMbESexoE@`P1fo8gfIN20|F z9*mzp9*plEisu!qc==SgEs$8af9IGa!jfybf5w8QTuya-Y14PhDu)pt#SxFHd61GF z8^?-_y8gW9n?!cFM)%ivgPQ#E)}5D41Sh)9>P|@DL&3h9ha>X549MYV;5_!u@+|D@ zAMC~MzcZf2P$#SI*doR+BDU3M$Js!h&;jq6leb^<+}Jm!zh}P$ zj)Gz_I-wt5Ah*rm395fG%y{hcaTTaJ9D3z4S1ibertyc!UmKm`1?C)$ZVhO{gaP~A z&SU(jUJt}tduWt+^_R|OXR|*ust$6=Bcl$C|PD-C> zF39ZrDvJXL{C7&U5kdg~F0tTt3sVadAl3UX)WUNl5NEXnkg7AcGbs%e@0AnNyOW_Z z(>A06eTKB8gO7rkD@%aW%DZ*`GjS(32B_l}W8lT=+BgV;;Y911V#YlX!#EHM9WzZh zQRb(Tfh;ao>lBpL4rUYT&ARx@q{kewV8S z438n@Df?$4sOtCqgVVx8n&KAr4x zzU#x4*oIa)@%D`Fe1A;U(*8*4lz>XSZJTBj1qKF8jM`hXdDS_lB!t zheh+;&j+Yo!dFAE!2$OnKouVgoJ;$Ge^btWHi{#!2x8?j6Z&n*c}y zvy)^xI-f@!3k3m||2860@5zLr|C;Z7ezDSeN%dcdyAM~HV$Fq)a3+@mVHH6*_gUKD z1shB=fwMjr6s*|O`IviK0z@~$Z@*c#*R&Pt7VtmXP*CgF@=+c2snu|2ul5h)r)@vF zbW@FoTE6Q(7#Nq?o4%o;l#=>Zp5d{Z zZ{>=R7ohJ7nxeQ916xl8>6?r^X@V#~Y4Yv{#w1dgKv?iGFEsfwyo-zoWm7aov4=|- z`T#V_2HSsmAT-<(@By|zT9&wpC*>p8+C^oa50g~)K zFpJ?Jwk2mReVQ1KwergA8&4*0t3IUne!E>nMB9m;Dw{VS&;;~)x!@S~z`t;QHy8u4 z8qMU5BnfcLrHwaztVPp){c|yazK_s@sw5QN?R34KvT*|U0{W%dP^a z*P_st8e|^WnitS(mAZpHH9sEfgS@o5TG_2Ks?m5QI3E~Zl$Q`-)zPmO=3R)-0XT*K zD7>bWjDKY!U-rB~p+TU~OvE1%3Zz)C^KuFy)S%a!M_)Yuz{|* zrl8qgpj`jFZ6tKw@(ZI(>=ST<(A;^H7&Ilm&Hv}Lkba$(w?u>G*e2x}W>vWgQjgQ4 zBhj?$!g#kE)Y)`UPmZ4Th|43~6AWV9;=nJCN% zMhVx>K*7%9D|Vh-xl*Cez73+A5hc6^R>EZJ5qF0VF;$0Kb<_7YRA&pXzqK`mk{#$; zm?*lK{e$b@0B~TLSL(r?Y8Ajf4F{qlEM8Qz7N!zM>*q%kmFxwSVSd9ueNP)y)rzdZFA>0$w%P`?ir-o^ zBu4-?msMeOHHLO3dn8EmuG6qdh!fal)D^cfJ76kuarf;zO@f=P@oQ=0jGe z(l^i$HMT-9>ivbiDUyX|)^Ol#)g)K;L~C*U^&wQWy5?z5oi5!_-)SxQoK`rl5W?vp&@$(duJi+s$JLU@`i=+*mt2r~7RNsuE~;Az<2gu9KO{+XZymAgrFvNroh#t{Q*N1i~?lH z0J}?oOaKPDhI`$nb!JOhL7VQE?2*c&*S z!2FQ~gva}THLe8#@2}d3D$fsK zPSakY`H1LbNkbT^(QFQMmuHF}>#}xxP|8@O zlAlY?!Fl_Iuc>tlj|iSn6%`BC z+f+G@L_gCWRE43RMBPTT81j(`&%M)hKC}fI-k$b3?P?NhrTF@U4c^uaYgX3T4bk_L zVh2}{JbZgg4#BaEd54d!oV}FCUb-4e1A~VX+0!YvHyw~ahPr>ev{Ej$sJztfUFaDP zki&T#FURnagHweb6vmLNEh^T4KP?r+)&Ntgw8s$FwA)DFWm=luIcM;|N{@$Sx`=?4} z0)f0aMy>}_e6P5A6`!w&TkgbahFY?)z5z|vxh@BaxY*o;h)&i&{J~!u^*_eGc@kUK z@%X5~@G~ag#B4m@vhN>w_z(O_`3&rvr@ag?n#uObc4O^0Fol5F5!gQmevJT(kP1?g z7>;b{S#gNtC?|G;s8|RNLr7E(7l+iiBU;MTPHxzypY{z~)CMDm)D!4-s4&u6vYgv}WyZ#4_ZWS7e1ZB}E3D=U4q(FYGr_2#l`J{^0aZ9LMIk()Ze!G1;=0y+2^4Ot zozNAb$>L5O0-fpGJ&(jJv-#k9@bGp0DF6k{L_xX=$>(I@A!S^E^=teYS3^W7o<4t= zQC$1{J)oOwcJrEU z;;^Q#m61~2GmN&!aPq)~Bxl8WD`aiLZaB|9Z9p2$lE4Y-_p>^u0f&GI+ca34nZ!6z z{(+KuwbiwCQ>4WfDy_HfM`tSWE2dg~AufQx_0j8|2kg+1%JG8%eFziRXo~!tw z^#>)C+qWHFs<>lv3OK+-DqDdT)(ny)Gm)ai#0? z?5gI=G1XhY-8BZJz056T^N5Untvcwh5~~od^<}!|8fXsz;E6f#7gpLJ#=RVKhGc}1 zCKa_#BgSDs@6NgI7Z<4t)>_ehFZCE*_F=)|)n6!N*>QvF2OF=w^a@IFl{I{|r0*=H zSJz|G;};QO{+4i=nKXkN40c8Y(`oV^h@hB1!?A^iNCs8_Yrdu5GQR52@qVVQ!MyLI zt2Dz33AhFFLQB=w%i5?`a4KpI*qzgF!7&kVz&hX&p=NY7gI+~V>2nT7G*{-|&AAK` z!$WsjJ-a&F7_`YHpy!%B6gp z=epM-s+i#a6mStgU;q}2IxZcAZU6XP?Zz{_k1=)Hqi+^C!Lv9R;HCk{30JcR^1?{& zO5kRv_PKwP!&_&CENtKwv15CzN-xYYh`w2A`?IqA6;EBZ81D2q2Wt3<)&-G*#S({3 z?MrxGd5f>*ovNz4twq1qL7$630A94}r8&wV^p^SQ)-4XU}UHp%E9hkkM=Xj{AyDCxY(w*~v`?l?xA z;{}Shlp~6`J0Q`qD}oiZIqIh#-x84CnX9&a{9Qs1N$(dPugSq^(i`7tp`pPjW2N`r zKK_-gdp$lCDuUZ&dBbL;PK{>kvVd4xxd+^o6+B5HRdDSn0}=H3imUG>tI$ycn;C~C zW0WPGQu{MC10wxNE4344`F1Nx)!+ass62wEJd+`DHcT?(QQ}xLs^*$tYuCrtk+tJG zHd|^!MuvsX4ph&M5?fpFK6dY}J1!d4gM>&;-~+6#hXz3gJUC!Lu^a}!zgw-sY@Jc) z2yF!Ih-92=Xvi6Ngd1}l#O__BJnZD4RxLNk4DDk)#7vyI2v^nGBYWD-X0moQ1eUlP z?>rGm~%6Xtb$0k2BVttsIknvtjL$@%?cE{j$eY)Q~m2ZFIUoFM)bJ zwg~p8shwymGnx-mJeaY23FUPfi41*e_#i!I0V{W>9tzJjx@v1 zI`LQ9j&L(=HwN!7P`6)Gs;(8s{cWzv9VVIF4-Ok4lla6 zcJg6}_&dOj2`>9Z;6v$fgBE2Xo{a{IS< z!OxbZnm4AQzJ&k70;IGLxPgkS=T3`6lkl78wVD)e*Fnyl`IhxgK|FG%5 z#3iY^nEA8GN^-3`9#({wyR4)Ev$4fzSGhOc`p$x8)cZ%}EzdVDs^8L2NQ&!h0o*Ag zBBT`{*72_nh0g+LyWbsg)v7(Jq1*Jsj%^KpfxfF`uGJa|N29L!a&#r*KyI1JJJgSQ z`!pLDtL>GVOM$3Td6X-WGdsI?9nzMjO_l-H{9u7OM^`x>J*GlhoU%`CHfJ6cMncVJ zOcuWW!qbS%H>0UJMqWUtnE}9g1`l7bmVugVpxG{>;WPZy6G;vW-xo0noIk1D(PvPV zZE!0R9=ojmQ1rGm9gtS=^E=#v%uwCCHJ27pr2?H`u!d~%0U!)B8QENZNg$a|a9@<2 zpWx7Sp<{RyJ)59*`-+Bxw568$+#6aH%{>KT9o9hBzr@I_#3L27phNO}-QzLbNk zuV;zn&cqxvC5bfWP`(A~)(5dIz#um_xksc@ab=U#ROL8`5@WeucJ~$KjtR8u)uHGI zyl0_1dN2^d& zswia6rXmz#n(?R)?1n6WGmq|rm^LFi_N69gJ5dU7E~5)w00sK-{u&%`CRFM`l-xnta%JEw z7`k7cn+Kmf^n-NEO{LwZjJV2^?(;6ZGEGm(@SJ*jluC8(TEQ*lz91aZ2IT#p*JF%t z5jb#iywSr{4yR7urLYa>Eo6cnm5gc8hg&BN~R z2(W565G;ORUa2s=w$>qCaq7cmqI&iwzWF)t(JHWO!1`9ws*OP`bFRtZ z;ru`hcl))8yycVzLXqyPaUJ8W^qaP|ri$5NI@``F-Zk0yXr;nXxi=h7<9ZB{@qq+! z7=Mg#qLX71vLpS4n^pXx9Vk(2jvTpSS9UjdHs^kvJJfpvR&A#g7KpUVONCy}vBEORhqBi2CfBQ$s>@_=A3G#XGcKODfi-DzVAo|2`En%4 z0L^!Hq6*1%zwk)m8VU4+B*}?#;f@&{`Tf7}&=ekf`RS;X`I+JMiu&$#jxiJ8-ra~88FB>f=huwcU4LeRFpk6&WNo< z653ag*^6i$OfZ+(N!F68p163a<(Hx~B z0&?)FXd*ymq{yK2H-uog-c=&j^DiFdRpvBD&V0lCn^XfQq8f@1j5E(yVKts%y zTM#6?K+`XmOkYKR&ou|~X1T5G=QiFsbB-!T0%|H8LUAOIfIR?Y{_5l!%nx-KOaXr@ z#L!&;k}o0>?M-5-fr*lOr$1wk0Tbz=fu z_#6mk?+Hy<5nV-I=Sia55cynP#|+xDiu7d06CE#}J48cuC0A{Wp{(^bN49L_<_|_N z9JQvYKOZ-D08Lp|4UYI8L*_GXff1U5lH-`TdVF$IYAOEUV_ENcEi~udZO_GgfkzvJ zw{X5@t5#+4;2do%CHL0IhSo^(s$})fY(K%KI44SnvgYWA_DH>az2-l`pqc-l zB(a1wHG^J%e3PQ_sJTdT7{olrIq_?5Hv#jHZDaq)^7=j7>-V1kJp2cZQ!mtU{*#W+ zO#=TlPunsH0_a!-OaNuh`XIzgvf7%h#F|B7?kqzs=qJ>|ZDC{eI)Qq?Wq@AMgR_LZ z>-ecywx$!(vP(ByqwjsuqMDD_8g<^(uFDxl9(lq3T-pM$1fs+V_}1Zt#VU;zi=~Yg zxoV$=)Xgk+D;wC31UV7yn!auS6u5Lg|JBt|L{OTcQ|M7)yh}fV9%nb?*jP1 z%m8x3f^(Mp%GfwKc4#AsK3SvJQxd&3#`$*M&xSzxDK~=Ta3{E)P^H|+S+F+Of;Vj6j4i!-$DCnb zvK<;aIIf60pG;0-PcNll;aQeoG6iJ^02;Xn(qVOiMh>(cAJ|$jL_JPgi#_&UG74*Y zeQ39mn5cop%+p9oJLI#2I4T~fInHjip;PF&O)wb&+-c8O&WRDUK)KPc+qN`|yu2l% ze{P96#U&501^79Kfuazo#Vn5f?YLm3clohvNBdg1&-NQHaT;IyyMd-fr?JMA`73CrpH3hGKKFiWPt@Js`g z>Rxga{X^tvxy|!U|C4Fk1SFRGro@wIM#Mkp+0=$v%Rz2SJ!C+i*7@l->Ib0-fd+7v zb#@z_pye5SqU;WzJ1r}*dlP6FKH=}R1Xf;G zP@`#v6Xs47X|h;O$Sa5vapjBTl+fv-yHUrVP~?IpG1AozuMTSkjN81Rq?D&+f4qNs z{CMWb?m;_x_fN?t2Yn8ssk1`P+=D7tlq*3^5i~TLsm4ln%#`L*cQ0;9ZcIXllC<6I zi|Pgj9TLX5N2C5-tO@{8-1HZ*TA2onAq`oAzsbA1sD=1W`6It?wcq6G{Bp(r%KPv) z54Of2M+p<YQ9u*nt9DvNP+YRHy1GK>?4D0y zoyCxYl82GxrO*bPKUDeoa2?Z|euvo@Xg`_M__azrrmp4rgzDT?{_v;$rMBqgRNNPx zhHGH%DLFs%@qj}32nYtkEVo?#I?ZeE_=0rPR%1xIwjQ@%*wE(UO2yEX75j}bX(#!kSN8bQ-!Gl3`m&qBz4VTUpf$OxTsEKuAI zgO6UG(CX!$!GvZ1n=C!Q)`*X0#N>7@tJqUOj9UT~d#`-Amx56fP7Z!PdA#}Ahe)aX zGpqC@Hx@b@l=T+gAL-Yw4#gVP=DbW?Lj|S)(HIA zBPV!Z;o1YNCDRnlzsqX7RbD3S>DImA288)$lD75#PDB5`&A~{ap9B4&#(Ky;@be;z z(GTm5YClhY8A>(=ieeiq@cY=d&2rXx59vMj(5)edaa{S!1kXNj+@M_Y?H~nfk4clZN?!N&WVExzJAKA`JBZIniHx^?X_Q zr}o!>w1r+y<@xhVG#5<)M&6tp_fG|Kz+N~2Em;w#Mu8@nNd~RMJ6=JR0Ac^1I$QH# z|8IIO@~jmkg2zbwcF|auvtR!_^%P2^xCOC{bZ2LdiLNTQTgJlo%#j_yu!7i1@0S7c z4P)mdfQ3U#fz$wYapEl1mn}67{ZNIY-=}~S8^JmNjs`ysGPQbuGw#GZ)*c+crEA3c zg9i1ZXEBkb9`_gTDJmMlxqZ6@?ULtl|Xk2W`+=yd^a} zb2ZZNfkEd)dv53<=juJr#2u1yzrMDZNG0{QQt>fm{=~73PS1BU7Ib%v zp}t94Z{UrfTpV5Ei*nW#1%R2ugB)QsDj^2DJqx~Jp6xxI5wgnLb>TGaPgw{bnF{-+>19$LRNcItmR?#3&uPtvo0U;4y~`03p;dr^HeP~W=6$AUvA!| zX0?vI_C}7;`41$1Tpwyp`DW~?ck~@ed4pE@Ch8Byx4u77FXPkKOv9dBj0+d)^O&iv zriY3IGZVnXjxjpp0$tJeFrJ~dkFl|o%J$K>Y#wdV5qKS@GijLM_vY*_y`?8{zOFCP zA6)7xAXqUIwF2^LK-X?eA%yEfB4a6SJ&gqZna3~63q9v%_Bh55c1MIa%nJ$#Wa+Qo zc=c>;V19mRHO|KBqQAc+d$1z`x!`778KyOCaMjYGAN z^x5{~fZ7mfY-L@BFj6Zzj(N<@?W1ZgN+R1)dw~8b!zKWq*LpN!8C0vuRy5WGSz6xq zUnTzW!yluGL4$?*oCmIoTqg1p%PXKq6pUB?!gB?~T}=W$r|!py)s6&&4XGkUXbK)R zhXHu&Z-2L?0D#mC~&{X>xfuFw;|~wZ{oUMSuf5Wg$U~RH_bZi z7jo}`KDSUTo3hwM?TkB_T!rbfuVxNz3>ds!Zp0{$AJSB)8&c6tJveFABJ;KOyV`a0 z;&7>F9{#fY*un>U6pOD~>bT``>*VB}9c6<+1}P@u8x<0{!0aJM2UZDlXm#&?V+Wl_tjG!M-#d;}zu$2@Y<{qx2Z_BU?tMG`6M&nQd4+ zZS?TmY0lcp!mzl`7%cGNhdaPgLl2_dv&Rs1x@*GQw)_QD$pr&l2C2k5TA!fg?EJzH z&s^LQQs>kOQprkaiZ9%Paj2M+LC_i_(;NqH8H5m;Azl1!@|$hGlVMGunZ;JKtvVO? zNv+Cht?D(0;~Ptc1Je}1H{AP=~@@14@@!3K{&?`_pdTee;;+4=h1{OZ)H%7P~QZfGSUV@CI-j7D;{ z`L2EBD;lK(U$ot;CmGYce}~q3Lv7V-E2{B!j%PL>G1+~|Rr>gq#m4k&tCwk?9|_{f^#k=_eS_2o0$oi6^_82IpUpo21dW2PwJd7@U=Ark`s_uxAl?B3ReboWDa&q5fQ(s58qOWVEc__uIstkZ^l-%# zdP><36zo{R+kkS$0Eaj+i#XAW2<`!e+ybXTIiDeZ6eCuRn$yY#+;cmuIYJ;Fm%#L! zggeF92e4jvisYwngX^I4ectxZ9j1z=_4+?qym0+`wMNjrV&#JJ(^Vh*I~n=fG~h12 zZjC3b(Jb2&2!&)?sb$qX$nwG$d6n3tHXnWT`D@9GVR4tc#qH#ykg!o_B_xm2#O_Ku z-fp}n*qz!L#gX>NdYg%Crsrq-`E5-5YR=kQ9i*Cn_7o1IvQzm^=JAtg`f<(hAd;|V z*(t19o|9*f&+tZVvmk2kWTNbHkoHYvidX2?!@10@@CU|Z)%&zmh8;~W z=|%6hm|icvG$}gU>w)*>J8#VVgA>1Oev+%od3oI3xG312xq^`$ZRG7uLq((4>4>g} zJ9>|`$hmqM2zNQ^-gz=JE}1yDM_l`ZxYFfSJJs@PlRkLJxtg85lTM;!53Yi!m~q^; zC`X1a_d#x`aVmc*;nsq1{Lww>pYK|nFObeSFp>r*RAW?8{pk7JHwonqLF7?7oOlMn1=U$EVLhzWUz~>v^~>%k zy55~#v}?O-f|a*FU$}PT(DAf(H=y!UX&=#6ZAOOAu}-g(DiQ70S5swPtMW4THfFsj zS|fDb>MrfeXWo5xEp7qLK$ z5lWrq#bR2@H0a+>wBZJr;$uhr^2dAoj0zkFgjSeKD~^cBO04O7(wS}g0Abt@(tL9j zIDL=#-jXEA$Wq5UeKQz3cH9R(J+76lr%Hw1^~zER9@_5lVe{|AVruA`90`yYRvqeX z_qv5+m$Q^|BDFSsYl)NmNM3REI=wH4ca@!1Qtgs;-pZ#ci`&j&Kh?0p}jiSmSyOV7gZiIA`(2WF{ z!C)t(gNY37Tdnc2uv+QKI&-a@mn?hE2F1#Otqiv)zpVa>0U=V8uE_bt6CY!oog0j; z9BpL!r=JLz8zMBGr5>$@;JQylc$?@Q+$nb=u<~V zGNPR%Wc4?0B0N;^Hn$ANO}@J~xwrX;z!aN(0!A^@UVlvfB-xXh=rw|6yV_fpw#E!pbEa@voCiEr#;#Kp)%Lij?OWuewc6Y3gVg z9(()VGvmzu`o$o-8JD>g)0M;*C49;PTLbg26~w$)x@w?Ox|>}m!L|Td>t(^CNJR;n z#Y?31GJ%^o@v$%HzYTI4_7kU+nMuGK6AUUL!Y)BS_%L-P)8Mpi(;GzI=_9vnfYa%7 z2LW~@1AoZ-Z|%6K=*~P`W!h=(J4AR%So#SdY}j6QH;YuXsdmU<%|hLUIVYwlto%um zTV}ilDx~?ylhnHKKZqpb!(X|DWmRkp=j8ut@5|$%T;Knd3K7}Yj6#Z#Ey*%Uk{n5! zvP~t~k|dcJp2{vvQ7K|7Bw3~svShO7$QD^+W=xVTGqxUP<~hH6ROi$==leP5^?iN+ z_s?7olZ*BgQnF+66bsK33mTBxR3uk1tUa z;)HlG-Of5$mVfKeEsvcQ9@lc#a>r$yC(5EL-_=n1RaK`-r+QL*{N4BGwb=HcdbMC8 zbzil~dOA$;or7W8*zOQDEHJX(v;apHOXw=g3+B+<73}T!W4_}WAL^&Uydp2bx6fY& zwvC1jgLo_cX!5zf9!(aX{M4H#*d7qo3${Cprr-D^jRI4Ygu56c;Cg>4L!U(lIA03DFN3C1oIyB1 zng~R3B+zV_XuaRK2v*=fx3km35uaC}DS0iL4?L}ijwI1dI3~43RyZ#(pwg>{#~{v_ zKn?z?KC-znRxiYz4= z;3!~^82>yw3zm^kO+C6K@j4!6CgQVnL9Ste)61A|%itW3xjZw>k{mc$&dw|kQrd5> zt36gmOW5-3>x{G8Coy-=l-bR9Jp$gzNB*eTQl4&q{zHdFHeJDNE|c?ZFiKNveCE1! zjdd_e=$IGvY+7?^K^b(B@==d^n5Ziaf-e95NNmB+Fr*3E@KCy9d5{Ci75fkNlf^&Z z<$;)b>rJ#hq@)|=wJl?q z`Ye_ae@)MCT(&9*Xf&-$qSG}+p%y;$B3{u(yQSaCJqEXeI1oNU1h`KPvlhgjl7IaL9l>yFQ0?rG{;$8 zNH7orex?OKi+q_Kj*l4-Lrv?z5J=D%WRI1Ao0IM5|kzJ4wo(TbQpZbCb+AuUy2ce}{8EgH01syI?PMhMqw10idip=IA z7KX?W;0-F#1qc|2v!IXkZ2CyfUApt?XL1v;Czpu_MV>8@QaX7}(6IB+6s|e<;u@t} z1dsE|ACH9CO@{D9jNV(d2X|gupW5(9jM7ou&VD@dp-%tl>A;g6mR-qg3DpM0p-it& z!PfNXSPXqP6ib@vt51_hIhtKW^rmWqZRp(>(ct$n+=^cYjN2eaw+2*KakPGoN7SAL zp1&4a?`nBBBg7I3MfSUbt zK3kvl655z1z|g^()yxGZ*C~4$EQ<-FXo*kQf=;+NO99X8ePVIiOVvAK?)g)=W4jvM zdd_GUsivMbI$(Kp%%!(c>wNYB-$&!nahJj3a2t&1R|Eq#6{@vaDN2AXS!lunkP?95 zSrmPrrs%O#(tNY}KnPSgaz~y9JiRDsIzZCOKvw}EY9Jo*37I2nN8xO$*>7Ar=*Si} zsTR>i#iWU;aL~tuvTEyr>=M6@@n1>V_*W_8nY$%94+M+3@;9#VY^o_(tFUxa9;ueO zu%pO%AuuQphY^5kT@>B_I4JtN=>9Zl4%L(k3`(em*Hn-t(5WaOCu;b486z|h9|jZ$ z$^S$vptQj9L7#c*SH^+dK9Z(Kz>8ygw_-lBgvK|p4$-qPVChVt2}F}YZ1I7&Ce|j~ z#h_1-_~LX9w$H9Fes_e_lP|LGQWoPF12mTd%IwNz_%_ri&BJ~PSgf(7k5(f&Hz79X zp}Y6oeyd1-l{IJg>Kw6anBMc`?D<<2?(%LCBZ{>+$0dxz>CJwADoB{u=CjuJodC~; zdJb3br5Mf2SeG=vzdM+tI%N5}VFL5uz|~kq$sUxN{>3f$91`UzY0A$;5L9kDP67DW z?(O<@rS?0{b@9f4kal??>AM1_t(W1N?#`MiRPPCcbhR&VKb4NtIGQ+`56 zA@zF3Wb=F9w0BP+%01`xQtWE5c|d7n(&|;-WOt;5>kfV(*OU@$t+c8idl-0sfR39D z62fH@2O%MX%?$kF%NS7X{0>zw(2Rrbz|Gzcbi+TuNiXSCS&%Z=PeshcrbUt!3sHsl z%`z+^r^n{t7i@Qw7;AmGkSL7f?g*~f1Z_i%p`T0&ptL!N|Ay8d>=uvXP|8=kr9upx zQPaWOz$i&n9)OY220;s88kr<9Kxw%D2qRztOk?I}NOUDs?-9)KHyowAm}~$SARMCy zh2{)czJa$Tnq}hK&Nk5i^_TuMMWCR70i*RB*R8Kski}exS10gX1LNxJB=bnUs6mT} zLd{EQy2V8d!Dv5Ulelx&YsJS;PidK5x+iZ9t-}-xU}3`PT%m=~1{zu`PZP$fL|?nI z_PPzRmt$y6YsR7^hG9}(AKCF}wZ|r{c?TDz9D&)7rBincWChNv4JxFICAZ~gNuby4 zI`6nv?LAHESl2VqcR>`IpwWZa1j&)SdB^+6O`7+YxF9>0=w)tX0K;cV(TpBXnYtmv zJTTmBH&>9@#Lh;PNngtC9-~-yZ5Jy|3ljoH;DA~90^*z*~{QvET(+t=&o%#b-vH1F*yXf1s-09n&6|6 zcs$8s&k2H`>?#D|Pyn;T?av*acTO}~8Bty0*65!xE0J1L9qWf#4pmEHWBql6nCF50 z98K)ig!P8!-j%cQ<;xlTRJ$6hkrVX(o4FM#t*6p9uHN~HG$Jv7yl#B$p*5CzLZW+_ z(T77vL$pKs(R3SpG={zxioRvC8qRdd^axqop}u^|{-~#|^K)O(OOADWtAe;Y?4lBj zZR3@#R`W@9q=Naf^)Z~`gT{nZQI*@{6O&og{9>Ih*Vk4Z8;FY zaw!1{=NGq`zuXz=R~KMg`Z5KPDy~U;2KYsZz=;yBtx%c;7q&~lS!B?C;hn|@CN{vx z4ODgQAyKd5EXOpFr9g-{@u>n1gEmJYx`+)3ea+jC9RGI@9zc%G(LZCGM|EQ6eBcvg zk-)~Uv(jW~`9vF^0Jaa^$X`GZ^oOsojK5ObUONo{pM(p2*s;@J{oiWO1b5tR}(>PT0$M8AA0w zmr9fBy!i)UM)@Sl zZPN2Q6EUO{cz16~d!^X$;@I{`!63hpzR#A)2Y-lrQ<4>m66_)c*)rj(NyJc%`a<5^(=aib1 z%;0e`E2Vg0s}ic6(#bR~A~?uLX#DZ{J*1~e(d$l!p5^@@{ya%xZo>M6N5y^c_3Tab zB$jL_^Y9VC$T(Yy5pM1Ax6#`r#$20E-&^j*XrSE(sFoC7N~*Mp z2E-KR|Dnj*tJ?1ENLQoxwiXd`+RRBRtKWm)vQBI-l z#q+QfI&0G}+_H=rkDqy{GZgir<;x8_3fS{;2z0t#@Va^@Kda=$g3i9dRq zmS8z%)7L&)*%j$mqc!u___~YrwKi8I$t%YnB+U7HCLI#6rgcI(GS>M zBF`C*pcm}cIG)PLj}x_al0VAHe`*L~kl2xvz-jzo&j&T)U(W<)#-elJxx@k(2#?DJ zu!Wh|?W_QauK_g-LviPUe;7E}fVmMi+Z6H|J#_)%Cyk$Z3(Y)J1qNU`Y3iC!JYfz! zMp!tTcFD*=?7pR(pYu&XtaBb6$U67}Ka)TF+ArE|8NZCDec;08wZJYy!r`>$;fLNz zm25T1sE4U3I{u*7U?IoWtu(CI0RFZxQS=NEg%4zols3Q2=-!g4m)DuODp6Op($Y+k ztA5i~`NA(2EC~|Ao5PrXCE1IwbMo0qM^Y&mkYH{8tfD;8{?cx@E5Ay~>*5Vl%WD-} z^0yMf!Ge4G{i5LZ*9%^rdtYPx_C(qiE?o6-C80^xt`R(IjWW}f z9MX-*!Vo=&+Rv_r_c|QG+2mP?ooVz}idj`I!X+rPIl#q8VmQ;L(*uh(Qq;`uN^tQt<}j!x_{T`PmKBP$?vk1Ir|v%Mjr6NKRuW} zb`W&7FfKPt(;;~3FVe<8N@Qw>TkluiNGpJVrl4AI*jlU82gospRY5K=klVP9%;{c^ zMk)9kdI6>-P$*3%xz4>{j;mr8+z`H_fP&wb18U3+X_G{)(j}~c{a!8fw7YhkCLf77 zsz}nhxk}_Tg1#*mz(w1duk#aK1oDjM(5D9_K`{GHti_;B#2F3mSt2he;`ge-W9@(# zwKevfG`~>YcjbgOg(xHxeLEYXpsGH?WBIHD^wZni!j04bgY(yC1Sk7meB5tuzx^aG z{ma=}{Y!xx4eHbw9?h0|Oal-)D;e^>6qKh@sR13^jVZf2yvw<%d0UM4E=a3q)+FaP zOlQyU!ezKfPh8tgd~*TxaoR1LxW$IO4UlX_q1Ak7pIHgbG_<1?qc={b*A6He3vieW z-v2uz0<|0cc;U^qCx`C0rD;1b(oNoRo&*Z{M+*E(Vf-8lv>H2D7WuC^n4|aV{3iZ0 ziU2siY8B~z)6+8l32$Fvw47eKkk1)P_Vtl_Eg8uA^lj zPoQsC!1a_ol^ySJl2oFIQea{QQNV6XoNz-wpCLUE?`YSE0*m!kkztVaq`f3cH!41D zEjtW-nxDJ^oABA4wVa{)zV@tZ++gw3mr)Wi0m^5!%M#zen7MyKVS%IdsGu0iBuk`) zrZUdQST|Nf5S?*SvuH05B6{k40_{xR9V@+cemdE@R`}|M-m!)?V;{7`11TYT3qS~$ zcfzSOA$X(y#QY#eWV?DV)~tHdc}>ASz1-Wo*Pf91#YHyFy8i6wmaf`f{P^X(k;B?H zzB&%IQYzYgrAtklmnaCd&Bg>din|-%p}na6JJ0@|`%`YN%@eV9CNGHDq(9eTJ?)9h z2DvJWDbta4_<1uoPR4YIDko!Fqr!%mYr-kQYO?%~BCJ!vTw)+E{O|q*1Bv?=7Iz^i za0(3TwJkkNEtK6irV@#BIXSpN;~3hH!x|Ei;#Jy5@Nts>-HkfgCgxV07S3ufoHJOgP72H_kD5 z3Fyf&A$BhRwZm$nzmlu}mK6^cnQmuL_P`0&UZm{*>bvf@%aT!iw=CW5sxhYHDr`>+|ploT}K$dFST3BDd zdOK}rDSU2Vwfb`}=mpZEUUsaeyD#;9uovhq??jbt+&vswohE;a@7nGJ^)Oeb-LDlc z$FAN^Y@E=f3Z|pSv$JvhGAo{XQ}cv&?M7vUT>o^XHvOnb=w{rKuja<(#?B6AkU@weNGTY1yl896ytN z!EM9_B){<=gKD+z0pIyP;B*FSbg)9A8BLXJ)fr(EP_W&w$`z7_rbHzJKUfqKvL4%b zq(5skPq0KH=TTD@);(P-F0Enw+IIY`XKQ)A;#NI8mDtOy5e|7>TCQKA3g2rdMycni zvkswR3OD9`mZqI@N8X=a{zf>z{RRI8$D6X*Y)k{s(QnxzAuM z*aFC;RAr#xhq{93Q52ZVN1H2x^Uk|o?V?qfqlC_ zI2ykzEX-&)SAQv>LH?~dztD%!?#7Y@TZYv>*pjYa9cs^bN|y|qfi~~ZEOe(977z4` z`bupIT4^HTiRKI0hCSkyw$f(_Tx=ood5aC?D@q+23p-tUUV(sC<`&xB9_-3lXbRKeIWMiB5v z%l3hwdLbcr3vFk?yLC*Z`_y1P+l(WFiN^+VrX}QBA3e-pnczA6X#;FUJxxP|gLxkM zu?fEu!bKe0ODS*9Iab_h16ki{w)igkg(MOoRSehwqoJ!SBblm3Rj zhP=E9vIaeMt@mB7ABbmljbN(P&-sYq^yx^ZaoYW?7T_WERW4+#_$YGF^`tSmYi!?0 z2GPa9Jkyu-k78+|I==UzNc4J)u?BZ3?j4a%c(UJ}Le9(tVu8xyM|uxa5~#B(p>!k^OFq{(i9j zpcaccfCC8+zXr}KsJj7_rfepCuQW-TGxk_4O?d=Om2XB-EN+GT@G5Bu zn$km>Hzf1o9b^eZnAS$QWQNL_fb-ZFSEmi7(0_tOhE3RjXzVdif4LfY&w=FtXB%t# z7inE>k=99n&+2L#ul4>}MF2%o_OG7m02ifyf*$HmbIt4BFywU2={DybHprquqjG5I z1K|nKF)?!}fy86})*ff0=?PA5#< zOM-YvXPEfdTQV#1vIk%_v-V9+d7B12WI9JJ6P(H{-W)1_X4=4AxIb)9tWU{oakwrq zqC&so-KH5U^zt!Dd-3`n|E+l^B0O|QKo6&I6j-QdUhX($dN$Y#t$Qb-4ihw;*o2C* z*Q_D-=u<6fJaB64%#6lCl!QleQmlWD$8h_@Vy1c8yu4b}gXEnnPKe!zTcBL-d{*wj zw8ibR>7i8y#%D9mO(2cgWHWEC2V=c2Q<0~qujs5!V=@iWE`~}-Vbc%4HyC_=P*m?A zW>?64u=x+^`8q&Q>Mr9k;~WJNN>8b}cM^6nt^AGa5e`JN5w>MbSPs6_pKGFrW!0cp z7pghgg9FEk%3SBZ_a12{xv?(_nQMzm6jDEbq}uSrG8|E%zj2+`jPXNSO*BgA_!!pl z>`(QU@9Z6n{SK9t$v8G@uM_n)&fVPmI{V`dKHbpp4{fvlJv`5XTRJp3>Wc?OzxqiU zJqxM}ZhXetNY8MuE!U#b#ZG>#(z-kkv`94MftMXYgcu!Yo{9~)eQ@->qaHHeO`p>T zgHo<~O(n(j5+oYI+AgcuVwIESuSt3GHWYL6{?`|D@-^Eo$3 z*EG)9f%3O>)-!^A(? zQ&W*F5q{dJB&Aw~ku7}41=mhTzJ9?0`h)4p^f`m?upMjR>X-Y!Q-0!u7d z(y})dc{wV#X~JdW`qbEeL(!Sa-6;k9KYz8@pKZ8e_Xmy7R{bm8@NX#}C>zOBe^N>t zWvTjM{ku)1=<__l7y&%tW4mMfg=2(p6Vc@sEJb;F#e1k@v2HWOH)zA z%EXcLKwQGaQXmZXPD*>^k85ZbnYpDP2_z8mryGdng2ZpDo4UKClpC^9(+jwk!J z$+(#OuSzJw!|#3yPvV-VQ8)7puD@Yfr?ET)Aiq)%O?iS6fLwff4(y@ZMCHzo^*av? zS`K?1fdZsYoV`bQStn?b2ce4s3OtgmbVYQ}WvMoH91ey1>=c$f8lVP-&>4;|VhtZn z`X#^QvHc8LlNiEwl|BpHSR%q!2d9V7m=J!U`A}>Q!WNKH&?!4Wyjq zKLv^IvSj9h7hzPp;v>qo%WvTHjf9c z$S!dDx)(ReX6r&#Ub#@~o-YWJ4A}-(k2<@}0Iex3#*!FDlm>nnB!nMom8}I?$xt|? z1r9aIW2hP7mtf3?c-Yz>zrYI|;N*6zQOy^@R&S8I=)rY_D?Ol^l70+GF9j-e@fY1c z`~q>|l&SzN;uV8_^^^>=R5JtXlG(=hjvqOr8Pg>VgmT-St|RASr(4 zUY(%Ve2hHjWt2HDvpCMT<%z&QYRm|GV(pL40;l27_z=O@D<(8+Yx1?2PwU@a2F{~3 zxHY1D=w~daaslq4c%Dp13qw!w1P9~A<&6N#TL^t!-fF8+9pref>}O~v`Z<~N4vZRsUi-h)W}TO9e|{d1CpDZl?dJgy+J=V8J?km zq#;+jXaBVP^}!mGwk0-TbxD;?eWYjQM_+8%hkJU>SZ)65PoE8~D}4ccii<1SDG0sU zQwhca?t5QyW$Spg6~o=_17Xw24)ENg)lcBV8fStYBc+3n;1;K(06rboaWaAHzvC2C!S) z-*+HQZxLmyR9Ndvzm76;|Cnp1=@XOR@xJ(}AF#>+FZvsJ|0Py2->?bh`yH%+Nu$3` zW>J8hfB@T(zRa|J7htg13m(DdUxczR650V8I5H2U^+)ktl;>}v`1j(wi2fhN7c4?O z>vA~&Tu3Br`&FL7`z^lC-_L_XB<>4WKcn_fqqBtIs4Pk`drA2rFu<)_Xm~4;@~miY z++Z%$wHEUx04(CG?|Vx65vvKWfYgb)^J)wkv`RCom6&HkOo@yx8FvEqk^ph`3 zYKd+czvTmA`>Z><&F`0U7w6k#a(a){m}5Y5+RE}n@#Io_#KjwDm)%`;-8|S|%s2nl zqYumFucYC;b7;s8Nq~ng!Y2N6=Sr%LWD{SujF6CZ8(|<3ras~TN}1`4Ki0D>7dP}P z{ib-KW<-9VUp|hIaOk%L{g)k#g!e&|K?0By9#HWJ$O+~R^i>XgpvjSRM3jR{eK3o+ zKLY^GSkIBGudGY@v}%yZoIzKSZUf&Ghw;CDC6G&wL@kc=o%{hy9H2WOmwra^ztJBS zKQaFw!gCKO+*M5m zuBW`&e&G|MCX1Dd^2NOI`F--#%NTjGvTrTzoB>#PFM?7dFQ%-QW&H!^ta&OIlz44$fS(Va{cGwv+GL zmdB2-g)cndb35f~&K=If{r06Q4H49VbtC3vVIFbtP{W|Ce#i+rc010;ZeAKdEIRQ&z390$gxEu1>_i@VCz{x zhFXA?V0V)(okFY{05EFyLM)&i%>Lj-5mEgnBG7jU0RjX1X#na4b^$>K*e8nu!cm~V z+b26-kv=X`?IJWB@Ngo>*!pUmaMZ}p;sKP+kK)n(T|BsfvH}*;cSikg-TZZc|14jq zZ}KGsZ(XEYPMs;h*Z&dP$OC3%M|sOg^&b@Rhh_AKy!=k`9I^qzM@6iq$5mvz`BCRmhvVmr%i3*YlDe%a`$DA^83(^z)Cs{>O=W~HO&c7TjLj3l7r z(F!{^ZG%${r<$#UZJADZxD!7f1`g;N6`J67_+6mtoMFPV#ZyCWrYz5+`*x}}o-QWD zzpX|9)!pJoc&T(PZGEAr5H%XoKT|rt<9{Uf=&-^VrhxIfo?}AufoU7vt)y{eSZGq z&2w(?J5NG}Jh8EMO*cRdQ!@Q#NDW~|C8Qk#@Bc(*MO(0xF;6ww;LDzOA!4QaAZyg_ zSKaSVl4ewp|NrFTDxo>6ME+rs^k%^o-q@TbtjRowEkjn5q_DI>&2S?x-2l65kgNOQ z;!>ZUdr_~g44dPX6olhmj5KlW1ALz~rwlGz4Cg?!cU96Z5aql_CX~}PEA|4M{?mpUqZ2n*|CD>Z);vKU*}zKI)?$& zK)FtSuK9`>CKDN7ZcCq{S=}@D3>7Mp=Td=20H*mYd>2u1c zX@CXjD;9ufoX=+53O_GO@*uJ{p7%j^<{y{?X3Z5}oF%&)w=<5aE=;bPvrjEb%^4GM z>a(vs;d*>3D|H>8Yi|H=`=(&Eb`xMhRIWDJ@(F|%;etFUn3ZHWr%HZxm*#mZYx~i` z_PvB7UWfWOUg{aJB`=0lNJb-XI|H$L!b`(1yvEFR7WRTSwvG<(acOoYoj3pK-% zii);uIY-`2eB2#;|6W|c>yg!jH^Dg#y%{lF&40TqXsRkZ8v10zeh5lVwvpyVDh{UZ z*&-$GO1WZi;FHIVB_LDyFS26`-o$Pk90_(n6MDcsq7esz4sTAyiTywPw4DpnB;+mW zDQUc)(OwDqsO$PHMcRscL0_;S?^DeKlQq4&uUtHK{p8NzTlb4Z?#amwRwz8Uv?W9l zn~C#da65H&ik{Jn+cgO9bO^Yme4TJ6h;~6uCT0V72CPTxfbAGiRoaGx{`~gpz}kn8 zTGhODqEsyRaQ7Md5&{<*X_yIarZmeRZWwHl9Sz}OXKX4&ON~hezWX3ivHq>V>PA1E zH=k1Sth@z22;8NKGpxUFmdcL;|Nq9$?lZDwiln6hnFHRIuc)`pn~XFOLajFPeelU` zU%}fhyO%Mo{rwfM)dQYjv|3!H8%#Qu%-~tdsHZ?{-7%a?`JLF%)D0XF+WW_7FMa09 z0iRglwgB(1{-BelHK^Brijj78Zud-ClS`$#WOzBoXoxG)rem!Kw?zMxtMr>znX!Mu+z7XDDj_@QYd(rd&Zt`j%O-s>f`Y<%-x2r-R?_$;62cZ{T%mu zz#l?*1FAZ}1aTg%sZ48#YLyO6DW8Oi2%k993^uH-kZsMcSo6LK8XU`>&?P?gyby5B z$$IInJ4W4^?(eQGb?_57QAPj^TPbX^)eEya|2$y{%YfniLB>1pQ8~2Q$)h(YrN``) zl*5F)V~OeoRjmu$%H~{t1o{o6258YA_3fWD$zhFb5J-^7zORdp48%thL*$%$Jr*48 zBqb%Dk$WGe51BHRZ=QZba6i9G?pdA1ODA>&M7a~Po?U|Qvg{cVmoJ`Cfqk>g{d}^b zsndlH(Q>L);_t<2N?Qz!R&tg7m0Hsg5qx(NYU&T-cf?O{f*GpeA*Lb=v}K1uWI(~E zK;akhZ@t1h)HQnRJjApuwwWoG3%t6r?6M{C7#rBclshCLWNS#nS=IrDTQs6P8ZlhM zV-_q*?TQe^bm$&hDLbM6R9c)C6?;>acdNolhN;|H273G#=;IH7NaRcgSb%T9wgA`M z;=UX%0uVXGvVeg^2vN_qKCjKyq22LEiw_)8iI8}!cJ#ClrSxpn z6!N7x?lvK5W3gNUk1p_e0ECDE?YR>BYol3*iL{NEG5coSy(H_LZpf`(KtRGpnVkAz z=j$U&^Qk2xroa!u(YQce{EXB?i%2E>j#R7#@HzHOf=cJ88a4b%n6@*;taGAGd8&73 z^2T(3fdunSuIbl#6(V*iEOZH*qU@lmKM#T8Sbjg+bC?Zn|7#yShV)?yC98d6(R_$7 zmWLV;iF3OLyHH*8b5^I+EQG(Dn3zfWLh$grtr#bM@WYbWuBMrNON;d7&QDlLue|sW zy!lSnDu6OPHieS(Do7|&lZsys=TrwC&hg9buFvzR8k*415YfGn{rc5$5#I@LPNB~L zSz1sc@p3AR)>YU&xMcDO;tYz78fi-1_kx0Ar{m%v)fF@wN$_Plcp*8<2t zN`gR}Y7#Z(C9LBT^YVN z65$J{fHPyaN3TV-lLbwTETX5mI(21xm5Dyx>QmP?YQs`5>Fa6Il8Re53G(W>P*qr~ za|W-%DGtxz`&k(5y5^SZg^27dr;(}NQN}>OeYU!L)3SU;+?ACHQi1z;2p~`Rt^bnW zxOBmLp=Xz(XuCmsUHeN$EM<5H`ZJitlMn-_a#M(LNE3ObGJ_P0L)} zoj#ILt))x1P_*LpZGC+eV`$KrIA)4Ez!~-DH3YqN1Au4RG6XCrB?^ke5zV=Rfj<6u z5#2!rlbpF_s4x=m*~K;BY>~0eTmd`RXgkvdXVK2G9JKOQu}QIPo6zN#wcbL0T~ts| zxZ_D(bT^lEU=mAM4cR}&G?)e%a9?Z0RoHX-LqvgUa!Ht;7SP5V92PC|Kux&6$yfg| zcYTTTFxb~AcHTJYgio)AkR16_fc)CxtJdZ1O&O9)dDtv| z0Q-WYa53F2^0{UtqVg_8daM{FZ6bjU*hlY*EL02jKCmMwD3vPz@!hr8Z(=4=9*L{s`zc4*x$ zS1D>Rr1(p0(AzWf1+`oup*S%B-A;RK67?yaQ{|oC6ETR~!*IpNo_8Sey^M_baOHD1 z*VA90Iz$cVJU=If#w5R#ti{kVXaHVOMAaR$8k{u}Yo@Tn)coR{(F)!ml(14DPHUjP za2+X{=CX0e5_Rbv-SvK$TMzg9w#V3PUTEbRBahDla9XHTPlktxwXt02&xUJCoA35s z8A~cEeb8r~Q>%5VI95?{^*Wa{ONwvI6b9^mWgv|~sGnSdojy$8OEj(zV;SbTcRg93 zzjVL~x>lgl5XQTiS7CTf&UDbl%xR>PM-+3UGSrdp}Z^J{WXM@-R^JUH`b%(%Ai{ znt?yo5B$e}7nY0X^708dnW&Y>11w_DZ;ZnM^~bz(KmN zDJo-t2Q2P8oDn8{P^m*1(9@KUjFP!k< zVPIFb7m0o@KQe&UfHQZawnQ`PA7g;ec{ELaTl{sw>%InI_s<@GW)@-_OM24K7WL9a;ksKyI;@oLqH zMhS~?i*+w;>LI$LPXxHzsqR;)LWx$0VOwnJUm`W0_n&y>Ua`T7KYNz{h`^clhM~kE zG$zrDc#8N2+B|G<&wxiU)D)F#Kg^N~Iz9+RZgb5eMw%#Kd1_2hZTY(DTcA}KkA$ku zSeqM(jX@rI?UdDWe5N5b2b{MvRl#QZ`THzw0I{qN_T2DkFdZIl}Bl$H#IV9rr+mP z;Be%oQw#;hipv4iE$tEu4Of<{>p0uLiPPCU;2LLJEb43q`g8IJ=*OcyFjv5l$D3tL z#5l4xM@+RG+17kttXO_yQR(Sl5^mFWTEE`C)loDwhQ*wAkZMvmv27pEsB$Dr&b^nX zhAci7=u>^?Si7FOpJj^K+xU!}6_J@o>z?X8xVb&a)iFYfD=i|Gu7mJr($nYclQ8rz zmqJ9a11*(lTZ@399Tww+skt^+XMCx>^#$OXt zv#k;YgYLfF_Y?2^SG?%dGEQYER+ITEv_Bi$~?~g{f%?_CugLaykS{{e~3Ok=TASCPQ^!{_{tBtQQ0TH9PZK}6_=Zd54Ck@ znk^}OtGsksOMe{={}OYnELzvcXu9(f8n_ERTR_R7ONcg30|rM`-lS>(E2y3%pQk&f zDM9w!Ht6heUHP6|?+!(~9ktu%Q=j&djFqJPEN)}xq%xGAD$VM0*_w+j{;}&I{H5yX z*N#K~4UO_&t?d6zzvnbq0tWDq2C0C+#+PCcy#4%{#ZoDXAXU-{`oV+QFJ^1H{D1qO mVBj$OQwX{jh(J$7c=5k+ZS-e@8|Crfx4?1j1 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 From 92dc61bd5e38078d6e5b2c2ceabe6c040a1ab17d Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 11:37:56 +0200 Subject: [PATCH 09/16] Updated --- .assets/Nano-Application-Architecture.jpg | Bin 62169 -> 65280 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.assets/Nano-Application-Architecture.jpg b/.assets/Nano-Application-Architecture.jpg index 7eb73f18d6703c47291e6d75da7de7911c12f950..8a83cf401ebf0e9f8717a93ea34d31dd1e4b1785 100644 GIT binary patch literal 65280 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 literal 62169 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

x=!|d&9e|uuKr}A{)v^V{E4P4@8UzTH6ISe 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 mVBj$OQwX{jh(J$7c=5k+ZS-e@8|Crfx4?1 Date: Sun, 19 Jul 2026 11:40:55 +0200 Subject: [PATCH 10/16] Updated --- .assets/Nano-Application-Architecture.jpg | Bin 65280 -> 42840 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.assets/Nano-Application-Architecture.jpg b/.assets/Nano-Application-Architecture.jpg index 8a83cf401ebf0e9f8717a93ea34d31dd1e4b1785..5f999118f821d4541e2f9f65df01b69abbb2b076 100644 GIT binary patch literal 42840 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 From 523b490cde743cdf3b867281479d70dde57c64c0 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 11:42:22 +0200 Subject: [PATCH 11/16] Updated --- .assets/Nano-Application-Architecture.jpg | Bin 42840 -> 0 bytes .assets/Nano-Application-Architecture.png | Bin 0 -> 23191 bytes README.md | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 .assets/Nano-Application-Architecture.jpg create mode 100644 .assets/Nano-Application-Architecture.png diff --git a/.assets/Nano-Application-Architecture.jpg b/.assets/Nano-Application-Architecture.jpg deleted file mode 100644 index 5f999118f821d4541e2f9f65df01b69abbb2b076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42840 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 Whjb(^VFkez*vaFj$7n~-MgJdEUc#FI literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 99118619..b4123acf 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ Nano supports multiple distributed architecture styles, depending on the complex | Microservice Orchestration (Top-Down) | API-driven orchestration where a central API coordinates downstream services. | | Microservice Orchestration (Service-to-Service) | Decentralized communication where services interact directly with each other. | -![Nano Application Architecture](https://raw.githubusercontent.com/Nano-Core/Nano.Library/refs/heads/10.0.0-rc7/.assets/Nano-Application-Architecture.jpg) +![Nano Application Architecture](https://raw.githubusercontent.com/Nano-Core/Nano.Library/refs/heads/10.0.0-rc7/.assets/Nano-Application-Architecture.png) ## βš™οΈ Required Tools Before getting started, make sure you have the following tools installed and configured. From 39517f229d9c4207d262a86a40b1a484a95321b8 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 11:44:53 +0200 Subject: [PATCH 12/16] Updated --- .assets/Nano-Application-Architecture.png | Bin 23191 -> 25450 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.assets/Nano-Application-Architecture.png b/.assets/Nano-Application-Architecture.png index b1bf2c4148158d9ddc3b9d8fadb371e8cd466edd..2148a8007ee10151df8dc781f0661b161709ec16 100644 GIT binary patch literal 25450 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 literal 23191 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 Whjb(^VFkez*vaFj$7n~-MgJdEUc#FI From 566e82590c459ef402346eadb821d48f2facfd15 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 11:46:50 +0200 Subject: [PATCH 13/16] Updated --- .assets/Nano-Application-Architecture.png | Bin 25450 -> 27442 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.assets/Nano-Application-Architecture.png b/.assets/Nano-Application-Architecture.png index 2148a8007ee10151df8dc781f0661b161709ec16..21221a50785f5694aca8483ea09026609a8195ee 100644 GIT binary patch literal 27442 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 LA1WYkn}+@$$nU}h literal 25450 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 From f632ecbeb9d3057978b8869b5a8f96a9f5414826 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 11:48:35 +0200 Subject: [PATCH 14/16] Updated --- .assets/Nano-Application-Architecture.png | Bin 27442 -> 27021 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.assets/Nano-Application-Architecture.png b/.assets/Nano-Application-Architecture.png index 21221a50785f5694aca8483ea09026609a8195ee..af9dcc99651a807c6b34468b9a42328d332f8edb 100644 GIT binary patch literal 27021 zcma%jby!qe^fnAbtAK(C2#heagoHEl(%sVCmOIgU|`&ogG;GnU|`8%U|^==;Q&ua zh^Le=Fo-eaq$D)GFgIs#O-V;aJ9lcRd?3GJHb@C6RVmDt0NqR@QWCasGHf+9iK<*T zX$fL75-DjC-z7Z~Umap$I%MjTRrcfM8;a9V!iky9@BQh=Y@VL$>>a{9Emm95uyD8- zK2{Xw|Kl&%p(_YSPJKzd4t@{3d2jyRa_iyTqZp&Q*HUyO{e0yO_p#7_H21N{*mUCF zzvtHVHKnfIzOS9dtmgmVK@bKA?;ahDj|7H+2_}Yhx?{e8j)k#Y{R8-szilcC!h_5+ z0guHGaNH&Sc|nYaz;Jk^83gJ65tTcM2SN99{WBkhA)zi;{$BRqrZ9|PReWM-NJ)#$ zL(nAwSIEC@iA{naEbW8}SEGL?%^JP#BVIoUQat?1{NGL+*$R2wA+gP^5 zZkUsy|8BTxJg|joGtw659lyj=y>tE13szVR>2OBA(O((Hgkzk(GKPrngD~C@L!C+g zBVJ-JOv-l=fQY&E?ce^}FCd6uatNHe=tr-03f%fS9!DMz4D5D_*W!f%{K zv$zsAl6Jr8Fr{?yxLc*$RlE6eHk&zRP-Sf5kQrb&1O<1L37LzivXq>T2G>aedA2um(wW2I- z>}N(IT4L*d_pouqNoZ%)s%*5C30|NNRRA$p#jTs`V{w@0+m$c#O0-;mJd1f>xrFOr<|QE9PJJf&3z-!R8G2V+XW1=2 zHk>QWY!y6UPv&=OPk%d$@^hNRbr}o#;9@agxA-CSYflQF-KKl%m73=d(BXf0} z*6e1yd=~mHMH9zV6!YS7>E`=6EI6o!Q>`B((R`KGGPhB zsWbx}f7HXKLM*Uep~2xxEupJ4!yJXo=fGO+wvw&VI7Uje6Sl3s z#}As()K@e`E4{OhaJE1?UO#dk#EfJE;f;OYJ(Kv<(v^8{8~i~ z!fRy9T4|c)?e8vrh7Hfu4@RmsolH_KB6@wlS?KJ?)94%|8aQ=m%my5ZhRM+9OxYsO zr^}KrU76s!fwUnxuYI`NpJL0bT|6K0<5TGqCXL~}4QLx22CIm41oNg;7`yUqgG)Xz z;{DOg8V+P)$weVk@A}+YzG&0kH*zxlT+l`9D@Eh)RV%`68833UdhhhB+on(Y=($^9 z`e>o+{&c@}F1Me%CI51Aeic}sfq3KFr0=%@)r0tfP8fRnv|an$0qrMw z!a zp&}}(r!2s5FgMbnlX`eaMA^06U5keUm_(RJu!Q6`%K_g}v0U7OMISf#1}WF}Hq_gh zUbmyvhPzTyql8;RUEY5471}b-(_@yrK>vrT6wK*fq0iovz_-7{oE^2vsY5u_&9f}= z5ulNDUL5o(2B7Z+JxqZZZUmW)rh&#yO?NCa)OgR=Gr$Q9laP?>CTPJAV}HLuc@#HH zeG3&k94v3 zeTw8NBEyVb6`DCVeEQ<-9Cf2vC)4GEbNF8mImbQO`$0OzAv$2T@=`=8hIDb3ugJmY zwh--mAtUt>CQ%+e-h|rpyB-Q>mjVJ>&qG2}vH3n!3>?Qq=H2v6MF^f~>+0U-pF5|13p_MEc zf=3L+&L+3P`q!Z>fEDdN2Gl&H#8<@jp#(zq2kFcIdL9?I$JHG05FXG^=-L0%Jux2O zE~+!Ph{7Wa*#9$~JRM*eZ5fNeZ1D1AgAA{};D&b2$@LJoR)jOaceOlKDXu$u!4BI% zzrO>nGo`mq05xrHU4T({>m4v=rw}i^Z;)uV zZL&5A(9qA0iT!p$JMlv(47nte!M*jy4HUK4l_w3?g;i8A7`fu!Y%2V5b*iN+KH-yp zd=1Pu=mFrtDa-C`DPW%e7|miX^l=y@a#EtaFPJbww3=S#S-(JymRpv2FrvJP68Z(O zh_LWB#w0_K0mSqL?D>TXLLibY^AxJ$dwLG;JQ6@sEYRk z{&&mp3WIQ@d|v7~Ia(ualqm6v-^|*NdK(pXCy%;6RRPOA6$jmLxXfev+B>A8#8rE! zNreeULST1k2>cFrPPq>bl0+ZI<^X0h9YjfLgUpiKD^tsD-f#THon9MPKD7A0f&BGZ z2!v%3H>kL;LaQ_}p3R_tcwNH@7{8M__~c-nLd&FvO##KjNgQQ@8Q{Nd$E|`|pd^MK zH@X&0Mq%&n?LjG*e$P}9+x;tKTKs$3WbGD|qfa$GQ(?x&?NW3fjz9D`l>H+6tI|N{ zM8G}U;QGz z3xTt4en@)&nvy{@4w=C{)s(=*-(F!@(4n0Zz+o4X3r$N=%q108A`4Egb z?l#qeh+4wMl@$fv9=Q7C)9x#`=}Jvu+{DoADA*eI?(Q!1_Rrt!ZBW6#Micfl`0QiN z_Yn0Ur{wHSk3A|>Z!C0A&j$0KV-Xa@0E;ny@OwZc*nwV7#L>!lK+Wt9b`j5YgQs^O za00bxe!EGj7YJ7E_mGJMR_p@NNzMmCq&BQTn|WN!^`OpM;70rwtaqyHjBo-uPg*aS zulL?T(&B_w2Au8)+4KJH8HfGz8e6?0Kd`|L$N72dbu1Z4x;zx(t^BcF>vN-B^- z`ksMuDhZdwd_~7{uY>0_+2sD3Rc3FEMh20?Y29{jBD>wkYbfZk!X$X_F#4{}CSD3~ zlz;fR6{4!z-)y^yvhgr=E_fu@6q;Wh{6^42DadDFlm}aWDO@c#-6tObenAb~REe144A_>eeEH`nhooP#Y69a{rx6o#jp*&Sy8^>Hw;TmrWv zoI2+Zb~;jC(;QxH@^AlYd#5G?)4gu6}4B1()wj>3_ zTelOQ34;wu-$>DMEGz$w#?dqE#(O0UmzN25AbG9_$y`Ah-evT?HXOG}=D%9d$xF<= zhOn%PDxO9VzmYK-VN3Si%hL_VomnG zB%0=Yxz(=0(Xn~kX1uapv}|vI#`{N&kE*IAc82%*&WnJ#Y72!AwHyQXeawK-n+CSY z#o*l;2^ zAd&BW*BQoipGlTxClLGGxIi)ag^f}9#*mJn%M%R1F$1hknJiK_(=1w0-q`1Y!rSjm zw<&)vvifvO31yR>d2-Tg^DykaI*HdxU`6+xJ2VMl+LyylswyXQ&ZUa?jw)NvKAPLK z9T^v!cLS1%VGM3RcZ^IODo{#Y`dPJLKA7{xd8~#@094WONXv5Ig5L3^<>ez;H~;B` zhfZ&-HQl)n6eR??^u@)UQKSo3<%{T1Lv)P*ZgY8Y+TvLi*<#d`z-YLe($R z9A~P;Ry(osTnmR@T>=K%6?A!4qb?KWqdHnKr&@G-sV5=fbSp6H2e;)5w&zD#+10H4 z4XRk~7hA!S1ng!w02(Tbtw~K39vB~bez+5LS)ut}cQ9jgJLFWC-|A?_llD%^Pd#dU zgh=jTdzKjg44py4G8voK`N@IH<+s7zfu4jfqhxxW?-f9VcRAvn7ig3EQu)c*Bu-aG zg|}Gi)35>KR0fb*CvOro)*0mhk9Ll1v46&jqkfr7$AzfKQ=6qx%Ebiw(p)=#opxz4WI zs{qMCES!>;D__y}h!15E^8jRwFLHGDw%YGF{K*%k%!^pRQ|erJi0b>~zz$IZo-@J> z*x+Cuw?z+E_+qYO`%!!B?MO%Ao35^|Womi8{+hxiFJL~{x9saX-X$Iu4I0jR?F6dV z+fy9R=SN4B2EH^}FKoD@kUTYepif~{)MY={>l9ZL-J-g0w4x+$Yuw|w_hn0y&L32j zD;GhB8h4*+sG+W~Qo;b&M>0yAFMN&Ub{W1GaJO65|75Jyd-rpkih{9mhJCe6ERBzO zTC}Y!z^+ulw4n+;mI-_uqN0xBZo*|P?@xrs8k-9naEIbj!@6J>qki2+b^7}=wI_vz zW8WCye}`+d5+y)*7-9~M@;dmx;bxurdoYK#EtMWgh&2Ea5*vfmwN?vX zm8#3X&7F>aD0nCX!2f557cNUZa=>wuqwB4EZg{F%V6iXir%0qn`zjFAELcE5dvIMr4-gUxVIC?s00`GC-3OO=m1LB30J3+w?{iin}$IUn-#J5eeZzxJTjTH zFS>7Hf<^AWk!lR^QB-!ugAl`jh!4ZVmMi5mT%GGARvSXBiFsN7HWqq$c#{u^>0E&! zzOR+WjKm9PKiGJl058~R;!Ce0jQyjz(2x3-1g8mvO|jKj|hX&AY{}pB6;!0A#r;6$Y&0$u&wB;Kv`d+ z5%V>IN{jW@jLF_ZEym5w;-EwFuAnzKve9B9`eLW6{(}24FY~?kW<*iA1d^Sk!N0NP z3ifXtpb6?5q`GyiIz0(&OiR5zS-+C{-yO7k;%RlGO z&STXF*ZULx*0*PnI!ehq&|_aa$jsE>Ij@KBb2rNsWxxjLO*GoXy*KIjFx8*M3%&s? zfjci3QM~Ny)W*1y?veN2prydHL9DG=Zg0|p04Wyfx)@3^H@_n{d}#D6>75aa z!B;UZ<3q<0{n2s*HX{y^8JefIgY{w50&CR@73+++)Fayct3D-eExUfcOK~a)OseHX5#zT5fVc`nT+Wzj) zqwjdD2X6+|jyCZT(=~m%{j^HH1}-JqaX=nGTQ#&N!F4gDp*_Zg+^K5FpGXA}7A>Y) znSt*FUZrwMWBEdjd7iWXJueJ-8D-%4?r_R;?pcUVH7FMjrK4_1gD&+XvDdf1!p=8N zcfgiDBBEgMBx?C|>-D}u2##RN&ga4|h0sq?wX*LDRL+NIEhl#Ko8@UJ1dTIN|5R_z z9bz1>)~tEJ_>PYY^QW4U#y1Y6kLJo8MSU;Tj>Mn~nLe6sdV?bFP{{@+3mM4wE?8=P zS^h#X(-ghz&c3jxP}#R*zf?XGmz3Y*x=jT-(O!Dh-?4)8BVt<06=N2Ksv58bawT;R z+oksjn;P;pCi}swsp)H#{iMMrf#*h1q8IVh1;tKnMnx=C{EqRhts>rDn`SQk_%r4s z;!Po=zI?eR2qqP;54SA$V_W7dFIj!awdZh&XiafdP{Osb+g1TgfYY78s#O9nOR3vj zcNfa9S@qzt@^>2Gx0xOe@HAEyIE4DD({@maJRMf|7J|6tZhd+I>dx?aa(*>fZzGyeQ zc5!eAeh^tRk7WJA5k1pUuY-N-s?qzIE1TJnv`P#rD!M@!=^dN8ZjocU+VkwhjmGuMN=n zpPh>&UuuWKZZz3-n&K>^zi0L#&g8^GU4`{n(xObkE+uR=6FZ)7RBBnk@Rz3PIXIQiWlyl zFY+&icRO~6^Qf6!A}YNgD@D1hUbtcp~#+vlI~KN_)e`TbLteAqxX z{FeB-05COd!sOqELG3$fez@4x<7}AX*s{iT$u7iPYOt62$l=u3JmhMEqeS8mq4W8~ACz^ZXHf*T|rl_&*N;_|5^KJ50(x2u6Zw`8Rh9fCGpf$m6YUteq)(4D_cjGXw^0^2gnvze6pho)uT!g=;P#>pH zYk?^13<@)vCIuobH2n>{>%`|mkT!DUOI&sN1&y+?UJXGAbbPu8z9+|BF;MgfJszwY zfZFcxDj>Rzhj#j)or^1MwFaOzwyyQs7 zvbF1RhKZ8=E(J(K6W`Z9Xwb*J>$Mc36S5ff!H%=T@pG)?Wy{cIl$|;*CKY`U>=EE- zJcEXDz7sjtOaAjY4se%7%M6mdWIs>1bR+Wj-x8kZbe&Q;DM!-x(_PQzBm3`TCX;Wj z10pIeA56E>npmg}^C!X}#iTwJ9Xkav(>%=5V?Q`KXjAjos1EszAO~}f4fB~H+)iKo z7SvyAA1o#Mo>1yI)g4X^*86;-q^BmYFs2KoagAARX-e>){#}*m1Z?4cTgjaL}^ctW{879=&?)Jql5eD#c zpz7_&1Wzt+ah1>7rZ>1NJZY=-UhtuxDs*Vg>cyv{x_nfA!IspgQsgvV^ai8mD;_$A ztUj78%X<<+;IgOWA5qLtrj!X=>X|^Erj+I>CUYP9E^Th^TPQ1kC46X9r+J|()YVuk z)~u|&<{m9lW9>UT+q|rf|^3GPf6xyO$!N@pjwDA!CtZ*thMOoy8I991N zax)X${91{aOFL^W(mzjrsmJ3y^|1|I7maJYXrF>#FoXl;ZQ(hQl4QlNH0OJ`>Zr2! zB8Xts>@#CQua6Ow+-O2eS$u``QPqX*wg=rc4}ey%2vUKw9}c;2eoS z_hGnfY&Dx!HP!oVp^9De2a zUK^|<^@KEnPVk;mDz7DP_XoTWEm4$ft7`Td?#4-79A=c5ao`g}&&cyXMWcd1f=fuh zWGL?=Xz*hVW_qsP)d9hSK6pN!J<5zUE(=G+#>LS`Fp`S)SSoBTSRR^5=Of)*@0(?oCew{gQH?@b!l8;Q`5VTZLTcV?j2CLa{?6l;gCQdLI z?D&R4+U2noZ+9&7neug?=mY@dkE;f#Q@7i7SaZimW@rDrciQ$5_H@Fq9xN? z*X(Pu@KME!TCbhkzEBnq3aOvO%#$n9D{(reL||^F=fCi~rlLn2CTrz*9VVJb0>*6o zTle4PMt?V4^3&y(KoALsu>R}u19nR}xQkIS{f`kV*r22W2LIwJvkkwIL%!xRvmV{a{<#BJGNf|$Qn>B=;jwqQsg zJ>GaZp&k7fi1p!O_E@+S$JQtx*IIZl$1O#J{V{@ui9&bND1K3=U+EgNoVil}*foeZ zV1LrzMN)ca-e^5lUJL9hn;LSMnoIXyXp|3)bjb)Wg~*MhXuBy|Tk(4Gl5@O!^t}&M-YoFyP%D z`{^k3L`0InqcP~^)|{c_SL+og%oBv~x@r^~WP#s9`Y|C zKsbGNM{}@i!2RMV)9Txz+#P={9aePAm}dY0+)U2mN?6cr@1YyCJ5E~-4*-mLT3|2Y z+&6|vlmJgM-gcy9a!9LGJK>8$;z?o7Fc=W%a|y`$lMM5)pbdaP6m#r?BQ}1JqDxWU zbVh+4+uAx7m&-Zog(xF?sL!`Kt|+7+SPZb97sII!Y!#rltMnDnWH~z2eJ(wZ@|=yE zvl`%tKRP+suvjd5v^yZqM#z5j^M)2W4wMI&bxl?=kN$XoN)>TTV)5^h#t5#&yK#@V z_J_4PKq9?|tbM5D&Gev~m&7btOaP!t2N@q{i3w1VJj@elt^ERiCL4E8n)T}^AW?)@ z3AE@+S8!eh9jm+KEPYaQDlE>Ui7a5RCi-bY*~ZId%o<&v_Ndj2_wAHtB=fpxA4`NNGjEPnuB--PEU+i z3|nA~3|Y+h5O|@%o+qn)yU$VsOgvr;91mr0-8CIdJBXaubbm#gWE+rqf(9FTls)iw zY|mIkUklV7C1KFdJSLcnQ#*hGq41@?0PgR&H%^id%sQIMzO{IEsQ`$F0(@#qHLwBJ;Eb?%(Cr%`4AMG=X#5Qr#(l3pQ+!_|^- z7O22s&g~MR>rEsx(WxZ4^UtmZ4S-)zLG$rMH#1Jn_m=xY4*UE15-?xBzN`N=;s~@r zlL{%-Ub@TXHL<&d_N2qvt%4gsShz$rCstb7Pk`u-?I`-bmNf;>zdgbs%^w`PgS+jNm7@8i?$K!TE^ZD!=| z3k$`6y<0}Warv^A574VJvA-}Zo)3PCj)M0*ZFVab;qjLLAaW;}>>e>s%4cSE z%hQjY$YSnmWoRdPE(&Kgsc(Ikc#$G(!YC#t2e5jKbAIP-ioTbU3zIS5NG$a`1P-Wq zS82L?duwFlPYzm!8rugwz;%Jf0c(86=VRjLKhLCH21Mx@JeO=2PMBibpHcy44&sbi zf1?_f?_%)fvu5^p%VVo!5&DhtS>yW}<+yT@o;J*<{5DpGK2N9Fkf_=%?)P)&Uq{-O z9DNzxHZ>pW3^vxURq^h<)T_4dc1hlw%B;2?eYP;E`dFVa`(mQ-V)kpD(&1-hD1?@jzRj!)E`G}Io~RCBjG+T?;`&hM!1dm118m;2J?jg5u(XMT>y zA6cR6A3L`JgBP&ijLvBhSSd{WJuI2qo1BR8~eaE=+C58XuR>MR`cof0f z>HJTu&G};g(8s&y-?z;ts`J$WKCW1+CNXkkExtczsxR%JO>{2LS>trZTkz+2+@_rW znd6_%*u#41JvW)E&70n6<9CA?U<0$_ik`g&Ghfv)1qEGf#)^p*Mt>FTn`pCf^;Ms9 z+Vppo_`Sb376|VZJ*plPDg#=^Dr=hZWC}-k+F=N}ZsWIcZGCc`UR$bg=2jjrw#% zkVp$e(atmtZ?)E^tKNP$;ZkwaWbyFcyhv~Hh&P_8NKoKtY}L(BNOCy!E*kewMicF4 z0GYeEGMkOADh297NxmJ)iK>@=1t?MWd+f+A6u?0A$;pO1qy2QcpI(ut_VR1ahC5iU zVK6UvG?lZJzMp%gVd~3PMXqYI(Iz*$!k*jVP^+P$IXY0!Qv&eJA>RC|;OhGP!J4tZ zaozzGF$i^HOpWU**`pC4r^F3`K;wIJO zlqn2bAUOp1yR|@wk2K!|-cMnB{aXVCVgUf@o8#Z?Z82db(^Y@tKz|E@V2l#F=`@jh$xPWC`?6f{wkV)uKJsJ~HNWd4K0<9PM z|AN-l>E!*%Ikn4R+3I(c1`i|GsQh*2=u)A4rNBcu)aS3)3J4+Anctugm-85sWKeHN zPk$W|AhPALrrT(V5^9=XpRyQ4EUkU(eg07hy(Fp&1aO^Vac}V-?bf^m=yJhi6#TaoGV$!`n zSJ0cf?f!!umv z=1pX2bGL+ST>?*Y2J1|@$eeMx@CNno*>j&TSAN5PIOgI;41bO3&ngP5nY@QMde_lN zjAgK=*x8e<^(mwE;mI%kO)ee`$%kk3F1wFHr*cJaPGy=$bF9JRa5RN(4_8gOBeRB5 zl}i8N0%pPvU5qMnpEN5s3=T5;k9p73OBVKSqTIX(I~9(G&fU}7H(HItFxtWV@ah*i zr=byume84}xRO=TH$9QeXByGr9Be6tv$10+xe#n#(|jj_)IT;+7dskG zs^s7^miZ%n=`&-A^-vfKc$w3X&fN}0$sbCED+bXq9-p9jnsV_=w`rqYwrsn4!@^?A zmO`|sqOJAQ2ZyCn3h{6pg8>oVAI9|_hqB1}gA8t;kEAxb6;W;WKN~cbWhdM>r4&}_i<=-`l5vRKDZFD-DdYDG>hIsv>)-*Y=cTJfG3`V& zVx6}#COxg`=LXJ{6WI*_u30lypU-Zs90{1R!^8iJY~EeH)z$Mmm>%Wuc6lx0*#y^+2*2~0Y?0uc=8@DDL zb;?ES%G^EaII(j6qu#MiwFlH{l!99nzHuwYzGDF<4%j-B<|D;TK+VghJQ>P#BcUsF z>U4ELa_u4|x=pgv_yrmCi(3>9vyo6bJNp!Wjcmlev+zxOx5dJZi5c_B&~37Z;;XA3 zzkm{xxDdCkap`5wcUIBYe6#CV6teWR&ZQeWiM-c!t=d7Hh^&Qk=-H*=J^zI{`e4_t z4u8qM7xa~W69g1O^E3zroDYKP*7%?=*!xwD&YzqTEO9++W!*|P0~+rKEO>DYF7dqXBrI_xO(LPq3#f=9=Zm!7;Rn%5#&#O;TWpsRk0H9d#kAnXxpY5GHq;Q zjke+o3#UEE_2L~p^ytRLv6aR6EtW|tZp@qU`zvqUcxB^o;PP3yLPE{Cy>4xeg&pHR zcSt<%p5@@qXa{z`Y~S!mdDbvu0?O{?T?1(FuH}jicLSpe3tV<=Avl4))gTRE9U-P5 z-Y!TmP!3P2X;6YDdE=FV3p8#4o7Yq_>SX}t9m&| zOl4;*^{u$&zSOCyjRB~UZ{LV|nZA~92AW=gd_%{&TSk+wVb)-404N(DWaYvI1qHG7 zoF=NjP%1Uonr7gm8y2A(qVy)O61=AEFdPG7;qXPx+-G0HKUyPlKLDA1upWTS-`W(W zu8un~Ty1{qqCsJk84=e9u)|CBsi#6Ut@JSn4B-d!o&Yo5aYTG@jj|9d5IVPtO?Y?Q z28fu@G@Gx_NQstui+0(K;Wu<>zI_|4egn~33Ss!mPz4=<9Eb!I52sto(gTi{bi5b( ziVydDwLsYI6pkJrXtod(|| zfpvObf?e2l-sR-}o0E!d%W$jT5 zxr5Ta$hq0tefp_}sSNl0(}N^0#;F7{g{*oy->o0pO8#K|GFD?iKoDionA~7MQ+3Sfvj5(&g&XBq<^J5R zSti}K+Mul&X}hhhUhYD%Fj;B2Fe%mCRe@ry0$j#s-6*jgyfwesH3rAjaO7E)IT$Jat@@Mx0l_OVb^e{Mtt(UOd7whfpK_CzdI@V?BkCXtHdT7w8biqx4 z@A#i~9+dj0oh}uE0y&*7?YY*#;&D1`|O>2P79Eip}6aWB(@*lK)$WZQj zo9bPd8}PJ0S8wR6%cKpp1L$TvP(`OcQRYbPo00UL5PfrKadB~+j76h9!VRde^PTKV z5~{Q7T}m>3NC~kKWV(N8V$)rLl8f3{W$RLj+cs6ZT zq-h&k|KvELFLm|P&GJC64meOFwyVJDVmWkS>_*zn0+Wq91bFYC^H-J7fZifVxj5h@ zcdbafZT5bK(y&rrY(KYpyygjrqnSH+?!ht6>~KRvJaElsJj&bK+hs2@pD5<7#rGGl zu$$espp>8Q&OBf$44)qFYHJ^)qEBrQ_nx?Qec;J;APDODyV`<{;`@_|G*BF5}Kdh|OrUxZFX? zL7qq3R}X!lXhgr>(N1NoNXvv#{M4`~{g>q|i%vMT1Ln=}Noudg;rCN;+wDV*LsrQ50BBtofeoVpY&!CRDEx*laiom+3|qeayME|zqPEeA+JEZ6o6&Hiwkm=P=6;BTE8U) z31r&PO;E$M%hK81Tg!^@0EJv_F_g8_1Mf3Hdx!Uad~yd&$EeBu$~^-93c~X0TsiLA zK;j{SjwRG%d|uW=nTX{aUF#2JAh)Z8UI#;+Dp~%y^Jxgwv$%vLD9+sd(bYsZ`X*#* z$(%dTtT*b-qQNDVK_Kfts+kSkUL-hwfPn#8BYUI!p%kZTtuJ931chl_!^iJ7fWh5v zc|)+J3aS3Y_x@WJ4Ek{ZY7vu}15_KEfk-1TKoYlsKGdCFzh@`0`%Gu9RM7M{LJA6M z06k!jgs|jMJNeY0fSD9D(7ii|mbxcLU^#$fy|yhM>4C`Zti2!v56znrL%j)t49fnoH}kLA9LDTXfbIZLTqbUjc0Q?Pt&EJMaO@b9_qVN3z%0!z|B)DDwy>Qip$yk|J zt_(C)TMs@{IazWly*z(+I9rB@|>Cfu*HGN>TW49mxAfcWZmwNig-7P zEcKnq{b3E2-cVY9I&=YOXnd^DaD|Bqs}>!cdt)=d9xsmr7E^ntMV7{2Q6}O(s%8IB zcw52Iu{?s3=W*>?s#8Z2`mSJlOWKBy&?nYU(JcI)bs{1jY12;Bxd95>DyOE`qpD=t zPgJXyKk=|0N^##<%8eG^nOVtB${gGnbK=_W%>VitU)4w)UFclQUqp!J4*rscc;-M! zA4{YWO#462Ag1krCLH_235lN@1fBhLP5yhI8))3w0aCn1kN@pHH(E1!u#5Nrcl7_f z&y60`kW<@k#&i98g4?JH~?(B+S#3lt8V*Y@CglJkMVsH*4Kv%6^Mx+;x{pHi(OCRZ!EdON8B>_17@(%>O^F>(v%hDaC&aF# zq%aK&(m3QDJmPciJ6MHe-vj&65wAmv9dZo?-ye&A%`Zt6N8lf&IT*H$_%zs3`Maz- zmC7s_jZ&=@CFY)H(wz=x*cqN5l{ffMiB)9Z5onx{Ux?BX9ed2_BV8ckRvha-m%qEL zPHnX|>m5C57wI;<&^c^Zo>JIC+f5YAh4%`^!S>`IE&y=hC2@yj{+<@#3_k&VzbfrO zdgRI3EtFJ3!HZ3IbB zEe>c6A^Q*nMCq>^`1MVG`$BJ%FN<03e0Hb^yr%257WgpdWe=B?G>iy38gEDJGbk4!F!i z;z4kILk%L+c@*anzj&&zE&+@JF#>jD4FRQ9!9E<%ZK|F1-gg}{mTEcbv;P_<98x1osVKJKCOz6l*lKrCJbdh61ltKygtq?bv;+t@{$CIu)@AY&uPGf=!bk@iQ)k$M)0a zDyh34j}yx?xR2^dyI{>x!5@#`*EoJG|8u(ikuX_7BFN~B)zmKrdeViu(d^N&_mkX3 zXKqWqaFpZlk(yu&LeckvMDY0CC)8lZYm`d0Y?51^9Ovdg?A-q!BZn_(a%27Q$;bOx zAp*$9clvq|Wd;oe?Bd+495G2roP$MrRx~RHI{}IoVTV5L*`5UgIO=OVh@&t|3ptvx zX+-w;M_tT?mwAdNHF2opW5Oi(jDE}48PwNcqHhW09`!(lXorCIR`a%+UW;Sf`|n2V zxwr>)NuC0YWqy1MvV(6gc!+M+CY7b1$JRQu6-H!mNmGuNnsFNZL1{J}WiwgqAjz;T zY%X$f4y(pGxE$XZIxj#5J4;NlJ~1k8_=YB#b;iQCeSy>@;PBb13@DodRDk%DE)@oqz3!h&jH&$U&D|!bE>|>-zeme zWL9Zz@$GU6JqdaG%4B-AZc_tvHkEvy7j%M4FJ=$LP*K7r?dLzq2hUK{H~bzIju9?U zy4)Zwuf=rL8#PjrK}@5HMC_m}&&J`m0p*LrZ~HY#+ql;AqsC7FXF9t-+_HPLwQS2= zxg75g46^=GD88EDI45aK-SXGO7A1H_Xz{`6pb)#JtP4lmg`@Y+$Rh^NK7HR;@FY7( zzC;v`u#gGw+JcX3hhHBJ8ImMFb|IsR-+Qah6LmDA{XAbnJ3VEJW}~-UbMRKZvA17i zTl9rU{8q*BxbW{^$rxQh!o!0_?mBU?P|xQLD=Ajj?$P!x1BA`vV3gy86DMAch%{l3FaQM;^6g17R$&N zZG3@N`#?e?(*y}ALu&T-KG>CI~tjC{&W0 zE8MI&wh>|!SoLXve(T{MX`<$`3k0tJ7>f6cV`&HYNsD zdd{}PM%)^CG0gh;Ft&UQRU0jUqiMCm(o2Bwns!`~$u~+(%5<6r@@uIFBFH_t0Y0TP zrxJucw}5m6U8@dM%Yb zYt|XP!VpR!JJ};-Ni+7Pl&oXlw?QgP_MKKm_85$%#8}2wjAbnIJwv^}_xor5m~-Zw z=iJY7?&rF%>zW!VR`+vVS43F4BTe~65PA37*pFf2(HHpPme+U7n0Jv~Sr?}WIzl3e zY|-hP^%g=67qBp}ObJkTlMC(jkhr8IL1p51D%Wet*n?D2KJH5b-_xoK&}%X&$;qPa zvUPU+wUTD-nfgsU3TD2wKw4PG&y&p0!WHuBIh(-jPhZsd(%RmhvW>uJT^r~e&uifn zcfo^m6}k|vXl+a0f-S7f!(;hiCx_aMv}__|g$IXF-BM7Y>KDaRXS9vR^M2u(L4o!4 zB>q|daigls?Nr1|8GPS1`>SVYD=RBGTJ*D{RhU`HQz%I2GsJ@of37gtUEOJapt(6^ zzK-IC6MZ#{zOX~IrP@vmj)#H}e>HNuR%nv6v?l<17~SS}{_T$kfr>>S8|FM&0j)r6 zyffVO*Fc#Q2tl|g!FzaqOG5}(H%giJz7eAVj284uwe8=;D_6*LS@kLoxMvfI6Ygm? z(zc`dDkDBz>tH$O+E-B#5#cBS`zwN~J7l){W;?oJHNL_C>L zrubDFkA6P8vYW%x{^>J{XvRq~G(WkIAMXk+#AeWmhxe~aTu|3JP{ znSidJBq^d!KUFuEh@kSn0IS=rxG7~O*n-3TthaDb3K_6qlLW&bp&dlvRhULLEDw7D ziP1IEH~XfPy@OvkZvDQaT<{0)vQ^}YzN_(mJ8o4#&>?BjXvg_1ym7benZlI0;#BJn zF6>s*!}GgWU-_XHc(l`%5ds~-Ivv4dD`@G#N@0;_9m@k$aG_SV!!>NQFgD(9W!y?j zoNIfN`AG>!M{v^|jJZZ6q2DR7W7#}@U;ZYb0;WG^DoYZa!%9eDa$U+M@SF5yLkMSL z$0ci`th`RG6e_W(D#Z10{s|1Xh(X^PoCnqqMi6i_bNV_>)ZdibBOVsQ!L&fLOM$(b zU~uMBXQcMz@j%*#ooSW)!1+g#G}zNv#TKunjn3&U6IvzR3Y*D$GtS0#b5W%30r4JO zZhzH=gx}d*9)D5hT^wk=o{?;xC-$kjnjbzGRMNA9`?*v5&~PX8KxA26G4RH~D_XOw+&}YI-8$1wL@Vjmkv+=?o6po`=SSe95GCJ4@B? zlsxluK7zZN7J&m`cM>2eua{oaQ1xO|tT=rt{ub2fS>oqQ)+?8;qeTP(cg^TP&f>-y z95s1df(cBi$Ti`{xI=FW5$Phf%cfWi)w!7#&>LeszoLY;a6bLig!fpa`WQ1W`h_3grR=teVukG~w39_ zCeJytCl^p(-^VxZhBG(gW5Rz~7kp#18QgeM`+1X;)A!m5yw02qRnR&1M z8c#Kh*X*8GZ*pelS%rgo+u10+V)#~<_;=H|kJ)&{?Ce0H*Lj7m#va_aSme6s zdIr(_e7}}Jv|xNv4$Y=(|CN}!vIeB(5WrM6!5&5L@cvu^^ zdqsHz@*qXT*iui4Ah4V6cXdlgP)P|}V0xVy?92e7%j2U? c-#@yyukp*z}3w0ZK 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 LA1WYkn}+@$$nU}h From 91ae73bece7f0ef3ed100124b3631e0888969659 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 12:21:03 +0200 Subject: [PATCH 15/16] Updated --- .github/workflows/build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 34c2050a..c1c64be4 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -8,7 +8,7 @@ on: - master env: APP_NAME: Nano.Library - VERSION: 10.0.0-rc5 + VERSION: 10.0.0 jobs: build-and-deploy: runs-on: windows-latest From 680322dc1fe9ceee27dfb7093e0ff6274def37b2 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 18:00:33 +0200 Subject: [PATCH 16/16] Updated --- .../Tests.Nano.Library.csproj | 6 +- Nano.All/README.md | 4 +- Nano.App.Api/Nano.App.Api.csproj | 4 +- Nano.App.Api/NanoApiApplication.cs | 2 +- Nano.App.Api/README.md | 152 +++++++++--------- Nano.App.Console/NanoConsoleApplication.cs | 2 +- Nano.App.Console/README.md | 22 +-- Nano.App.Web/NanoWebApplication.cs | 2 +- Nano.App.Web/README.md | 6 +- Nano.App/Abstractions/IApplication.cs | 2 +- Nano.App/ApiClient/BaseApiClient.cs | 2 + Nano.App/Nano.App.csproj | 2 +- Nano.App/README.md | 22 +-- Nano.Common/Nano.Common.csproj | 22 +-- Nano.Common/README.md | 4 +- .../Nano.Data.Abstractions.csproj | 2 +- Nano.Data.Abstractions/README.md | 6 +- Nano.Data.InMemory/InMemoryProvider.cs | 2 +- Nano.Data.InMemory/Nano.Data.InMemory.csproj | 2 +- Nano.Data.InMemory/README.md | 8 +- Nano.Data.MySql/MySqlProvider.cs | 2 +- Nano.Data.MySql/Nano.Data.MySql.csproj | 4 +- Nano.Data.MySql/README.md | 10 +- .../Nano.Data.PostgreSQL.csproj | 4 +- Nano.Data.PostgreSQL/PostgreSqlProvider.cs | 2 +- Nano.Data.PostgreSQL/README.md | 10 +- Nano.Data.SqLite/Nano.Data.SqLite.csproj | 2 +- Nano.Data.SqLite/README.md | 8 +- Nano.Data.SqLite/SqliteProvider.cs | 2 +- .../Nano.Data.SqlServer.csproj | 4 +- Nano.Data.SqlServer/README.md | 10 +- Nano.Data.SqlServer/SqlServerProvider.cs | 2 +- Nano.Data/Abstractions/IDataProvider.cs | 2 +- Nano.Data/Nano.Data.csproj | 12 +- Nano.Data/README.md | 56 +++---- Nano.Eventing.Abstractions/README.md | 6 +- Nano.Eventing.RabbitMq/README.md | 14 +- Nano.Eventing.RabbitMq/RabbitMqProvider.cs | 2 +- .../Abstractions/IEventingProvider.cs | 2 +- Nano.Eventing/README.md | 6 +- .../Nano.Logging.Abstractions.csproj | 2 +- Nano.Logging.Abstractions/README.md | 6 +- Nano.Logging.Log4Net/Log4NetProvider.cs | 2 +- Nano.Logging.Log4Net/README.md | 8 +- Nano.Logging.Microsoft/MicrosoftProvider.cs | 2 +- .../Nano.Logging.Microsoft.csproj | 2 +- Nano.Logging.Microsoft/README.md | 8 +- Nano.Logging.NLog/NLogProvider.cs | 2 +- Nano.Logging.NLog/Nano.Logging.NLog.csproj | 6 +- Nano.Logging.NLog/README.md | 8 +- .../Nano.Logging.Serilog.csproj | 2 +- Nano.Logging.Serilog/README.md | 8 +- Nano.Logging.Serilog/SerilogProvider.cs | 2 +- Nano.Logging/Abstractions/ILoggingProvider.cs | 2 +- .../Extensions/ServiceCollectionExtensions.cs | 2 +- Nano.Logging/Nano.Logging.csproj | 2 +- Nano.Logging/README.md | 12 +- Nano.Storage.Abstractions/README.md | 6 +- Nano.Storage.Azure/AzureFileshareProvider.cs | 2 +- Nano.Storage.Azure/README.md | 12 +- Nano.Storage.Local/LocalFileShareProvider.cs | 2 +- Nano.Storage.Local/README.md | 10 +- Nano.Storage/Abstractions/IStorageProvider.cs | 2 +- .../Extensions/ServiceCollectionExtensions.cs | 2 +- Nano.Storage/Nano.Storage.csproj | 2 +- Nano.Storage/README.md | 10 +- NanoCore/README.md | 6 +- QUICK_START.md | 90 +++++------ README.md | 42 ++--- 69 files changed, 348 insertions(+), 348 deletions(-) diff --git a/.tests/Tests.Nano.Library/Tests.Nano.Library.csproj b/.tests/Tests.Nano.Library/Tests.Nano.Library.csproj index c87ef80c..23c8706b 100644 --- a/.tests/Tests.Nano.Library/Tests.Nano.Library.csproj +++ b/.tests/Tests.Nano.Library/Tests.Nano.Library.csproj @@ -9,9 +9,9 @@ - - - + + + diff --git a/Nano.All/README.md b/Nano.All/README.md index 44d7643c..19dbdd41 100644 --- a/Nano.All/README.md +++ b/Nano.All/README.md @@ -8,13 +8,13 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** ## Summary Includes all Nano packages bundled into a single package for convenience. -> πŸ“– Explore the full **[Nano Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)**. +> πŸ“– Explore the full **[Nano Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)**. > ⚠️ While this package provides everything out of the box, it’s generally recommended to reference individual Nano packages as needed in your application. > Learn more about **[Nano NuGet Packages](https://github.com/Nano-Core/Nano.Library#nuget-packages)**. diff --git a/Nano.App.Api/Nano.App.Api.csproj b/Nano.App.Api/Nano.App.Api.csproj index f727910f..f78086bc 100644 --- a/Nano.App.Api/Nano.App.Api.csproj +++ b/Nano.App.Api/Nano.App.Api.csproj @@ -4,8 +4,8 @@ - - + + diff --git a/Nano.App.Api/NanoApiApplication.cs b/Nano.App.Api/NanoApiApplication.cs index d7c1ddce..161eb191 100644 --- a/Nano.App.Api/NanoApiApplication.cs +++ b/Nano.App.Api/NanoApiApplication.cs @@ -14,7 +14,7 @@ namespace Nano.App.Api; ///

/// Represents a Nano API application. /// -/// Documentation: Nano Api Application +/// Documentation: Nano Api Application public class NanoApiApplication : BaseNanoApplication, IApiApplication { /// diff --git a/Nano.App.Api/README.md b/Nano.App.Api/README.md index 8997b365..b2dfe25e 100644 --- a/Nano.App.Api/README.md +++ b/Nano.App.Api/README.md @@ -8,7 +8,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Variables And Secrets](#variables-and-secrets)** @@ -50,7 +50,7 @@ * **[Request Validation](#request-validation)** * **[Request Multipart JSON](#request-multipart-json)** * **[Response Serialization](#response-serialization)** -* **[Startup Tasks](#startup-tasks)** +* **[Startup Tasks](#start-up-tasks)** ## Summary The `NanoApiApplication` is a ready-to-use application template for building APIs with Nano. @@ -61,18 +61,18 @@ It also provides convenient static methods to create and configure the applicati through the `ConfigureServices` method. This design ensures that all core API behaviors are initialized consistently using you configuration, reducing boilerplate code and simplifying the setup of new API applications. -> ⚠️ Before proceeding, it is highly recommended to familiarize yourself generally with **[Nano Applications](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App)**. +> ⚠️ Before proceeding, it is highly recommended to familiarize yourself generally with **[Nano Applications](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#nanoapp)**. The `NanoApiApplication` can operate as either an internal service or an externally accessible API. As an internal service, it can run behind your network boundary, handling requests from other applications within the system, -using the built-in **[Nano Api Client](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#api-client)**. +using the built-in **[Nano Api Client](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#api-clients)**. When exposed as an external API, it sits behind an entry point that manages incoming traffic, providing controlled access to clients while keeping the internal implementation consistent. This design allows the same application to function in both roles without changing its core configuration or service logic, supporting flexible deployment scenarios. -> πŸ“– Learn more about the overall Nano architecture here: **[Nano Architectures](https://github.com/Nano-Core/Nano.Library#nano-architectures)**. +> πŸ“– Learn more about the overall Nano architecture here: **[Nano Architectures](https://github.com/Nano-Core/Nano.Library#%EF%B8%8F-nano-architectures)**. -Also checkout the **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** example, that shows a minimal configured API application. +Also checkout the **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** example, that shows a minimal configured API application. ## Registration First install the [Nano.App.Api](https://www.nuget.org/packages/Nano.App.Api) NuGet package. @@ -152,7 +152,7 @@ The `App` section in the configuration defines behavior related to the applicati } ``` -> πŸ’‘ Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#configuration)** here. +> πŸ’‘ Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#configuration)** here. ## Hosting Hosting configuration specifies how the API is hosted on the Kestrel web server, defining endpoint exposure as well as request handling limits. @@ -201,7 +201,7 @@ If **[Https](#https)** is also enabled, consider turning on `UseHttpsRedirection ``` -Try it out yourself using the **[Api.Hosting.Http](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Hosting.Http)** example. +Try it out yourself using the **[Api.Hosting.Http](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Hosting.Http)** example. ## Https Configuring HTTPS allows the API to communicate over a secure SSL/TLS connection. @@ -257,8 +257,8 @@ services: - ../:/root/.dotnet/https ``` -In `Staging` and `Production`, TLS certificates are automatically managed by the [Kubernetes Gateway](https://github.com/Nano-Core/Nano.Azure.Kubernetes/tree/master/Nano.Azure.Kubernetes.Gateway/README.md#nanoazurekubernetesgateway) -and [Cert-Manager](https://github.com/Nano-Core/Nano.Azure.Kubernetes/tree/master/Nano.Azure.Kubernetes.CertManager/README.md#nanoazurekubernetescertmanager). +In `Staging` and `Production`, TLS certificates are automatically managed by the [Kubernetes Gateway](https://github.com/Nano-Core/Nano.Azure.Kubernetes/blob/master/Nano.Azure.Kubernetes.Gateway/README.md#nanoazurekubernetesgateway) +and [Cert-Manager](https://github.com/Nano-Core/Nano.Azure.Kubernetes/blob/master/Nano.Azure.Kubernetes.CertManager/README.md#nanoazurekubernetescertmanager). Applications that are exposed publicly just need to define a subdomain and create an `HTTPRoute` Kubernetes resource. @@ -283,7 +283,7 @@ spec: port: 8080 ``` -Try it out yourself using the **[Api.Hosting.Https](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Hosting.Https)** example. +Try it out yourself using the **[Api.Hosting.Https](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Hosting.Https)** example. ## Routing Routing in Nano is handled automatically and requires no explicit configuration. Routes are derived from controllers that inherit from the Nano base controllers, which @@ -314,7 +314,7 @@ Otherwise, it is recommended to specify maximum upload sizes and timeouts to pro } ``` -Try it out yourself using the **[Api.Hosting.MultipartLimits](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Hosting.MultipartLimits)** example. +Try it out yourself using the **[Api.Hosting.MultipartLimits](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Hosting.MultipartLimits)** example. ## Http Policy Headers Configure headers such as HSTS, XSS protection, CSP, CORS, and other policies to secure and control HTTP behavior. @@ -367,7 +367,7 @@ The header allows you to avoid MIME type sniffing by specifying that the MIME ty > πŸ“– Learn more about **[Content Type Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Content-Type-Options)** -Try it out yourself using the **[Api.PolicyHeaders.ContentType](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.PolicyHeaders.ContentTypeOptions)** example. +Try it out yourself using the **[Api.PolicyHeaders.ContentTypeOptions](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.PolicyHeaders.ContentTypeOptions)** example. ## Referrer Policy The HTTP Referrer-Policy response header controls how much referrer information (sent with the Referer header) should be included with requests. @@ -403,7 +403,7 @@ Use `[ReferrerPolicy]` to override the global configuration, if needed. > πŸ“– Learn more about **[Referrer Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referrer-Policy)** -Try it out yourself using the **[Api.PolicyHeaders.ReferrerPolicy](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.PolicyHeaders.ReferrerPolicy)** example. +Try it out yourself using the **[Api.PolicyHeaders.ReferrerPolicy](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.PolicyHeaders.ReferrerPolicy)** example. ## Frame Options The HTTP X-Frame-Options response header can be used to indicate whether a browser should be allowed to render the document @@ -436,7 +436,7 @@ then the browser will allow other sites to embed this document. > πŸ“– Learn more about **[Frame Options Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Frame-Options)** -Try it out yourself using the **[Api.PolicyHeaders.FrameOptions](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.PolicyHeaders.FrameOptions)** example. +Try it out yourself using the **[Api.PolicyHeaders.FrameOptions](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.PolicyHeaders.FrameOptions)** example. ## Xss Protection The HTTP X-XSS-Protection response header was a feature of Internet Explorer, Chrome and Safari that stopped pages from loading @@ -471,7 +471,7 @@ implement a strong Content-Security-Policy that disables the use of inline JavaS > πŸ“– Learn more about **[Xss Protection](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-XSS-Protection)** -Try it out yourself using the **[Api.PolicyHeaders.XssProtection](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.PolicyHeaders.XssProtection)** example. +Try it out yourself using the **[Api.PolicyHeaders.XssProtection](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.PolicyHeaders.XssProtection)** example. ## Content Security Policy (CSP) The HTTP Content-Security-Policy response header allows website administrators to control resources the user agent is allowed to load for a given page. @@ -928,7 +928,7 @@ If configured, both the `Report-To` and `Reporting-Endpoints` headers are emitte > πŸ“– Learn more about **[Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy)** -Try it out yourself using the **[Api.PolicyHeaders.ContentSecurityPolicy](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.PolicyHeaders.ContentSecurityPolicy)** example. +Try it out yourself using the **[Api.PolicyHeaders.ContentSecurityPolicy](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.PolicyHeaders.ContentSecurityPolicy)** example. ## Cors Cross-Origin Resource Sharing (CORS) is an HTTP-header-based security mechanism that allows a server to authorize web browsers to load resources @@ -975,7 +975,7 @@ Use `[EnableCors]` and `[DisableCors]` to override the global configuration, if > πŸ“– Learn more about **[Hsts](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS)** -Try it out yourself using the **[Api.PolicyHeaders.Cors](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.PolicyHeaders.Cors)** example. +Try it out yourself using the **[Api.PolicyHeaders.Cors](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.PolicyHeaders.Cors)** example. ## Strict Transport Security (Hsts) HTTP Strict Transport Security (HSTS) is a web security policy mechanism that forces browsers to interact with websites solely through secure HTTPS connections. @@ -1000,7 +1000,7 @@ HTTP Strict Transport Security (HSTS) is a web security policy mechanism that fo > πŸ“– Learn more about **[Hsts](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security)** -Try it out yourself using the **[Api.PolicyHeaders.Hsts](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.PolicyHeaders.Hsts)** example. +Try it out yourself using the **[Api.PolicyHeaders.Hsts](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.PolicyHeaders.Hsts)** example. ## Robots The `X-Robots-Tag` response header defines how crawlers should index URLs. While not part of any specification, it is a de-facto standard method @@ -1034,7 +1034,7 @@ for communicating with search bots, web crawlers, and similar user agents. > πŸ“– Learn more about **[X-Robots-Tag](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Robots-Tag)** -Try it out yourself using the **[Api.PolicyHeaders.Robots](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.PolicyHeaders.Robots)** example. +Try it out yourself using the **[Api.PolicyHeaders.Robots](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.PolicyHeaders.Robots)** example. ## Forwarded Headers When connecting through a HTTP proxy (or load balancer), server logs will only contain the IP address, host address, and protocol of the proxy; @@ -1081,7 +1081,7 @@ Therefore, this approach is safe only if your traffic always passes through a tr > πŸ“– Learn more about **[Forwarded Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Forwarded)** -Try it out yourself using the **[Api.PolicyHeaders.ForwardedHeaders](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.PolicyHeaders.ForwardedHeaders)** example. +Try it out yourself using the **[Api.PolicyHeaders.ForwardedHeaders](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.PolicyHeaders.ForwardedHeaders)** example. ## Response Cache The HTTP cache stores a response associated with a request and reuses the stored response for subsequent requests. @@ -1112,7 +1112,7 @@ restore the session based on the cookie, query the DB for results, or render the > πŸ“– Learn more about **[Response Caching](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Caching)** -Try it out yourself using the **[Api.ResponseCache](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.ResponseCache)** example. +Try it out yourself using the **[Api.ResponseCache](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.ResponseCache)** example. ## Response Compression HTTP response compression is a technique used to reduce the size of data sent from a web server to a client (usually a browser). @@ -1134,7 +1134,7 @@ By shrinking the payload, it improves website loading speeds, reduces bandwidth > πŸ“– Learn more about **[Response Compression](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Compression)** -Try it out yourself using the **[Api.ResponseCompression](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.ResponseCompression)** example. +Try it out yourself using the **[Api.ResponseCompression](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.ResponseCompression)** example. ## Session Adds session state support to the application, allowing user-specific data to persist across requests. @@ -1156,7 +1156,7 @@ Cookie name: `.AspNetCore.Session` } ``` -Try it out yourself using the **[Api.Session](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Session)** example. +Try it out yourself using the **[Api.Session](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Session)** example. ## Cookies Cookies in Nano are pre-configured for security and cannot be customized. This ensures that all cookies follow best practices by default. @@ -1173,7 +1173,7 @@ When a cookie is created, Nano automatically enforces these settings. If a cookie’s options already match the policy or are stricter, they remain unchanged. However, if a cookie’s options violate the policy, the middleware adjusts them to ensure they conform before the response is sent to the client. -Try it out yourself using the **[Api.Cookies](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Cookies)** example. +Try it out yourself using the **[Api.Cookies](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Cookies)** example. ## TimeZone Nano supports built-in methods for specifying the timezone when making requests. @@ -1189,8 +1189,7 @@ To specify the timezone in a request, you can use one of the following methods: * Querystring parameter (`tz=Europe/Copenhagen`) * Cookie (`.AspNetCore.TimeZone=Europe/Copenhagen`) -When using layered Nano APIs, the `tz` header is automatically propagated across all layers when leveraging -the built-in [Nano Api Client](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#api-client). +When using layered Nano APIs, the `tz` header is automatically propagated across all layers when leveraging the built-in [Nano Api Clients](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#api-clients). To easily obtain the current date and time, use the following properties on `DateTimeInfo`: @@ -1213,9 +1212,9 @@ Cookie name: `.AspNetCore.TimeZone` } ``` -> πŸ“– Learn more about **[Request TimeZone](https://github.com/vivet/Vivet.AspNetCore/tree/master/Vivet.AspNetCore.RequestTimeZone#vivetaspnetcorerequesttimezone)**. +> πŸ“– Learn more about **[Request TimeZone](https://github.com/vivet/Vivet.AspNetCore/blob/master/Vivet.AspNetCore.RequestTimeZone#vivetaspnetcorerequesttimezone)**. -Try it out yourself using the **[Api.TimeZone](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.TimeZone)** example. +Try it out yourself using the **[Api.TimeZone](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.TimeZone)** example. ## Localization Nano provides built-in support for specifying the language when making requests. @@ -1225,8 +1224,7 @@ To specify the language for a request, you can use one of the following methods: * Query parameter (```culture=da-DK```) * Cookie (`.AspNetCore.Culture=c=da-DK|uic=da-DK`) -When using layered Nano APIs, the `Accept-Language` header is automatically propagated across all layers when leveraging -the built-in [Nano Api Client](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#api-client). +When using layered Nano APIs, the `Accept-Language` header is automatically propagated across all layers when leveraging the built-in [Nano Api Client](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#api-clients). Cookie name: `.AspNetCore.Culture` @@ -1247,7 +1245,7 @@ Cookie name: `.AspNetCore.Culture` > πŸ“– Learn more about **[Request Localization](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization)**. -Try it out yourself using the **[Api.Localization](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Localization)** example. +Try it out yourself using the **[Api.Localization](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Localization)** example. ## Versioning API versioning in **Nano** requires no additional configuration. It leverages the built-in versioning support provided by ASP.NET Core. @@ -1274,7 +1272,7 @@ to the other veresion providers. > Managing multiple API versions quickly adds complexity and maintenance overhead. Whenever possible, prefer evolving the API in a backward-compatible way so existing clients continue to work without requiring new versions. Use versioning only in rare cases where breaking changes are unavoidable. -Try it out yourself using the **[Api.Versioning](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Versioning)** example. +Try it out yourself using the **[Api.Versioning](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Versioning)** example. ## Documentation When documentation is enabled in the configuration, the API's web-based documentation interface (Swagger) is available at `/docs`. @@ -1318,7 +1316,7 @@ When configuring a strict CSP policy, add the following style hash: `"sha256-RL3 > πŸ“– Learn more about **[Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore)**. -Try it out yourself using the **[Api.Documentation](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Documentation)** example. +Try it out yourself using the **[Api.Documentation](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Documentation)** example. ## Health Checks When health checks are enabled in the configuration, a `/healthz` endpoint is exposed. @@ -1360,7 +1358,7 @@ run alongside the built-in health checks provided by Nano. > πŸ“– Learn more about **[AspNetCore.Diagnostics.HealthChecks](https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks)**. -Try it out yourself using the **[Api.HealthChecks](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.HealthChecks)** example. +Try it out yourself using the **[Api.HealthChecks](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.HealthChecks)** example. > πŸ’‘ Health Checks can also serve as an availability check mechanism. The health check example also demonstrates how to configure availability monitoring using _Azure Application Insights_. @@ -1405,7 +1403,7 @@ When configured, all uploaded files are automatically processed through the Clam If any uploaded file is found to contain a virus, the request is rejected and a `500 Internal Server Error` is returned. The response includes a message indicating the name of the virus detected and which file(s) triggered the scan. -> πŸ“– Learn more about **[ClamAV Virus Scan](https://github.com/Nano-Core/Nano.Kubernetes/tree/master/Nano.Azure.Kubernetes/Nano.Azure.Kubernetes.ClamAV/README.md#nanoazurekubernetesclamav) +> πŸ“– Learn more about **[ClamAV Virus Scan](https://github.com/Nano-Core/Nano.Azure.Kubernetes/blob/master/Nano.Azure.Kubernetes.ClamAV/README.md#nanoazurekubernetesclamav) This feature ensures that all file uploads are automatically checked for malware, providing an extra layer of security for your application. By integrating ClamAV scanning into the middleware pipeline, Nano helps enforce security best practices and prevents potentially harmful files from entering your system. @@ -1431,9 +1429,9 @@ into the middleware pipeline, Nano helps enforce security best practices and pre } ``` -> πŸ“– Learn more about **[Request Virus Scan](https://github.com/vivet/Vivet.AspNetCore/tree/master/Vivet.AspNetCore.RequestVirusScan#vivetaspnetcorerequestvirusscan)**. +> πŸ“– Learn more about **[Request Virus Scan](https://github.com/vivet/Vivet.AspNetCore/blob/master/Vivet.AspNetCore.RequestVirusScan#vivetaspnetcorerequestvirusscan)**. -Try it out yourself using the **[Api.VirusScan](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.VirusScan)** example. +Try it out yourself using the **[Api.VirusScan](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.VirusScan)** example. ## Content Negotiation Content negotiation allows clients to request a specific response format via the `Accept` header. @@ -1443,11 +1441,11 @@ such as when returning files. If `Accept` header is omitted from the request, Na No configuration or additional setup is required. -Try it out yourself using the **[Api.ContentNegotiation](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.ContentNegotiation)** example. +Try it out yourself using the **[Api.ContentNegotiation](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.ContentNegotiation)** example. ## Request Tracing A `X-Request-Id` is generated by the first Nano instance encountered in the architecture and is propagated through all layers of the system. -When using layered Nano APIs with **[Nano Api Client](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#api-client)**, the `X-Request-Id` is +When using layered Nano APIs with **[Nano Api Client](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#api-clients)**, the `X-Request-Id` is automatically passed along. It can also be set by the frontend, which is recommended to ensure that every layer uses the same identifier. In controllers deriving from `BaseController`, the `X-Request-Id` header value is accessible via the `RequestId` property. @@ -1455,10 +1453,10 @@ The `X-Request-Id` is also added to the http response, so the consumer can see i No configuration or additional setup is required. -When **[Logging](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)** is enabled, Nano adds the `X-Request-Id` to all logs for endpoint requests and responses, +When **[Logging](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)** is enabled, Nano adds the `X-Request-Id` to all logs for endpoint requests and responses, enabling request-level tracing and correlation. -You can try this out using the **[Api.RequestTracing](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.RequestTracing)** example. +You can try this out using the **[Api.RequestTracing](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.RequestTracing)** example. ## Error Handling This configuration section is required and will automatically be populated if omitted. @@ -1479,7 +1477,7 @@ Nano includes a centralized error handling middleware that catches all unhandled consistent HTTP error responses with appropriate status codes. All error responses are written using `ProblemDetails`, in accordance with [https://datatracker.ietf.org/doc/html/rfc7807](https://datatracker.ietf.org/doc/html/rfc7807). -Additionally, when **[Logging](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)** is registered with the application, +Additionally, when **[Logging](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)** is registered with the application, the error is logged using the configured provider. Nano provides built-in mappings between common exception types and HTTP error responses. @@ -1501,11 +1499,11 @@ Nano provides built-in mappings between common exception types and HTTP error re The exceptions above may be thrown anywhere in the application, and the Nano error handling middleware will automatically construct the appropriate `ProblemDetails` response. Nano supports any HTTP status code as long as `ProblemDetails` is used. This also enables proper error propagation when using Nano in a layered architecture -with the **[Nano Api Client](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#api-client)**. When returning custom error responses directly from controllers, +with the **[Nano Api Client](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#api-clients)**. When returning custom error responses directly from controllers, always return `ProblemDetails` or no response body. Returning custom objects for error responses will not work in a layered Nano architecture, as the API client can only propagate `ProblemDetails` and will otherwise fall back to a generic `500 Internal Server Error`. -Try it out yourself using the **[Api.ErrorHandling](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.ErrorHandling)** example. +Try it out yourself using the **[Api.ErrorHandling](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.ErrorHandling)** example. ## Static Files Static Files are served directly by the web host without passing through the endpoint pipeline. Common static assets such as @@ -1515,7 +1513,7 @@ Static files must always be placed in the `wwwroot` folder. This is enabled by default and requires no additional configuration. -Try it out yourself using the **[Api.StaticFiles](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.StaticFiles)** example. +Try it out yourself using the **[Api.StaticFiles](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.StaticFiles)** example. ## Authentication Nano supports two built-in authentication schemes, JWT and API key authentication. If no authentication schemes has been configured, all endpoints will be accessible anonymously by default. @@ -1527,7 +1525,7 @@ identity data is passed to Nano (e.g., via external sign-in or sign-up). Nano wi In Nano, authentication can be either with an identity store to manage user data, or without - transient, relying on external providers without storing identity information. When your application needs to manage usernames, passwords, roles, permissions, or other persistent user data, you should configure -**[Data Identity](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#identity)**. This enables Nano to store and maintain user credentials and claims in a +**[Data Identity](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#identity)**. This enables Nano to store and maintain user credentials and claims in a centralized identity store. Roles and claims can then be automatically loaded for each user, simplifying access control and authorization across your application. With transient authentication, users authenticate through external providers, and a Nano JWT tokens are generated for use in subsequent requests. Roles and claims @@ -1548,7 +1546,7 @@ Transient roles and claims may also be added when using persistent authenticatio legal name at login and add it as a transient claim, rather than storing it permanently in the identity system. This approach ensures that certain information is always current without the need to update persistent claims when data changes. -> ⚠️ API key authentication is only supported when using the built-in identity store, and is configured as part of **[Data Identity](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#identity)**. +> ⚠️ API key authentication is only supported when using the built-in identity store, and is configured as part of **[Data Identity](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#identity)**. The following configuration is available for authentication. @@ -1703,7 +1701,7 @@ The `IAuthRootRepository` contains just a single method. | ---------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------- | | `LogInRootAsync` | logInRoot | Signs in the admin/root user using credentials. The credentials must match the root username and password in the configuration. | -Try it out yourself using the **[Api.Authentication.RootLogin](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Authentication.RootLogin)** example. +Try it out yourself using the **[Api.Auth.RootLogin](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Auth.RootLogin)** example. The most basic and commonly used authentication method is logging in with credentials, a username and password, validated against the configured identity store. @@ -1717,7 +1715,7 @@ The `IAuthIdentityRepository` provides the following methods to support this fun | `LogInRefreshAsync` | logInRefresh | Refreshes an existing access token using a valid refresh token, generating a new JWT and refresh token. | | `LogOutAsync` | userId, appId | Logs out the current user. | -Try it out yourself using the **[Api.Data.Identity.Auth.Jwt](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity.Auth.Jwt)** example. +Try it out yourself using the **[Api.Data.Identity.Auth.Jwt](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity.Auth.Jwt)** example. The `IAuthIdentityRepository` supports external authentication backed by the identity store, as shown in the table above. In contrast, the `IAuthTransientRepository`, shown in the table below, also supports external authentication but is designed for transient logins without persistence and provides dedicated methods for external transient authentication. @@ -1824,17 +1822,17 @@ intermediate steps, and then use the resulting authentication data together with Try out external authentication yourself using one of these examples. -* **[Api.Data.Identity.Auth.External.Custom](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity.Auth.External.Custom)** -* **[Api.Data.Identity.Auth.External.Facebook](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity.Auth.External.Facebook)** -* **[Api.Data.Identity.Auth.External.Google](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity.Auth.External.Google)** -* **[Api.Data.Identity.Auth.External.Microsoft](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity.Auth.External.Microsoft)** +* **[Api.Data.Identity.Auth.External.Custom](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity.Auth.External.Custom)** +* **[Api.Data.Identity.Auth.External.Facebook](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity.Auth.External.Facebook)** +* **[Api.Data.Identity.Auth.External.Google](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity.Auth.External.Google)** +* **[Api.Data.Identity.Auth.External.Microsoft](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity.Auth.External.Microsoft)** ...or the equivalent transient examples. -* **[Api.Auth.External.Custom](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Auth.External.Custom)** -* **[Api.Auth.External.Facebook](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Auth.External.Facebook)** -* **[Api.Auth.External.Google](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Auth.External.Google)** -* **[Api.Auth.External.Microsoft](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Auth.External.Microsoft)** +* **[Api.Auth.External.Custom](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Auth.External.Custom)** +* **[Api.Auth.External.Facebook](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Auth.External.Facebook)** +* **[Api.Auth.External.Google](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Auth.External.Google)** +* **[Api.Auth.External.Microsoft](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Auth.External.Microsoft)** All authentication repositories are leveraged by the `BaseAuthController` when implemented to expose authentication endpoints. In most cases, you do not need to interact with the repositories directly. Using the controller provides a consistent, simplified interface to access all configured authentication actions, ensuring that authentication flows are @@ -1875,7 +1873,7 @@ All the `HttpContext` extension methods returns null, if not authenticated. The refresh token may be used to extend the access-token when expired. Nano also supports authentication using an API key, provided in the `X-Api-Key` header. This requires -**[Data Identity](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#identity)** to be configured for API keys. When an API key is included in the HTTP header, +**[Data Identity](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#identity)** to be configured for API keys. When an API key is included in the HTTP header, Nano authenticates the request using `ApiKeyAuthenticationHandler`. Having both JWT and API Key authentication enabled side by side is perfectly valid. Nano will route each incoming request to the appropriate authentication handler based on the @@ -1885,7 +1883,7 @@ In a layered architecture, when using API key authentication, the Kubernetes gat validate the API key by calling an authentication endpoint: `http://{app-name}/auth/login/apikey`, and exchanging it for a JWT token that can be forwarded to your backend service. Without this, services behind the gateway won't automatically authenticate API-key requests. Nano comes with a built-in endpoint when both API key and JWT has been configured, that can be used. -Try it out yourself using the **[Api.Data.Identity.Auth.ApiKey](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity.Auth.ApiKey)** example. +Try it out yourself using the **[Api.Data.Identity.Auth.ApiKey](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity.Auth.ApiKey)** example. ## Authorization Nano supports authorization using either a JWT token or an API key. JWT tokens are provided in the `Authorization` header, while API keys are provided in @@ -1893,7 +1891,7 @@ the `X-Api-Key` header. If both are configured and both headers are present in a an application, Nano allows _anonymous_ access by default. When building layered Nano applications, the `Authorization` header is automatically propagated between applications when using the built-in -[Nano Api Client](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#api-client). This ensures that the authenticated context is preserved +[Nano Api Client](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#api-clients). This ensures that the authenticated context is preserved across application boundaries. In Nano, _claims_ are primarily used for carrying user information, while _roles_ are used for authorization. Nano can be extended to support any kind of custom @@ -1901,7 +1899,7 @@ authorization strategies. For example, you can override the `[Authorize]` attrib during application startup. By default, however, Nano base controllers rely on role-based authorization. See [Controllers](#controllers) for details on which roles are required for specific base controllers and actions. -Try it out yourself using the **[Api.Authorization](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity.Auth.ApiApi.AuthorizationKey)** example. +Try it out yourself using the **[Api.Authorization](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Authorization)** example. ## Api Clients Nano API clients provide a structured way to communicate with other Nano API applications. They are designed to simplify service-to-service communication while maintaining @@ -1913,7 +1911,7 @@ into the business logic. Responses and errors are propagated in a predictable wa When used together with Nano’s **[Error Handling](#error-handling)** and `ProblemDetails` support, API clients ensure that errors can flow through multiple layers without being lost or transformed into generic failures. -> πŸ“– Learn more **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#api-clients)** +> πŸ“– Learn more **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#api-clients)** ## Controllers Nano provides several base controller classes that concrete API controllers are expected to inherit from. @@ -1952,10 +1950,10 @@ to keep the API surface minimal and explicit. When exposing entity models mapped from SQL views, use `BaseEntityViewController` base class. -> ⚠️ Entity controllers require **[Nano.Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata)** to be configured for the application. +> ⚠️ Entity controllers require **[Nano.Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata)** to be configured for the application. Each concrete implementation of an entity controller must specify two generic parameters. First, the entity model, which defines the database table and its properties -that the controller will work with. This model comes from **[Nano Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data#data-models)** and uses +that the controller will work with. This model comes from **[Nano Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data#data-models)** and uses Entity Framework. ```csharp @@ -2012,7 +2010,7 @@ Nano entity controllers have two required constructor dependencies and one optio | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ILogger` | Required. Provides logging capabilities for the controller. | | `IRepository` | Required. Provides methods to get, add, update, delete, and query entity data. | -| `IEventing` | Optional. If eventing is configured, this allows the controller to publish events from its actions. See **[Nano.Eventing](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md#nanoeventing)**. | +| `IEventing` | Optional. If eventing is configured, this allows the controller to publish events from its actions. See **[Nano.Eventing](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md#nanoeventing)**. | A controller using the default `Guid` as `TIdentity` would look like this. @@ -2021,7 +2019,7 @@ public class MyEntitysController(ILogger logger, IRepositor : BaseEntityController(logger, repository, eventing); ``` -If you have specified a `TIdentity` type when registering **[Nano.Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata)**, you must also specify the same type +If you have specified a `TIdentity` type when registering **[Nano.Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata)**, you must also specify the same type when deriving your concrete controllers from the Nano base controllers. If `TIdentity` is a `string`, your controller would look like this. ```csharp @@ -2059,10 +2057,10 @@ When everything is configured and registered, the following endpoints becomes av > ⚠️ Do not set `includeDepth` higher than the configured include depth. **[Response Serialization](#response-serialization)** will only consider the configured value. -Try it yourself using one of the **[Api.Data Lessons](https://github.com/Nano-Core/Nano.Lessons)**, such as **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**, +Try it yourself using one of the **[Api.Data Lessons](https://github.com/Nano-Core/Nano.Lessons)**, such as **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**, or any of the other data provider examples. -When **[Data Identity](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#identity)** is enabled, Nano provides a specialized base controller for managing +When **[Data Identity](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#identity)** is enabled, Nano provides a specialized base controller for managing entity identities. The `BaseEntityUserController` offers a rich set of methods for creating, updating, and managing user identities within your application. To use it, derive a concrete implementation of this controller to expose identity-related actions for your application, using a user entity model derived from `BaseEntityUser` or `BaseEntityUser`. It behaves similarly to other entity controllers but includes additional actions tailored for identity management, such as handling usernames, passwords, @@ -2136,9 +2134,9 @@ controller. Endpoints for user refresh tokens are only exposed if JWT authentication is configured. Similarly, endpoints for API keys are only exposed when API key authentication is configured. -> πŸ“– Learn more about **[Data Identity](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#identity)**. +> πŸ“– Learn more about **[Data Identity](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#identity)**. -Try it yourself using the **[Api.Data.Identity](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity)** example. +Try it yourself using the **[Api.Data.Identity](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity)** example. Nano includes the `BaseAuthController` and `BaseAuthController` classes to handle authentication-related operations. To expose authentication endpoints in your API, simply derive a concrete controller from one of these base classes. There is no need to implement any actions in your derived controller, as all necessary functionality is provided. @@ -2176,9 +2174,9 @@ The following endpoints are available. | `/api/audit/query/first` | GET, POST | query, criteria, includeDepth | reader | Retrieves the first entity matching the specified criteria. | | `/api/audit/query/count` | GET, POST | criteria, includeDepth | reader | Gets the total count of entities matching the specified criteria. | -> πŸ“– Learn more about **[Data Audit](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#audit)**. +> πŸ“– Learn more about **[Data Audit](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#audit)**. -Try it yourself using the **[Api.Data.Audit](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Audit)**, or any of the other data provider examples. +Try it yourself using the **[Api.Data.Audit](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Audit)**, or any of the other data provider examples. ## Request Validation When deriving a controller from `BaseController`, model validation is automatically enabled. Validation is based on the attributes applied to model properties. If @@ -2216,7 +2214,7 @@ while the controller receives fully bound and validated models. > ⚠️ Make sure the JSON field name matches the name of the model parameter in your action. -Try it out yourself using the **[Api.MultipartJson](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.MultipartJson)** example. +Try it out yourself using the **[Api.MultipartJson](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.MultipartJson)** example. ## Response Serialization Nano uses `Newtonsoft.Json` for serialization and deserialization. It supports all built-in Nano types, types derived from Nano base types, @@ -2224,7 +2222,7 @@ and all `Geometry` types from `NetTopologySuite`. The serializer only serializes navigations that is of type `IEntity`, when they are annotated with `IncludeAttribute`. This is to avoid returning unwanted navigation references, that is automatically added if dependent navigations are loaded separately into the data context. Read more about -**[Include Annotation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.App/README.md#include-annotation)**. Responses that doesn't inherit from `IEntity` will be +**[Include Annotation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#include-annotation)**. Responses that doesn't inherit from `IEntity` will be serialized normally. > ⚠️ Serialization respects only the configured include depth. Loaded navigations within that depth may in rare cases be returned even if the request `includeDepth` is lower. @@ -2245,6 +2243,6 @@ is fully initialized before becoming available. > πŸ’‘ When using health checks and startup tasks, configure the Kubernetes readiness probe correctly to prevent unwanted pod restarts. Keep startup tasks simple and fast to ensure smooth application startup -> πŸ“– Learn more about **[Nano Startup Tasks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#startup-tasks)**. +> πŸ“– Learn more about **[Nano Startup Tasks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#startup-tasks)**. -Try it out yourself using the **[Api.StartupTasks](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.StartupTasks)** example. +Try it out yourself using the **[Api.StartupTasks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#start-up-tasks)** example. diff --git a/Nano.App.Console/NanoConsoleApplication.cs b/Nano.App.Console/NanoConsoleApplication.cs index 8764cac8..e0e587aa 100644 --- a/Nano.App.Console/NanoConsoleApplication.cs +++ b/Nano.App.Console/NanoConsoleApplication.cs @@ -15,7 +15,7 @@ namespace Nano.App.Console; /// Represents a Nano console application designed to run as a background service or cron job. /// Provides an entry point for configuring services and running console-based Nano applications. /// -/// Documentation: Nano Console Application +/// Documentation: Nano Console Application public class NanoConsoleApplication : BaseNanoApplication, IConsoleApplication { /// diff --git a/Nano.App.Console/README.md b/Nano.App.Console/README.md index b3fdf4ad..2d167204 100644 --- a/Nano.App.Console/README.md +++ b/Nano.App.Console/README.md @@ -8,14 +8,14 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Variables And Secrets](#variables-and-secrets)** * **[Configuration](#configuration)** * **[Localization](#localization)** * **[Exception Handling](#exception-handling)** - * **[Api Clients](api-clients)** + * **[Api Clients](#api-clients)** * **[Console Workers](#console-workers)** * **[Startup Tasks](#startup-tasks)** @@ -31,7 +31,7 @@ It provides a concrete and opinionated implementation tailored specifically for while still allowing full customization through configuration and the `ConfigureServices` method. This ensures that all core application behaviors are initialized consistently from configuration, reducing boilerplate code and simplifying the creation of new console applications. -> ⚠️ Before proceeding, it is highly recommended to familiarize yourself generally with **[Nano Applications](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App)**. +> ⚠️ Before proceeding, it is highly recommended to familiarize yourself generally with **[Nano Applications](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#nanoapp)**. ## Registration First install the **[Nano.App.Console](https://www.nuget.org/packages/Nano.App.Console)** NuGet package. @@ -84,7 +84,7 @@ The `App` section in the configuration defines behavior related to the applicati } ``` -> πŸ“– Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#configuration)** here. +> πŸ“– Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#configuration)** here. ## Localization The Nano configuration supports specifying a default `CultureInfo` for console applications, ensuring that culture-sensitive operations @@ -105,23 +105,23 @@ The `DefaultCultureInfo` will be set to the configured default culture. ## Exception Handling Exceptions thrown by individual Nano workers are handled internally, ensuring that failures in one worker do not impact the execution of others. -When a **[Logging Provider](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)** is registered, any worker that fails will automatically log the exception. +When a **[Logging Provider](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)** is registered, any worker that fails will automatically log the exception. No additional configuration or setup is required. -Try it out yourself using the **[Api.ExceptionHandling](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.ExceptionHandling)** example. +Try it out yourself using the **[Api.ExceptionHandling](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.ExceptionHandling)** example. ## Api Clients Nano API clients provide a consistent and structured way for applications to communicate with other Nano API services. In console applications, they allow worker processes to establish connections with one or more -**[Nano API applications](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#nanoappapi)**, send requests, and retrieve responses in a reliable and predictable manner. +**[Nano API applications](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#nanoappapi)**, send requests, and retrieve responses in a reliable and predictable manner. This enables console workers to leverage the functionality of multiple Nano services while keeping service boundaries clear and maintaining consistent error handling, logging, and response propagation across the system. > πŸ’‘ It's recommended to use anonymous API client methods for console workers to avoid configuring root credentials. -> πŸ“– Learn more **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#api-clients)** +> πŸ“– Learn more **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#api-clients)** ## Console Workers You can implement as many workers as you need by creating classes that implement `IWorker`. @@ -148,7 +148,7 @@ public class MyWorker(ILogger logger) You can inject any registered service your worker needs, including scoped services, which will be correctly resolved when the worker is executed. -Try it out yourself using the **[Console.Workers](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Workers)** example. +Try it out yourself using the **[Console.Workers](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Workers)** example. ## Startup Tasks Nano Console applications supports start-up tasks that execute before the application begins processing requests. @@ -156,6 +156,6 @@ The console worker won't start until all configured start-up tasks have complete While start-up tasks are rarely required for console applications, this feature is available to ensure any necessary initialization can be performed before the worker starts. -> πŸ“– Learn more **[Nano Startup Tasks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#startup-tasks)**. +> πŸ“– Learn more **[Nano Startup Tasks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App#start-up-tasks)**. -Try it out yourself using the **[Api.StartupTasks](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.StartupTasks)** example. +Try it out yourself using the **[Api.StartupTasks](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.StartupTasks)** example. diff --git a/Nano.App.Web/NanoWebApplication.cs b/Nano.App.Web/NanoWebApplication.cs index 19e89a96..18589158 100644 --- a/Nano.App.Web/NanoWebApplication.cs +++ b/Nano.App.Web/NanoWebApplication.cs @@ -17,7 +17,7 @@ namespace Nano.App.Web; /// /// Represents a Nano Web application. /// -/// Documentation: Nano Web Application +/// Documentation: Nano Web Application public class NanoWebApplication : NanoApiApplication, IWebApplication { /// diff --git a/Nano.App.Web/README.md b/Nano.App.Web/README.md index 9f2f8b7d..2f1f244c 100644 --- a/Nano.App.Web/README.md +++ b/Nano.App.Web/README.md @@ -10,7 +10,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** @@ -20,7 +20,7 @@ ## Summary Extends the API application with built-in support for Razor Pages and Blazor through registered services and middleware. -> ⚠️ Before proceeding, it is highly recommended to familiarize yourself generally with **[Nano Applications](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#nanoapp)**. +> ⚠️ Before proceeding, it is highly recommended to familiarize yourself generally with **[Nano Applications](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#nanoapp)**. ## Registration First install the [Nano.App.Web](https://www.nuget.org/packages/Nano.App.Web) NuGet package. @@ -48,7 +48,7 @@ Register your custom services in the `ConfigureServices(x => { })` method to ext The `App` section in the configuration controls application-level behavior, similar to the API application. Currently, the web application does not add any additional configuration options beyond those available in the API application. -> πŸ“– Learn more about **[Nano API Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#configuration)**. +> πŸ“– Learn more about **[Nano API Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#configuration)**. ## Razor Coming... diff --git a/Nano.App/Abstractions/IApplication.cs b/Nano.App/Abstractions/IApplication.cs index 9c24b786..c2cbc56f 100644 --- a/Nano.App/Abstractions/IApplication.cs +++ b/Nano.App/Abstractions/IApplication.cs @@ -19,7 +19,7 @@ public interface IApplication /// Provides a fluent lifecycle for configuring services, building, and running the application. /// /// -/// Documentation: Nano Application +/// Documentation: Nano Application /// public interface IApplication : IApplication where TApp : IApplication diff --git a/Nano.App/ApiClient/BaseApiClient.cs b/Nano.App/ApiClient/BaseApiClient.cs index c3decde0..42db32f9 100644 --- a/Nano.App/ApiClient/BaseApiClient.cs +++ b/Nano.App/ApiClient/BaseApiClient.cs @@ -21,6 +21,8 @@ public abstract class BaseApiClient(ApiClient apiClient) public abstract class BaseApiClient(ApiClient apiClient) where TIdentity : IEquatable { + private readonly ApiClient apiClient = apiClient ?? throw new ArgumentNullException(nameof(apiClient)); + /// /// Provides access to authentication-related API endpoints. /// diff --git a/Nano.App/Nano.App.csproj b/Nano.App/Nano.App.csproj index 0e04e9a1..71fdc1e3 100644 --- a/Nano.App/Nano.App.csproj +++ b/Nano.App/Nano.App.csproj @@ -2,7 +2,7 @@ - + diff --git a/Nano.App/README.md b/Nano.App/README.md index 852ba8ec..f2aa4559 100644 --- a/Nano.App/README.md +++ b/Nano.App/README.md @@ -10,7 +10,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Environment](#environment)** * **[Configuration](#configuration)** @@ -32,11 +32,11 @@ are initialized consistently using you configuration, reducing boilerplate code Three concrete types application are avaialble in Nano. -| Application | Documentation | Minimal Example | -| ------------- | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| Nano API | [Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README#nanoappapi) | [Example](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank) | -| Nano Console | [Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Console/README#nanoappconsole) | [Example](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank) | -| Nano Web | [Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Web/README#nanoappweb) | [Example](https://github.com/Nano-Core/Nano.Lessons/tree/master/Web._Blank) | +| Application | Documentation | Minimal Example | +| ------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| Nano API | [Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#nanoappapi) | [Example](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank) | +| Nano Console | [Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Console/README.md#nanoappconsole) | [Example](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank) | +| Nano Web | [Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Web/README.md#nanoappweb) | [Example](https://github.com/Nano-Core/Nano.Lessons/blob/master/Web._Blank) | ## Environment By design, Nano is environment-neutral: it does not rely on environment-specific code or behavior. @@ -79,14 +79,14 @@ With the `NullLogger`, all log messages are discarded, so no logs are persisted. This is intended as a safety fallback. -> πŸ“– Learn more about **[Nano Logging Providers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)**. +> πŸ“– Learn more about **[Nano Logging Providers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)**. ## Api Clients Nano provides a generic API client implementation that allows other Nano applications to seamlessly connect and communicate with your application over HTTP. This feature is intended for API-based application types. Console applications do not implement API clients, since they do not expose HTTP endpoints, but they can still consume API clients from other applications. To create an API client, derive from either `BaseApiClient` or `BaseApiClient` and implement the required constructor. If your -application uses Nano **[Identity](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#identity)**, you should instead derive from `BaseIdentityApiClient` or +application uses Nano **[Identity](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#identity)**, you should instead derive from `BaseIdentityApiClient` or `BaseIdentityApiClient`, where `TUser` represents the `IEntityUser` model defined in your application and `TIdentity` represents the identity type. The base classes provide a structured set of methods for invoking built-in Nano API endpoints. They expose controllers and actions through a generic, convention-based approach, @@ -159,8 +159,8 @@ The application has access to several groups of endpoints exposed as properties have access to the Identity group. Each group contains endpoints organized by their respective domain and purpose. Endpoints that are not enabled in the API application via configuration will return a 404 response if invoked. For example, if authentication is disabled and an endpoint from the Auth group is called, the request will result in a 404 response. -The Entity method group in the API client provides generic methods for working with your **[entity data models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models)** -through the **[Entity Controllers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#controllers)** in your application. It exposes methods for all standard Nano controller +The Entity method group in the API client provides generic methods for working with your **[entity data models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models)** +through the **[Entity Controllers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#controllers)** in your application. It exposes methods for all standard Nano controller actions, including get, query, add, edit, and delete. The `TEntity` generic parameter defines the entity type used when invoking a method and also determines the corresponding controller route segment. For example, using `MyEntity` will target the `/MyEntitys/` route, following Nano’s controller naming conventions. @@ -313,7 +313,7 @@ Next, add properties to the request and annotate them with request data attribut | `[Route]` | Defines route parameters. Multiple properties can use `[Route]`. The optional parameter determines the order in which values are substituted into the route defined by the `[Action]` attribute on the request class. | | `[Query]` | Defines query string parameters. These should be scalar types. The optional `Name` parameter overrides the query parameter name; otherwise, the property name is used. | | `[Body]` | Defines the request body. It must be a serializable complex type. Typically, this is a dedicated contract class representing the request payload. Nano automatically serializes it when invoking the request. `NetTopologySuite` geometry types are supported, as well as Nano’s built-in `Query`, `Pagination`, and `Ordering` types. | -| `[Form]` | Defines a form field included in a multipart request. Properties must be scalar types or one of the thgese file types: `IFormFile`, `FileInfo`, `FileStream`, `Stream`, or `NamedStream` (including `IEnumerable` variants). ⚠️ Complex objects are also supported, but require the use of **[`[FromFormBody]`](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#request-multipart-json)** on the controller action. | +| `[Form]` | Defines a form field included in a multipart request. Properties must be scalar types or one of the thgese file types: `IFormFile`, `FileInfo`, `FileStream`, `Stream`, or `NamedStream` (including `IEnumerable` variants). ⚠️ Complex objects are also supported, but require the use of **[`[FromFormBody]`](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#request-multipart-json)** on the controller action. | The updated request example below demonstrates how each attribute can be used in practice. diff --git a/Nano.Common/Nano.Common.csproj b/Nano.Common/Nano.Common.csproj index 10683d61..68a71ff1 100644 --- a/Nano.Common/Nano.Common.csproj +++ b/Nano.Common/Nano.Common.csproj @@ -1,17 +1,17 @@ ο»Ώ - - - - - - - - - - - + + + + + + + + + + + diff --git a/Nano.Common/README.md b/Nano.Common/README.md index 9438a32d..65e1d0f2 100644 --- a/Nano.Common/README.md +++ b/Nano.Common/README.md @@ -10,11 +10,11 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** ## Summary Shared building blocks and core implementations used across multiple parts of the Nano ecosystem. These components provide consistent behavior, reduce duplication, and serve as the foundation for higher-level Nano features used throughout the solution. -> πŸ“– Explore the full **[Nano Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)**. +> πŸ“– Explore the full **[Nano Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)**. diff --git a/Nano.Data.Abstractions/Nano.Data.Abstractions.csproj b/Nano.Data.Abstractions/Nano.Data.Abstractions.csproj index 9eff0bd6..37a71e6f 100644 --- a/Nano.Data.Abstractions/Nano.Data.Abstractions.csproj +++ b/Nano.Data.Abstractions/Nano.Data.Abstractions.csproj @@ -3,7 +3,7 @@ - + diff --git a/Nano.Data.Abstractions/README.md b/Nano.Data.Abstractions/README.md index 00a3ffd9..c3776080 100644 --- a/Nano.Data.Abstractions/README.md +++ b/Nano.Data.Abstractions/README.md @@ -10,14 +10,14 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** ## Summary This NuGet provides the core configuration, interfaces, and base abstractions used across all data providers. This package is not meant to be included directly. -It serves as a transitive dependency for concrete data providers and is also included in **[Nano Application](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#nanoapp)**, +It serves as a transitive dependency for concrete data providers and is also included in **[Nano Application](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#nanoapp)**, allowing Nano applications to rely on data abstractions rather than specific implementations. -> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata)**. +> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata)**. diff --git a/Nano.Data.InMemory/InMemoryProvider.cs b/Nano.Data.InMemory/InMemoryProvider.cs index 09d95b7b..bba44465 100644 --- a/Nano.Data.InMemory/InMemoryProvider.cs +++ b/Nano.Data.InMemory/InMemoryProvider.cs @@ -11,7 +11,7 @@ namespace Nano.Data.InMemory; /// /// /// This provider uses Entity Framework Core's in-memory database and does not register additional services such as health checks. -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.InMemory/README.md#nanodatainmemory. +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.InMemory/README.md#nanodatainmemory. /// public sealed class InMemoryProvider : IDataProvider { diff --git a/Nano.Data.InMemory/Nano.Data.InMemory.csproj b/Nano.Data.InMemory/Nano.Data.InMemory.csproj index aba0e962..73e679b4 100644 --- a/Nano.Data.InMemory/Nano.Data.InMemory.csproj +++ b/Nano.Data.InMemory/Nano.Data.InMemory.csproj @@ -1,7 +1,7 @@ ο»Ώ - + diff --git a/Nano.Data.InMemory/README.md b/Nano.Data.InMemory/README.md index 7515e2d7..6f843e58 100644 --- a/Nano.Data.InMemory/README.md +++ b/Nano.Data.InMemory/README.md @@ -8,7 +8,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** @@ -18,10 +18,10 @@ Data Provider implementation for in-memory data access. The in-memory data provider doesn't use migrations and there is no need to implement the `BaseDbContextFactory`. -> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata)**. +> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata)**. -Try it out yourself using the **[Api.Data.InMemory](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.InMemory)**, or -**[Console.Data.InMemory](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Data.InMemory)** example. +Try it out yourself using the **[Api.Data.InMemory](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.InMemory)**, or +**[Console.Data.InMemory](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Data.InMemory)** example. ## Registration Install the **[Nano.Data.InMemory](https://www.nuget.org/packages/Nano.Data.InMemory)** NuGet package. diff --git a/Nano.Data.MySql/MySqlProvider.cs b/Nano.Data.MySql/MySqlProvider.cs index 38a1e98d..61871584 100644 --- a/Nano.Data.MySql/MySqlProvider.cs +++ b/Nano.Data.MySql/MySqlProvider.cs @@ -13,7 +13,7 @@ namespace Nano.Data.MySql; ///
/// /// Supports retry policies, batching, spatial data via NetTopologySuite, query splitting behavior, and optional health checks. -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.MySql/README.md#nanodatamysql. +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.MySql/README.md#nanodatamysql. /// public sealed class MySqlProvider : IDataProvider { diff --git a/Nano.Data.MySql/Nano.Data.MySql.csproj b/Nano.Data.MySql/Nano.Data.MySql.csproj index 116fedef..f62fe3d6 100644 --- a/Nano.Data.MySql/Nano.Data.MySql.csproj +++ b/Nano.Data.MySql/Nano.Data.MySql.csproj @@ -2,8 +2,8 @@ - - + + diff --git a/Nano.Data.MySql/README.md b/Nano.Data.MySql/README.md index 43a950c7..b673f705 100644 --- a/Nano.Data.MySql/README.md +++ b/Nano.Data.MySql/README.md @@ -8,7 +8,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** @@ -19,11 +19,11 @@ ## Summary Data Provider implementation for MySql data access. -> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata)**. -> πŸ“– Learn more about **[Nano Azure MySql](https://github.com/Nano-Core/Nano.Kubernetes/tree/master/Nano.Azure.MySql/README.md#nanoazuremysql)**. +> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata)**. +> πŸ“– Learn more about **[Nano Azure MySql](https://github.com/Nano-Core/Nano.Azure/blob/master/Nano.Azure.MySql/README.md#nanoazuremysql)**. -Try it out yourself using the **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**, or -**[Console.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Data.MySql)** example. +Try it out yourself using the **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**, or +**[Console.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Data.MySql)** example. ## Registration Install the **[Nano.Data.MySql](https://www.nuget.org/packages/Nano.Data.MySql)** NuGet package. diff --git a/Nano.Data.PostgreSQL/Nano.Data.PostgreSQL.csproj b/Nano.Data.PostgreSQL/Nano.Data.PostgreSQL.csproj index 0dea8369..b01e773c 100644 --- a/Nano.Data.PostgreSQL/Nano.Data.PostgreSQL.csproj +++ b/Nano.Data.PostgreSQL/Nano.Data.PostgreSQL.csproj @@ -2,8 +2,8 @@ - - + + diff --git a/Nano.Data.PostgreSQL/PostgreSqlProvider.cs b/Nano.Data.PostgreSQL/PostgreSqlProvider.cs index e47c080b..4c809a1a 100644 --- a/Nano.Data.PostgreSQL/PostgreSqlProvider.cs +++ b/Nano.Data.PostgreSQL/PostgreSqlProvider.cs @@ -13,7 +13,7 @@ namespace Nano.Data.PostgreSQL; ///
/// /// Supports retry policies, batching, spatial data via NetTopologySuite, query splitting behavior, and optional health checks. -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.PostgreSQL/README.md#nanodatapostgresql. +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.PostgreSQL/README.md#nanodatapostgresql. /// public sealed class PostgresSqlProvider : IDataProvider { diff --git a/Nano.Data.PostgreSQL/README.md b/Nano.Data.PostgreSQL/README.md index fb5a0f97..f7aaae4e 100644 --- a/Nano.Data.PostgreSQL/README.md +++ b/Nano.Data.PostgreSQL/README.md @@ -8,7 +8,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** @@ -19,11 +19,11 @@ ## Summary Data Provider implementation for PostgreSQL data access. -> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata)**. -> πŸ“– Learn more about **[Nano Azure PostgreSQL](https://github.com/Nano-Core/Nano.Kubernetes/tree/master/Nano.Azure.PostgreSql/README.md#nanoazurepostgresql)**. +> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata)**. +> πŸ“– Learn more about **[Nano Azure PostgreSQL](https://github.com/Nano-Core/Nano.Azure/blob/master/Nano.Azure.PostgreSql/README.md#nanoazurepostgresql)**. -Try it out yourself using the **[Api.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.PostgreSQL)**, or -**[Console.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Data.PostgreSQL)** example. +Try it out yourself using the **[Api.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.PostgreSQL)**, or +**[Console.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Data.PostgreSQL)** example. ## Registration Install the **[Nano.Data.PostgreSQL](https://www.nuget.org/packages/Nano.Data.PostgreSQL)** NuGet package. diff --git a/Nano.Data.SqLite/Nano.Data.SqLite.csproj b/Nano.Data.SqLite/Nano.Data.SqLite.csproj index 491f3255..9af49431 100644 --- a/Nano.Data.SqLite/Nano.Data.SqLite.csproj +++ b/Nano.Data.SqLite/Nano.Data.SqLite.csproj @@ -2,7 +2,7 @@ - + diff --git a/Nano.Data.SqLite/README.md b/Nano.Data.SqLite/README.md index 3b7b3985..2bc53c80 100644 --- a/Nano.Data.SqLite/README.md +++ b/Nano.Data.SqLite/README.md @@ -8,7 +8,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** @@ -21,10 +21,10 @@ Data Provider implementation for SqLite data access. > ⚠️ SqLite does not natively support spatial types, and `mod_spatialite` is not reliable. -> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata)**. +> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata)**. -Try it out yourself using the **[Api.Data.SqLite](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.SqLite)**, or -**[Console.Data.SqLite](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Data.SqLite)** example. +Try it out yourself using the **[Api.Data.SqLite](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.SqLite)**, or +**[Console.Data.SqLite](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Data.SqLite)** example. ## Registration Install the **[Nano.Data.SqLite](https://www.nuget.org/packages/Nano.Data.SqLite)** NuGet package. diff --git a/Nano.Data.SqLite/SqliteProvider.cs b/Nano.Data.SqLite/SqliteProvider.cs index 48364259..c18bd63d 100644 --- a/Nano.Data.SqLite/SqliteProvider.cs +++ b/Nano.Data.SqLite/SqliteProvider.cs @@ -13,7 +13,7 @@ namespace Nano.Data.SqLite; ///
/// /// Intended for local development, lightweight deployments, and embedded database scenarios. -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqLite/README.md#nanodatasqlite +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqLite/README.md#nanodatasqlite /// public sealed class SqLiteProvider : IDataProvider { diff --git a/Nano.Data.SqlServer/Nano.Data.SqlServer.csproj b/Nano.Data.SqlServer/Nano.Data.SqlServer.csproj index bb39f43d..a47fd2cf 100644 --- a/Nano.Data.SqlServer/Nano.Data.SqlServer.csproj +++ b/Nano.Data.SqlServer/Nano.Data.SqlServer.csproj @@ -2,8 +2,8 @@ - - + + diff --git a/Nano.Data.SqlServer/README.md b/Nano.Data.SqlServer/README.md index 6fb5f8c7..124d5387 100644 --- a/Nano.Data.SqlServer/README.md +++ b/Nano.Data.SqlServer/README.md @@ -8,7 +8,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** @@ -19,11 +19,11 @@ ## Summary Data Provider implementation for Sql Server data access. -> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata)**. -> πŸ“– Learn more about **[Nano Azure Sql Server](https://github.com/Nano-Core/Nano.Kubernetes/tree/master/Nano.Azure.SqlServer/README.md#nanoazuresqlserver)**. +> πŸ“– Learn more about **[Nano Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata)**. +> πŸ“– Learn more about **[Nano Azure Sql Server](https://github.com/Nano-Core/Nano.Azure/blob/master/Nano.Azure.SqlServer/README.md#nanoazuresqlserver)**. -Try it out yourself using the **[Api.Data.SqlServer](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.SqlServer)**, or -**[Console.Data.SqlServer](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Data.SqlServer)** example. +Try it out yourself using the **[Api.Data.SqlServer](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.SqlServer)**, or +**[Console.Data.SqlServer](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Data.SqlServer)** example. ## Registration Install the **[Nano.Data.SqlServer](https://www.nuget.org/packages/Nano.Data.SqlServer)** NuGet package. diff --git a/Nano.Data.SqlServer/SqlServerProvider.cs b/Nano.Data.SqlServer/SqlServerProvider.cs index 39c5786d..386f6e75 100644 --- a/Nano.Data.SqlServer/SqlServerProvider.cs +++ b/Nano.Data.SqlServer/SqlServerProvider.cs @@ -13,7 +13,7 @@ namespace Nano.Data.SqlServer; ///
/// /// Supports retry policies, batching, spatial data via NetTopologySuite, query splitting behavior, and optional health checks. -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqlServer/README.md#nanodatasqlserver. +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqlServer/README.md#nanodatasqlserver. /// public sealed class SqlServerProvider : IDataProvider { diff --git a/Nano.Data/Abstractions/IDataProvider.cs b/Nano.Data/Abstractions/IDataProvider.cs index ab539018..efe103d7 100644 --- a/Nano.Data/Abstractions/IDataProvider.cs +++ b/Nano.Data/Abstractions/IDataProvider.cs @@ -7,7 +7,7 @@ namespace Nano.Data.Abstractions; /// /// Defines a data provider used to configure the application's data access layer. /// -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata public interface IDataProvider { /// diff --git a/Nano.Data/Nano.Data.csproj b/Nano.Data/Nano.Data.csproj index 452f5750..9d1937b1 100644 --- a/Nano.Data/Nano.Data.csproj +++ b/Nano.Data/Nano.Data.csproj @@ -2,14 +2,14 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + diff --git a/Nano.Data/README.md b/Nano.Data/README.md index 7758dac0..08a6f020 100644 --- a/Nano.Data/README.md +++ b/Nano.Data/README.md @@ -10,7 +10,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Variables And Secrets](#variables-and-secrets)** @@ -135,7 +135,7 @@ The `Data` section in the configuration defines the data provider and related se } ``` -> πŸ“– Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#configuration)** here. +> πŸ“– Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#configuration)** here. ## Connection Pool Nano supports optional connection pooling for the underlying Entity Framework data provider. When enabled, database contexts are reused from a pool, which can improve performance @@ -255,7 +255,7 @@ functionality. See **[Repositories](#repositories)** for more details. Nano also provides a public `SecurePasswordGenerator` class for creating strong, secure passwords. -Try it out yourself using the **[Api.Data.Identity](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity)**. +Try it out yourself using the **[Api.Data.Identity](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity)**. ## Health Checks When health checks are enabled in the data configuration, Nano automatically registers a health check for the configured data provider. @@ -296,11 +296,11 @@ Once implemented, the provider can be added to the application during startup co The following data providers are currently supported in Nano. -* **[Nano.Data.InMemory](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.InMemory/README.md#nanodatainmemory)** -* **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.MySql/README.md#nanodatamysql)** -* **[Nano.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.PostgreSQL/README.md#nanodatapostgresql)** -* **[Nano.Data.SqLite](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqLite/README.md#nanodatasqlite)** -* **[Nano.Data.SqlServer](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqlServer/README.md#nanodatasqlserver)** +* **[Nano.Data.InMemory](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.InMemory/README.md#nanodatainmemory)** +* **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.MySql/README.md#nanodatamysql)** +* **[Nano.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.PostgreSQL/README.md#nanodatapostgresql)** +* **[Nano.Data.SqLite](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqLite/README.md#nanodatasqlite)** +* **[Nano.Data.SqlServer](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqlServer/README.md#nanodatasqlserver)** ## Data Context Nano provides built-in management for the `DbContext` while still letting you use it as you normally would. @@ -363,8 +363,8 @@ must implement the corresponding interfaces: `IEntityReadOnly`, `IEntityWritable > πŸ’‘ For simplicity and maintainability, it is recommended to derive entity models from `BaseEntity` or one of the specific base classes rather than implementing the interfaces directly. -Try it out yourself using the **[Api.Data.Mysql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Mysql)** or -**[Console.Data.Mysql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Data.Mysql)** examples. Similar examples are available for other data providers as well. +Try it out yourself using the **[Api.Data.Mysql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)** or +**[Console.Data.Mysql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Data.MySql)** examples. Similar examples are available for other data providers as well. Nano also contains another important base entity model. The `BaseEntityUser` and `BaseEntityUser`. When **[Identity](#identity)** has been configured for an application, the entity user base classes defines the user model of the application and are having `IdentityUser` associated. The base class itself derives from `BaseEntity`, and behaves in the @@ -406,7 +406,7 @@ Generally, you do not need to interact with the identity models directly. Use th the identity models are available through the **[Data Context](#data-context)** like any other entity. Bypassing the `IIdentityRepository` is not recommended, as it may unintentionally bypass critical identity logic. -Try it out yourself using the **[Api.Data.Identity](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity)** example. +Try it out yourself using the **[Api.Data.Identity](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity)** example. Nano also supports defining views in the entity model. The `BaseEntityView` entity class can be used to define a model for a SQL view. @@ -417,10 +417,10 @@ public class MyEntityView : BaseEntityView } ``` -Try it out yourself using the **[Api.Data.MySql.Views](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql.Views)** example. +Try it out yourself using the **[Api.Data.MySql.Views](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql.Views)** example. Spatial `Geometry` types from `NetToplogySuite` is also supported. Try it out yourself using the -**[Api.Data.MySql.Spatial](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql.Spatial)** example. +**[Api.Data.MySql.Spatial](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql.Spatial)** example. ## Data Mappings Each data model in your application should have a corresponding non-generic data mapping with a parameterless constructor. Data mappings define how your entities are configured @@ -474,14 +474,14 @@ public class MyEntityViewMapping : BaseEntityViewMapping } ``` -Try it out views yourself using the **[Api.Data.MySql.Views](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql.Views)** example. +Try it out views yourself using the **[Api.Data.MySql.Views](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql.Views)** example. Nano automatically updates all unique index mappings to include the `IsDeleted` property. This ensures that soft-deleted entities can coexist without violating uniqueness constraints. Mapping of spatial types varies between data providers. Refer to your provider's spatial documentation for details. -Explore spatial and other advanced mappings using the **[Api.Data.MySql.Mappings](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql.Mappings)** example. +Explore spatial and other advanced mappings using the **[Api.Data.MySql.Mappings](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql.Mappings)** example. ## Migrations Migrations in Nano work the same way as standard Entity Framework migrations. @@ -521,8 +521,8 @@ dotnet ef database update ` > ⚠️ Entity Framework does not handle views, stored procedures, or functions in migrations, they must be added or modified manually to migrations. -To manage views or stored procedures in migrations take a look at the **[Api.Data.MySql.Views](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql.Views)** or -**[Api.Data.MySql.StoredProcedures](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql.StoredProcedures)** example for best practices. +To manage views or stored procedures in migrations take a look at the **[Api.Data.MySql.Views](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql.Views)** or +**[Api.Data.MySql.StoredProcedures](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql.StoredProcedures)** example for best practices. > πŸ“– Learn more about **[EF Migrations](https://learn.microsoft.com/en-us/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli)**. @@ -591,8 +591,8 @@ One of the most useful parameters is `includeDepth`, which overrides the globall are applied in a query. This allows you to map complex entity models with related entities, while also controlling how much of the entity graph is loaded. Sometimes you may want only the plain entity, while other times you may need the full inclusion tree. -Try it out yourself using the **[Api.Data.Mysql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Mysql)** or -**[Console.Data.Mysql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Data.Mysql)** examples. Similar examples are available for other data providers as well. +Try it out yourself using the **[Api.Data.Mysql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)** or +**[Console.Data.Mysql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Data.MySql)** examples. Similar examples are available for other data providers as well. Nano also provides a dedicated repository for managing entity user models, the `IIdentityRepository` and `IIdentityRepository`. These repositories expose common identity operations such as login, signup, email changes, management of roles and claims, etc. Internally, the repository encapsulates functionality from `UserManager` and @@ -679,7 +679,7 @@ identity logic through a single, consistent repository. | `AssignOrReplaceRoleClaimAsync` | Role Claims | roleId, assignOrReplaceClaim | Assigns a claim to a role or replaces it if it already exists. | | `RemoveRoleClaimAsync` | Role Claims | roleId, removeClaim | Removes a claim from a role. | -Try it out yourself using the **[Api.Data.Identity](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Mysql)** example. +Try it out yourself using the **[Api.Data.Identity](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity)** example. ## Autosave The repository can be configured for autosave. When enabled, all methods that modify data will automatically persist changes to the database. No need to call @@ -688,7 +688,7 @@ multiple individual add or update calls. If you need more fine-grained control over when changes are committed, you can disable `UseAutoSave` in the repository configuration. -Try it out yourself using the **[Api.Data.Repository.Autosave](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Repository.Autosave)**. +Try it out yourself using the **[Api.Data.Repository.Autosave](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Repository.Autosave)**. ## Cache Currently, Nano does not support data caching. @@ -712,7 +712,7 @@ For large collections, `SplitQuery` is recommended. If no `QuerySplitBehavior` i This feature is particularly useful because it allows you to build full entity graphs rather than retrieving single entities. When you need only the base entity, the graph inclusion can easily be overridden through the various `IRepository` methods. -Try it out yourself using the **[Api.Data.Repository.Includes](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Repository.Includes)**. +Try it out yourself using the **[Api.Data.Repository.Includes](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Repository.Includes)**. ## Audit Audit logging is enabled by default in Nano. To enable auditing for an entity, the entity model must implement the `IEntityAuditable` interface. When implemented, the entity and all @@ -735,7 +735,7 @@ soft-deleted entities, the audit reflects the soft-delete state rather than a re The audit implementation is based on the **[EntityFramework Plus](https://github.com/zzzprojects/EntityFramework-Plus)** project. -Try it out yourself using the **[Api.Data.Audit](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Audit)**. +Try it out yourself using the **[Api.Data.Audit](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Audit)**. ## Soft Delete If you want a model to use soft-delete, simply implement the `IEntitySoftDeletable` interface. @@ -751,7 +751,7 @@ Unlike regular deletes, soft-deleting entities does not support cascading delete When dealing with soft-deleted entities together with unique indexes, conflicts can arise if one or more deleted entities have duplicate unique values. Nano automatically adjusts unique indexes by appending the `IsDeleted` property, with the exception of the primary key. -Try it out yourself using the **[Api.Data.SoftDelete](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.SoftDelete)**. +Try it out yourself using the **[Api.Data.SoftDelete](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.SoftDelete)**. ## Lazy Loading Load related data from the database only when it is first accessed, not when the parent entity is retrieved. This can reduce unnecessary queries but may cause extra database @@ -763,7 +763,7 @@ When lazy loading is enabled in the configuration, navigation properties will be [Include Annotation](#include-annotation). Normally, these properties should already be loaded, but if you retrieve entity models without including them, the serializer will trigger lazy-loading to fetch the missing data. -Try it out yourself using the **[Api.Data.LazyLoading](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.LazyLoading)**. +Try it out yourself using the **[Api.Data.LazyLoading](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.LazyLoading)**. ## Triggers Triggers in Nano are logic-based events that occur before or after an add, update, or delete operation, and are not classic SQL triggers. These triggers are executed at the @@ -807,7 +807,7 @@ for tasks other than altering the entity itself. Triggers are best used for small, self-contained tasks, such as updating an `UpdatedAt` property in an `OnUpdating` trigger or calculating an aggregate value based on entity properties. More complex logic should be handled in dedicated services within your application. -Try it out yourself using the **[Api.Data.Triggers](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Triggers)**. +Try it out yourself using the **[Api.Data.Triggers](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Triggers)**. ## Entity Events In Nano, entity events provide a straightforward way to synchronize data changes across applications. They enable automatic propagation of entity state changes based on navigation properties and @@ -821,7 +821,7 @@ create, update, or delete operations to the local model. This approach provides a simple and consistent mechanism for maintaining data synchronization across services, reducing integration complexity while preserving clear ownership boundaries between applications. -> ⚠️ Entity Events require **[Eventing](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md#nanoeventing)** to be configured in the application. +> ⚠️ Entity Events require **[Eventing](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md#nanoeventing)** to be configured in the application. Only entities implementing `IEntityIdentity` are eligible for participation in entity eventing. The attribute allows a configurable list of publish properties, which determines the data included in the generated event payload. For entities deriving from `BaseEntity`, the `CreatedAt` property is automatically included to ensure consistent timestamp synchronization between publishers and subscribers. @@ -869,4 +869,4 @@ public class MyEntity : DefaultEntity publish properties such as `IdentityUser.Email` or `IdentityUser.Phone`, allowing downstream services like email or SMS systems to subscribe and receive all required data upfront. This enables each service to independently fulfill its responsibility without additional lookups or coupling to the source system. -Try it out yourself using the **[Api.Data.EntityEvents](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.EntityEvents)**. +Try it out yourself using the **[Api.Data.EntityEvents](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.EntityEvents)**. diff --git a/Nano.Eventing.Abstractions/README.md b/Nano.Eventing.Abstractions/README.md index 4c291e34..d509f649 100644 --- a/Nano.Eventing.Abstractions/README.md +++ b/Nano.Eventing.Abstractions/README.md @@ -10,14 +10,14 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** ## Summary This NuGet provides the core configuration, interfaces, and base abstractions used across all eventing providers. This package is not meant to be included directly. -It serves as a transitive dependency for concrete eventing providers and is also included in **[Nano Application](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#nanoapp), +It serves as a transitive dependency for concrete eventing providers and is also included in **[Nano Application](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#nanoapp), allowing Nano applications to rely on eventing abstractions rather than specific implementations. -> πŸ“– Learn more about **[Nano Eventing](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md#nanoeventing)**. +> πŸ“– Learn more about **[Nano Eventing](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md#nanoeventing)**. diff --git a/Nano.Eventing.RabbitMq/README.md b/Nano.Eventing.RabbitMq/README.md index fc7f4ddf..fc28d873 100644 --- a/Nano.Eventing.RabbitMq/README.md +++ b/Nano.Eventing.RabbitMq/README.md @@ -8,21 +8,21 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** * **[Docker Compose](#docker-compose)** -* **[Kuberentes](#kuberentes)** +* **[Kubernetes](#kubernetes)** ## Summary Eventing Provider implementation for RabbitMq. -> πŸ“– Learn more about **[Nano Eventing](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md#nanoeventing)**. -> πŸ“– Learn more about **[Nano Kubernetes RabbitMq](https://github.com/Nano-Core/Nano.Kubernetes/tree/master/Nano.Kubernetes.RabbitMq)**. +> πŸ“– Learn more about **[Nano Eventing](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md#nanoeventing)**. +> πŸ“– Learn more about **[Nano Kubernetes RabbitMq](https://github.com/Nano-Core/Nano.Azure.Kubernetes/blob/master/Nano.Azure.Kubernetes.RabbitMQ/README.md#nanoazurekubernetesrabbitmq)**. -Try it out yourself using the **[Api.Eventing.RabbitMq](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Eventing.RabbitMq)** or -**[Console.Eventing.RabbitMq](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Eventing.RabbitMq)** example. +Try it out yourself using the **[Api.Eventing.RabbitMq](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Eventing.RabbitMq)** or +**[Console.Eventing.RabbitMq](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Eventing.RabbitMq)** example. ## Registration Install the **[Nano.Eventing.RabbitMq](https://www.nuget.org/packages/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq)** NuGet package. @@ -123,7 +123,7 @@ spec: key: password ``` -You also need to map the `rabbitmq` secret that is created alongside the **[Nano Azure Kuberenetes Eventing](https://github.com/Nano-Core/Nano.Azure.Kubernetes/tree/master/Nano.Azure.Kubernetes.RabbitMQ/README.md#nanoazurekubernetesrabbitmq)** +You also need to map the `rabbitmq` secret that is created alongside the **[Nano Azure Kuberenetes Eventing](https://github.com/Nano-Core/Nano.Azure.Kubernetes/blob/master/Nano.Azure.Kubernetes.RabbitMQ/README.md#nanoazurekubernetesrabbitmq)** in the `deployment.yaml` or `cronjob.yaml` for eventing authentication. > ⚠️ The `rabbitmq` secret will be reused for all applications using RabbitMQ as eventing provider. diff --git a/Nano.Eventing.RabbitMq/RabbitMqProvider.cs b/Nano.Eventing.RabbitMq/RabbitMqProvider.cs index 5a270383..f047a103 100644 --- a/Nano.Eventing.RabbitMq/RabbitMqProvider.cs +++ b/Nano.Eventing.RabbitMq/RabbitMqProvider.cs @@ -18,7 +18,7 @@ namespace Nano.Eventing.RabbitMq; /// /// /// -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq public sealed class RabbitMqProvider : IEventingProvider { /// diff --git a/Nano.Eventing/Abstractions/IEventingProvider.cs b/Nano.Eventing/Abstractions/IEventingProvider.cs index e75f0e8a..ef0b037d 100644 --- a/Nano.Eventing/Abstractions/IEventingProvider.cs +++ b/Nano.Eventing/Abstractions/IEventingProvider.cs @@ -7,7 +7,7 @@ namespace Nano.Eventing.Abstractions; /// Defines a generic interface for an eventing provider in the Nano application. /// Eventing providers are responsible for delivering and handling events, and this interface allows different ' /// implementations (e.g., RabbitMQ, Azure Service Bus, Kafka, etc.). -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md#nanoeventing +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md#nanoeventing ///
public interface IEventingProvider { diff --git a/Nano.Eventing/README.md b/Nano.Eventing/README.md index 11068ef5..0c8f575d 100644 --- a/Nano.Eventing/README.md +++ b/Nano.Eventing/README.md @@ -10,7 +10,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** @@ -83,7 +83,7 @@ The ```Eventing``` section in the configuration defines the eventing provider an } ``` -> πŸ“– Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#configuration)** here. +> πŸ“– Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#configuration)** here. ## Health Checks When health checks are enabled in the eventing configuration, Nano automatically registers a health check for the configured eventing provider. @@ -128,7 +128,7 @@ services ``` The following eventing providers are currently supported in Nano: -* **[Nano.Eventing.RabbitMq](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq)** +* **[Nano.Eventing.RabbitMq](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq)** Additional providers can be implemented by following the same pattern, allowing you to extend Nano’s eventing system to any messaging broker of your choice. diff --git a/Nano.Logging.Abstractions/Nano.Logging.Abstractions.csproj b/Nano.Logging.Abstractions/Nano.Logging.Abstractions.csproj index 92a1b11b..546f9a09 100644 --- a/Nano.Logging.Abstractions/Nano.Logging.Abstractions.csproj +++ b/Nano.Logging.Abstractions/Nano.Logging.Abstractions.csproj @@ -1,7 +1,7 @@ ο»Ώ - + diff --git a/Nano.Logging.Abstractions/README.md b/Nano.Logging.Abstractions/README.md index 170ca647..6cb3e58e 100644 --- a/Nano.Logging.Abstractions/README.md +++ b/Nano.Logging.Abstractions/README.md @@ -10,14 +10,14 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** ## Summary This NuGet provides the core configuration, interfaces, and base abstractions used across all logging providers. This package is not meant to be included directly. -It serves as a transitive dependency for concrete logging providers and is also included in **[Nano Application](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#nanoapp)**, +It serves as a transitive dependency for concrete logging providers and is also included in **[Nano Application](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#nanoapp)**, allowing Nano applications to rely on logging abstractions rather than specific implementations. -> πŸ“– Learn more about **[Nano Logging](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)**. +> πŸ“– Learn more about **[Nano Logging](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)**. diff --git a/Nano.Logging.Log4Net/Log4NetProvider.cs b/Nano.Logging.Log4Net/Log4NetProvider.cs index 958a57c0..761be247 100644 --- a/Nano.Logging.Log4Net/Log4NetProvider.cs +++ b/Nano.Logging.Log4Net/Log4NetProvider.cs @@ -14,7 +14,7 @@ namespace Nano.Logging.Log4Net; /// /// A logging provider that configures log4net as the application's logging framework. /// -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Log4Net/README.md#nanologginglog4net +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Log4Net/README.md#nanologginglog4net public sealed class Log4NetProvider : ILoggingProvider { /// diff --git a/Nano.Logging.Log4Net/README.md b/Nano.Logging.Log4Net/README.md index 03ffa757..a6077a36 100644 --- a/Nano.Logging.Log4Net/README.md +++ b/Nano.Logging.Log4Net/README.md @@ -8,7 +8,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** @@ -20,10 +20,10 @@ The provider is preconfigured to write log output to the console using a concise %utcdate{dd-MM-yyyy HH:mm:ss.ffffff} [%level{3}] %message%newline%exception ``` -> πŸ“– Learn more about **[Nano Logging](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)**. +> πŸ“– Learn more about **[Nano Logging](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)**. -Try it out yourself using the **[Api.Logging.Log4Net](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Logging.Log4Net/README.md#nanologginglog4net)** or -**[Console.Logging.Log4Net](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Logging.Log4Net)** example. +Try it out yourself using the **[Api.Logging.Log4Net](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Logging.Log4Net)** or +**[Console.Logging.Log4Net](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Logging.Log4Net)** example. ## Registration Install the **[Nano.Logging.Log4Net](https://www.nuget.org/packages/Nano.Logging.Log4Net)** NuGet package. diff --git a/Nano.Logging.Microsoft/MicrosoftProvider.cs b/Nano.Logging.Microsoft/MicrosoftProvider.cs index 5a01cca6..2078ef24 100644 --- a/Nano.Logging.Microsoft/MicrosoftProvider.cs +++ b/Nano.Logging.Microsoft/MicrosoftProvider.cs @@ -11,7 +11,7 @@ namespace Nano.Logging.Microsoft; /// /// A logging provider that configures the built-in Microsoft.Extensions.Logging framework. /// -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Microsoft/README.md#nanologgingmicrosoft +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Microsoft/README.md#nanologgingmicrosoft public sealed class MicrosoftProvider : ILoggingProvider { /// diff --git a/Nano.Logging.Microsoft/Nano.Logging.Microsoft.csproj b/Nano.Logging.Microsoft/Nano.Logging.Microsoft.csproj index 18f17b9b..7e8bbc1c 100644 --- a/Nano.Logging.Microsoft/Nano.Logging.Microsoft.csproj +++ b/Nano.Logging.Microsoft/Nano.Logging.Microsoft.csproj @@ -1,7 +1,7 @@ ο»Ώ - + diff --git a/Nano.Logging.Microsoft/README.md b/Nano.Logging.Microsoft/README.md index ac6cbf2b..db4059da 100644 --- a/Nano.Logging.Microsoft/README.md +++ b/Nano.Logging.Microsoft/README.md @@ -8,7 +8,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** @@ -20,10 +20,10 @@ The provider is preconfigured to write log output to the console using a concise {Timestamp:dd-MM-yyyy HH:mm:ss.ffffff} [{Level:u3}] {Message}{NewLine}{Exception} ``` -> πŸ“– Learn more about **[Nano Logging](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)**. +> πŸ“– Learn more about **[Nano Logging](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)**. -Try it out yourself using the **[Api.Logging.Microsoft](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Logging.Microsoft)** or -**[Console.Logging.Microsoft](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Logging.Microsoft)** example. +Try it out yourself using the **[Api.Logging.Microsoft](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Logging.Microsoft)** or +**[Console.Logging.Microsoft](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Logging.Microsoft)** example. ## Registration Install the **[Nano.Logging.Microsoft](https://www.nuget.org/packages/Nano.Logging.Microsoft)** NuGet package. diff --git a/Nano.Logging.NLog/NLogProvider.cs b/Nano.Logging.NLog/NLogProvider.cs index 00a3dbc0..fc3d8dff 100644 --- a/Nano.Logging.NLog/NLogProvider.cs +++ b/Nano.Logging.NLog/NLogProvider.cs @@ -13,7 +13,7 @@ namespace Nano.Logging.NLog; /// /// A logging provider that configures NLog as the application's logging framework. /// -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.NLog/README.md#nanologgingnlog. +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.NLog/README.md#nanologgingnlog. public sealed class NLogProvider : ILoggingProvider { /// diff --git a/Nano.Logging.NLog/Nano.Logging.NLog.csproj b/Nano.Logging.NLog/Nano.Logging.NLog.csproj index 35e7761d..c0136a5b 100644 --- a/Nano.Logging.NLog/Nano.Logging.NLog.csproj +++ b/Nano.Logging.NLog/Nano.Logging.NLog.csproj @@ -1,9 +1,9 @@ ο»Ώ - - - + + + diff --git a/Nano.Logging.NLog/README.md b/Nano.Logging.NLog/README.md index 9e455428..f9a45cf6 100644 --- a/Nano.Logging.NLog/README.md +++ b/Nano.Logging.NLog/README.md @@ -8,7 +8,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** @@ -20,10 +20,10 @@ The provider is preconfigured to write log output to the console using a concise ${date:format=dd-MM-yyyy HH\\:mm\\:ss.ffffff} [${level:uppercase=true:truncate=3}] ${message}${onexception:${newline}${exception:format=toString}} ``` -> πŸ“– Learn more about **[Nano Logging](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)**. +> πŸ“– Learn more about **[Nano Logging](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)**. -Try it out yourself using the **[Api.Logging.NLog](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Logging.NLog)** or -**[Console.Logging.NLog](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Logging.NLog)** example. +Try it out yourself using the **[Api.Logging.NLog](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Logging.NLog)** or +**[Console.Logging.NLog](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Logging.NLog)** example. ## Registration Install the **[Nano.Logging.NLog](https://www.nuget.org/packages/Nano.Logging.NLog)** NuGet package. diff --git a/Nano.Logging.Serilog/Nano.Logging.Serilog.csproj b/Nano.Logging.Serilog/Nano.Logging.Serilog.csproj index 958d63a1..b2822feb 100644 --- a/Nano.Logging.Serilog/Nano.Logging.Serilog.csproj +++ b/Nano.Logging.Serilog/Nano.Logging.Serilog.csproj @@ -1,7 +1,7 @@ ο»Ώ - + diff --git a/Nano.Logging.Serilog/README.md b/Nano.Logging.Serilog/README.md index 2d03adef..faaf75d6 100644 --- a/Nano.Logging.Serilog/README.md +++ b/Nano.Logging.Serilog/README.md @@ -8,7 +8,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** @@ -20,10 +20,10 @@ The provider is preconfigured to write log output to the console using a concise {Timestamp:dd-MM-yyyy HH:mm:ss.ffffff} [{Level:u3}] {Message}{NewLine}{Exception} ``` -> πŸ“– Learn more about **[Nano Logging](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)**. +> πŸ“– Learn more about **[Nano Logging](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)**. -Try it out yourself using the **[Api.Logging.Serilog](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Logging.Serilog)** or -**[Console.Logging.Serilog](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Logging.Serilog)** example. +Try it out yourself using the **[Api.Logging.Serilog](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Logging.Serilog)** or +**[Console.Logging.Serilog](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Logging.Serilog)** example. ## Registration Install the **[Nano.Logging.Serilog](https://www.nuget.org/packages/Nano.Logging.Serilog)** NuGet package. diff --git a/Nano.Logging.Serilog/SerilogProvider.cs b/Nano.Logging.Serilog/SerilogProvider.cs index 8c01061f..d922f586 100644 --- a/Nano.Logging.Serilog/SerilogProvider.cs +++ b/Nano.Logging.Serilog/SerilogProvider.cs @@ -10,7 +10,7 @@ namespace Nano.Logging.Serilog; /// /// A logging provider that configures Serilog as the application's logging framework. /// -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Serilog/README.md#nanologgingserilog +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Serilog/README.md#nanologgingserilog public sealed class SerilogProvider : ILoggingProvider { /// diff --git a/Nano.Logging/Abstractions/ILoggingProvider.cs b/Nano.Logging/Abstractions/ILoggingProvider.cs index 075c47ac..5680eb48 100644 --- a/Nano.Logging/Abstractions/ILoggingProvider.cs +++ b/Nano.Logging/Abstractions/ILoggingProvider.cs @@ -7,7 +7,7 @@ namespace Nano.Logging.Abstractions; /// Represents a logging provider for the application. /// Implementations define how logging is configured and integrated into the service collection. /// -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging public interface ILoggingProvider { /// diff --git a/Nano.Logging/Extensions/ServiceCollectionExtensions.cs b/Nano.Logging/Extensions/ServiceCollectionExtensions.cs index f93d488a..ada8a091 100644 --- a/Nano.Logging/Extensions/ServiceCollectionExtensions.cs +++ b/Nano.Logging/Extensions/ServiceCollectionExtensions.cs @@ -19,7 +19,7 @@ public static class ServiceCollectionExtensions /// The type of the logging provider to register. Must implement and have a parameterless constructor. /// The to add the logging provider to. /// The same instance for chaining. - /// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging. + /// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging. /// Thrown if is null. public static IServiceCollection AddNanoLogging(this IServiceCollection services) where TProvider : ILoggingProvider diff --git a/Nano.Logging/Nano.Logging.csproj b/Nano.Logging/Nano.Logging.csproj index 626c7246..61d2d887 100644 --- a/Nano.Logging/Nano.Logging.csproj +++ b/Nano.Logging/Nano.Logging.csproj @@ -1,7 +1,7 @@ ο»Ώ - + diff --git a/Nano.Logging/README.md b/Nano.Logging/README.md index 211d4dbf..2652a57d 100644 --- a/Nano.Logging/README.md +++ b/Nano.Logging/README.md @@ -10,7 +10,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** @@ -68,7 +68,7 @@ The ```Logging``` section in the configuration defines the logging provider and } ``` -> πŸ“– Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#configuration)** here. +> πŸ“– Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#configuration)** here. ## Logging Providers Nano provides several logging providers, so usually there is no need to implement a custom provider for your application. @@ -81,7 +81,7 @@ and then register your provider with the application using `.AddNanoLogging πŸ“– Learn more about **[Nano Storage](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage/README.md#nanostorage)**. +> πŸ“– Learn more about **[Nano Storage](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md#nanostorage)**. diff --git a/Nano.Storage.Azure/AzureFileshareProvider.cs b/Nano.Storage.Azure/AzureFileshareProvider.cs index 0d762fda..982906e0 100644 --- a/Nano.Storage.Azure/AzureFileshareProvider.cs +++ b/Nano.Storage.Azure/AzureFileshareProvider.cs @@ -14,7 +14,7 @@ namespace Nano.Storage.Azure; /// This Nano provider registers Azure File Share–related services based on the supplied . /// When health checks are enabled, it adds an Azure File Share health check to the application's health check pipeline. /// -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage.Azure/README.md/nanostorageazure +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage.Azure/README.md/nanostorageazure public sealed class AzureFileshareProvider : IStorageProvider { /// diff --git a/Nano.Storage.Azure/README.md b/Nano.Storage.Azure/README.md index 5361e8bd..e4a52e7e 100644 --- a/Nano.Storage.Azure/README.md +++ b/Nano.Storage.Azure/README.md @@ -8,12 +8,12 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** * **[Docker Compose](#docker-compose)** -* **[Kuberentes](#kuberentes)** +* **[Kubernetes](#kubernetes)** * **[GitHub Actions](#github-actions)** ## Summary @@ -24,11 +24,11 @@ enables your application to read from and write to the storage directly, while t No changes to your application code are required and you can interact with the file share using the `IPathProvider` interface. -> πŸ“– Learn more about **[Nano Storage](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage/README.md/nanostorage)**. -> πŸ“– Learn more about **[Nano Azure File Share](https://github.com/Nano-Core/Nano.Azure/tree/master/Nano.Azure.Storage/README.md#nanoazurestorage)**. +> πŸ“– Learn more about **[Nano Storage](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md#nanostorage)**. +> πŸ“– Learn more about **[Nano Azure File Share](https://github.com/Nano-Core/Nano.Azure/blob/master/Nano.Azure.Storage/README.md#nanoazurestorage)**. -Try it out yourself using the **[Api.Storage.Azure](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Storage.Azure)** or -**[Console.Storage.Azure](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Storage.Azure)** example. +Try it out yourself using the **[Api.Storage.Azure](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Storage.Azure)** or +**[Console.Storage.Azure](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Storage.Azure)** example. ## Registration Install the **[Nano.Storage.Azure](https://www.nuget.org/packages/Nano.Storage.Azure)** NuGet package. diff --git a/Nano.Storage.Local/LocalFileShareProvider.cs b/Nano.Storage.Local/LocalFileShareProvider.cs index 8044c3ea..16316972 100644 --- a/Nano.Storage.Local/LocalFileShareProvider.cs +++ b/Nano.Storage.Local/LocalFileShareProvider.cs @@ -23,7 +23,7 @@ namespace Nano.Storage.Local; /// When health checks are enabled via , /// a lightweight file system health check is registered to verify that the configured storage path exists and is accessible. /// -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage.Local/README.md/nanostoragelocal +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage.Local/README.md/nanostoragelocal /// public sealed class LocalFileShareProvider : IStorageProvider { diff --git a/Nano.Storage.Local/README.md b/Nano.Storage.Local/README.md index 4e03d9c0..bc9e03cc 100644 --- a/Nano.Storage.Local/README.md +++ b/Nano.Storage.Local/README.md @@ -8,12 +8,12 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** * **[Docker Compose](#docker-compose)** -* **[Kuberentes](#kuberentes)** +* **[Kubernetes](#kubernetes)** * **[GitHub Actions](#github-actions)** ## Summary @@ -21,10 +21,10 @@ Storage provider implementation for local file shares. This provider is intended for mapping a Kubernetes persistent volume as a local file system. Registering it with Nano gives you access to the `IPathProvider` interface. -> πŸ“– Learn more about **[Nano Storage](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage/README.md/nanostorage)**. +> πŸ“– Learn more about **[Nano Storage](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md#nanostorage)**. -Try it out yourself using the **[Api.Storage.Local](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Storage.Local)** or -**[Console.Storage.Local](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console.Storage.Local)** example. +Try it out yourself using the **[Api.Storage.Local](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Storage.Local)** or +**[Console.Storage.Local](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console.Storage.Local)** example. ## Registration Install the **[Nano.Storage.Local](https://www.nuget.org/packages/Nano.Storage.Local)** NuGet package. diff --git a/Nano.Storage/Abstractions/IStorageProvider.cs b/Nano.Storage/Abstractions/IStorageProvider.cs index 5596f136..d56b8e27 100644 --- a/Nano.Storage/Abstractions/IStorageProvider.cs +++ b/Nano.Storage/Abstractions/IStorageProvider.cs @@ -11,7 +11,7 @@ namespace Nano.Storage.Abstractions; /// Implementations are responsible for registering all required services (such as clients, health checks, and path providers) /// into the dependency injection container based on the supplied . /// -/// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage/README.md/nanostorage +/// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md/nanostorage public interface IStorageProvider { /// diff --git a/Nano.Storage/Extensions/ServiceCollectionExtensions.cs b/Nano.Storage/Extensions/ServiceCollectionExtensions.cs index 382b7acd..2018ccb4 100644 --- a/Nano.Storage/Extensions/ServiceCollectionExtensions.cs +++ b/Nano.Storage/Extensions/ServiceCollectionExtensions.cs @@ -24,7 +24,7 @@ public static class ServiceCollectionExtensions /// Registers and in the dependency injection container. /// /// - /// Documentation: https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage/README.md/nanostorage + /// Documentation: https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md/nanostorage /// Thrown when is null. public static IServiceCollection AddNanoStorage(this IServiceCollection services) where TProvider : IStorageProvider diff --git a/Nano.Storage/Nano.Storage.csproj b/Nano.Storage/Nano.Storage.csproj index 590f9b35..1d0fffb2 100644 --- a/Nano.Storage/Nano.Storage.csproj +++ b/Nano.Storage/Nano.Storage.csproj @@ -1,7 +1,7 @@ ο»Ώ - + diff --git a/Nano.Storage/README.md b/Nano.Storage/README.md index a00d76b7..cd4d528d 100644 --- a/Nano.Storage/README.md +++ b/Nano.Storage/README.md @@ -10,7 +10,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[Summary](#summary)** * **[Registration](#registration)** * **[Configuration](#configuration)** @@ -87,7 +87,7 @@ The ```Storage``` section in the configuration defines the storage provider and } ``` -> πŸ“– Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#configuration)** here. +> πŸ“– Learn more about **[Application Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#configuration)** here. ## Health Checks When health checks are enabled in the storage configuration, Nano automatically registers a health check for the configured storage provider. @@ -110,7 +110,7 @@ health check system and can be used by monitoring tools, load balancers, or cont ``` > ⚠️ In order for storage healthcheck to take effect, healthchecks must be enabled for the application. -Read more about **[Nano Health Check](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#health-checks)**. +Read more about **[Nano Health Check](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#health-checks)**. ## Storage Providers Nano provides several storage providers, so usually there is no need to implement a custom provider for your application. @@ -123,5 +123,5 @@ and then register your provider with the application using `.AddNanoStorage πŸ“– Explore the full **[Nano Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)**. +> πŸ“– Explore the full **[Nano Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)**. > ⚠️ While this package provides everything out of the box, it’s generally recommended to reference individual Nano packages as needed in your application. -> Learn more about **[Nano NuGet Packages](https://github.com/Nano-Core/Nano.Library#nuget-packages)**. +> Learn more about **[Nano NuGet Packages](https://github.com/Nano-Core/Nano.Library#-nuget-packages)**. diff --git a/QUICK_START.md b/QUICK_START.md index 79b987e4..9be67199 100644 --- a/QUICK_START.md +++ b/QUICK_START.md @@ -5,7 +5,7 @@ *** ## Table of Contents -* **[Home](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#nanolibrary)** +* **[Home](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#nanolibrary)** * **[1. Choosing Application Type](#choosing-application-type)** * **[2. Application Configuration](#application-configuration)** * **[3. Adding Logging Provider](#adding-logging-provider)** @@ -16,23 +16,23 @@ * **[8. Congratz, Launch](#congratz-launch)** ## Choosing Application Type -The first step is to choose the application type that best fits your use case. Nano currently supports three application types: **[Api](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#nanoapi)**, -**[Web](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Web/README.md#nanoweb)**, and **[Console](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Console/README.md#nanoconsole)**. Each application +The first step is to choose the application type that best fits your use case. Nano currently supports three application types: **[Api](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#nanoapi)**, +**[Web](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Web/README.md#nanoweb)**, and **[Console](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Console/README.md#nanoconsole)**. Each application type is provided as a _blank_ solution template. These templates include the essential project structure, configuration, and dependencies required to get started, without adding unnecessary complexity. To begin, copy or clone the solution that matches your chosen application type. -- **[Api._Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** -- **[Console._Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)** -- **[Web._Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Web._Blank)** +- **[Api._Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** +- **[Console._Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)** +- **[Web._Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Web._Blank)** These templates provide a minimal starting point for each application type. Then rename the solution and projects to fit your application, updating namespaces and identifiers as needed throughout the files. At this point, you have a fully functional Nano baseline solution, capable of running locally and deploying to Kubernetes via GitHub Actions. For a detailed overview of the -included projects, files, and overall structure, see **[Solution Composition](https://github.com/Nano-Core/Nano.Library/tree/master/README.md#solution-composition)**. +included projects, files, and overall structure, see **[Solution Composition](https://github.com/Nano-Core/Nano.Library/blob/master/README.md#solution-composition)**. The `program.cs` looks like this. @@ -94,7 +94,7 @@ sections are set to `null`. Features are enabled on an opt-in basis by configuri } ```` -> πŸ“– Learn more about **[Nano Api Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md/README.md#configuration)**. +> πŸ“– Learn more about **[Nano Api Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md/README.md#configuration)**. For Console applications, the configuration is minimal and straightforward. @@ -107,12 +107,12 @@ For Console applications, the configuration is minimal and straightforward. ``` -> πŸ“– Learn more about **[Nano Console Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Console/README.md#configuration)**. +> πŸ“– Learn more about **[Nano Console Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Console/README.md#configuration)**. ## Adding Logging Provider Now that the application has been created and configured, the next step is to add providers that extend the commonly used capabilities of your Nano application. -First, most applications, if not all, require a **[Logging Provider](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)**. Register it in +First, most applications, if not all, require a **[Logging Provider](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)**. Register it in the `ConfigureServices(...)` method in `Program.cs`. ```csharp @@ -130,10 +130,10 @@ format. The choice of provider is primarily a matter of preference and existing | Provider | Type | Description | | ------------------------------------------------------------------------------------------------------------------------------ | --------------------- | --------------------------------------------------------------------------------------- | -| **[Log4Net](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Log4Net/README.md#nanologginglog4net)** | `Log4NetProvider` | Console logging using a log4net-based implementation. | -| **[Microsoft](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Microsoft/README.md#nanologgingmicrosoft)** | `MicrosoftProvider` | Console logging using the built-in Microsoft.Extensions.Logging abstractions. | -| **[NLog](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.NLog/README.md#nanologgingnlog)** | `NLog` | Console logging using an NLog-based implementation. | -| **[Serilog](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Serilog/README.md#nanologgingserilog)** | `SerilogProvider` | Console logging using a Serilog-based implementation with structured logging support. | +| **[Log4Net](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Log4Net/README.md#nanologginglog4net)** | `Log4NetProvider` | Console logging using a log4net-based implementation. | +| **[Microsoft](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Microsoft/README.md#nanologgingmicrosoft)** | `MicrosoftProvider` | Console logging using the built-in Microsoft.Extensions.Logging abstractions. | +| **[NLog](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.NLog/README.md#nanologgingnlog)** | `NLog` | Console logging using an NLog-based implementation. | +| **[Serilog](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Serilog/README.md#nanologgingserilog)** | `SerilogProvider` | Console logging using a Serilog-based implementation with structured logging support. | The logging configuration is straightforward, with sensible default values provided, as shown below. @@ -145,10 +145,10 @@ The logging configuration is straightforward, with sensible default values provi } ``` -> πŸ“– Learn more about **[Logging Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#configuration)**. +> πŸ“– Learn more about **[Logging Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#configuration)**. ## Adding Data Provider -Moving on to the **[Data Provider](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md)**. This provider is more optional than logging, but still required by +Moving on to the **[Data Provider](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md)**. This provider is more optional than logging, but still required by most applications. Register the Nano Data Provider in the `ConfigureServices(...)` method in `Program.cs`. @@ -168,11 +168,11 @@ while exposing a consistent abstraction layer. | Provider | Type | Description | | -------------------------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------ | -| **[InMemory](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.InMemory/README.md#nanodatainmemory)** | `InMemoryProvider` | In-memory data provider intended for testing and lightweight scenarios. | -| **[MySql](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.MySql/README.md#nanodatamysql)** | `MySqlProvider` | MySQL data provider using Pomelo.EntityFrameworkCore.MySql. | -| **[PostgreSQL](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.PostgreSQL/README.md#nanodatapostgresql)** | `PostgreSqlProvider` | PostgreSQL data provider using Npgsql. | -| **[SqLite](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqLite/README.md#nanodatasqlite)** | `SqLiteProvider` | SQLite data provider. | -| **[SqlServer](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqlServer/README.md#nanodatasqlserver)** | `SqlServerProvider` | SQL Server data provider. | +| **[InMemory](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.InMemory/README.md#nanodatainmemory)** | `InMemoryProvider` | In-memory data provider intended for testing and lightweight scenarios. | +| **[MySql](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.MySql/README.md#nanodatamysql)** | `MySqlProvider` | MySQL data provider using Pomelo.EntityFrameworkCore.MySql. | +| **[PostgreSQL](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.PostgreSQL/README.md#nanodatapostgresql)** | `PostgreSqlProvider` | PostgreSQL data provider using Npgsql. | +| **[SqLite](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqLite/README.md#nanodatasqlite)** | `SqLiteProvider` | SQLite data provider. | +| **[SqlServer](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqlServer/README.md#nanodatasqlserver)** | `SqlServerProvider` | SQL Server data provider. | The `TContext` defines the Nano `BaseDbContext` implementation. You must create an Entity Framework `DbContext` that derives from `BaseDbContext`. @@ -213,9 +213,9 @@ The data configuration is straightforward and allows features to be easily enabl ``` Most importantly, the required `ConnectionString` must be configured. -Also, configuring **[Data Health Check](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#health-check)** is recommended to ensure system observability. +Also, configuring **[Data Health Check](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#health-check)** is recommended to ensure system observability. -> πŸ“– Learn more about **[Data Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#configuration)**. +> πŸ“– Learn more about **[Data Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#configuration)**. Once the data provider has been registered and the configuration is in place, you can start defining Nano entity models and data mappings. Create an entity model by deriving from `BaseEntity` and adding properties. Then implement the mapping by creating a class that derives from `BaseEntityMapping`, where `TEntity` is your model type. In @@ -247,30 +247,30 @@ public class MyEntityMapping : BaseEntityMapping > ⚠️ Always ensure you call `base.Configure(builder)`, otherwise inherited Nano properties may not function correctly. More advanced uses of Nano entity models are also available, including support for user entities used with -**[Data Identity](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#didentity)** features, as well as mapping database views as read-only entities. +**[Data Identity](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#didentity)** features, as well as mapping database views as read-only entities. -> πŸ“– Learn more about **[Nano Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models)** and -**[Nano Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data#configuration/README.md#data-mappings)**. +> πŸ“– Learn more about **[Nano Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models)** and +**[Nano Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data#configuration/README.md#data-mappings)**. -For entity models where you want **[Soft Delete](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#soft-delete)** instead of the default hard delete behavior, +For entity models where you want **[Soft Delete](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#soft-delete)** instead of the default hard delete behavior, implement the `IEntitySoftDelete` interface on your entity model. -Nano also supports **[Entity Events](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#entity-events)**, enabling asynchronous synchronization of entity models +Nano also supports **[Entity Events](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#entity-events)**, enabling asynchronous synchronization of entity models between applications. To publish changes for an entity, add the `[Publish]` attribute to the entity model class definition. In the consuming application, create a corresponding entity model with the same name and annotate it with the `[Subscribe]` attribute. It will then receive events whenever the entity is created, updated, or deleted. Additional properties can be included in published events, making it easy to synchronize commonly shared data across different parts of the system. Entity events require an Eventing Provider to be registered (see further sections). -Another noteworthy feature of the data provider is the **[`[Include] Attribute`](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#include-annotation)**. Navigation +Another noteworthy feature of the data provider is the **[`[Include] Attribute`](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#include-annotation)**. Navigation properties on entity models can be annotated with this attribute to create a graph-lite structure. When an entity is retrieved through the -**[Data Repositories](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories)**, all included navigation properties are automatically loaded as part +**[Data Repositories](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories)**, all included navigation properties are automatically loaded as part of the query. -> πŸ“– Learn more about the other **[Nano Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md)** features. +> πŸ“– Learn more about the other **[Nano Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md)** features. ## Adding Eventing Provider -Adding an **[Eventing Provider](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md)** (message queueing) follows the same pattern as the other Nano providers. +Adding an **[Eventing Provider](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md)** (message queueing) follows the same pattern as the other Nano providers. ```csharp ... @@ -286,7 +286,7 @@ The `TProvider` defines the eventing implementation used by your application. Th | Provider | Type | Description | | ------------------------------------------------------------------------------------------------------------------------------ | ------------------- | ------------------------------------------------------------------------------------------------------- | -| **[RabbitMq](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq)** | `RabbitMqProvider` | Message broker-based eventing using RabbitMQ for reliable asynchronous communication between services. | +| **[RabbitMq](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq)** | `RabbitMqProvider` | Message broker-based eventing using RabbitMQ for reliable asynchronous communication between services. | And again, the configuration is straightforward. @@ -308,9 +308,9 @@ And again, the configuration is straightforward. ``` Most importantly, the required `Host` and `Credentials` must be configured. -Also, configuring **[Data Health Check](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md#health-check)** is recommended to ensure system observability. +Also, configuring **[Data Health Check](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md#health-check)** is recommended to ensure system observability. -> πŸ“– Learn more about **[Eventing Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md#configuration)**. +> πŸ“– Learn more about **[Eventing Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md#configuration)**. When an eventing provider has been registered, it exposes the `IEventing` interface, which can be injected to publish custom event contracts from anywhere in the application. @@ -346,10 +346,10 @@ public class MyEventingHandler() : BaseEventHandler(routingKey: null, o } ``` -> πŸ“– Learn more about the other **[Nano Eventing](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md#nanoeventing)** features. +> πŸ“– Learn more about the other **[Nano Eventing](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md#nanoeventing)** features. ## Adding Storage Provider -The **[Storage Provider](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage/README.md/README.md#nanostorage)** can be added by registering +The **[Storage Provider](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md/README.md#nanostorage)** can be added by registering it in the `ConfigureServices(...)` method in `Program.cs`. ```csharp @@ -366,8 +366,8 @@ The `TProvider` defines the storage implementation used by your application. The | Provider | Type | Description | | ------------------------------------------------------------------------------------------------------------------- | ------------------------- | ------------------------------------------------------------ | -| **[Azure](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage.Azure/README.md#nanostorageazure)** | `AzureFileshareProvider` | Nano Storage provider implementation for Azure File Shares. | -| **[Local](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage.Local/README.md#nanostoragelocal)** | `LocalFileShareProvider` | Storage provider for local file system–backed storage. | +| **[Azure](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage.Azure/README.md#nanostorageazure)** | `AzureFileshareProvider` | Nano Storage provider implementation for Azure File Shares. | +| **[Local](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage.Local/README.md#nanostoragelocal)** | `LocalFileShareProvider` | Storage provider for local file system–backed storage. | And configuration. @@ -383,19 +383,19 @@ And configuration. ``` Most importantly, the required `ShareName` and `Credentials` must be configured. -Also, configuring **[Storage Health Check](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage/README.md#health-check)** is recommended to ensure system observability. +Also, configuring **[Storage Health Check](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md#health-check)** is recommended to ensure system observability. -> πŸ“– Learn more about **[Storage Configuration](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage/README.md#configuration)**. +> πŸ“– Learn more about **[Storage Configuration](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md#configuration)**. Once a storage provider has been registered, it exposes the `IPathProvider` interface. This can be injected anywhere in the application to provide easy access to the configured root path of the file storage location. -> πŸ“– Learn more about the other **[Nano Storage](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage/README.md)** features. +> πŸ“– Learn more about the other **[Nano Storage](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md)** features. ## 8. Implementing Your Application Domain Now it is time to implement the actual domain of your application. At this stage, you start defining the application-specific behavior and structure. Depending on the application -type, different building blocks are available. For web-based applications, you typically define **[Controllers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#controllers)**, -while for console-based applications, you implement **[Console Workers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Console/README.md#console-workers)**. +type, different building blocks are available. For web-based applications, you typically define **[Controllers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#controllers)**, +while for console-based applications, you implement **[Console Workers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Console/README.md#console-workers)**. #### API-based applications First, here is an example of an entity controller that works with your data model and exposes standard Create, Read, Update, and Delete (CRUD) endpoints. @@ -436,7 +436,7 @@ public class MyEntityQueryCriteria : BaseQueryCriteria } ``` -Controllers can later be consumed by other applications through the **[Nano Api Client](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#api-clients)**. To do this, +Controllers can later be consumed by other applications through the **[Nano Api Client](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#api-clients)**. To do this, create an implementation that derives from `BaseApiClient` and include itβ€”along with the relevant entity modelsβ€”in the consuming application. This provides a simple and consistent way to connect to the service and use its entity functionality. diff --git a/README.md b/README.md index b4123acf..187dfadc 100644 --- a/README.md +++ b/README.md @@ -29,14 +29,14 @@     βš–️ **[Licenses](#-licenses)** ### Documentation -    πŸš€ **[Applications](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#README.md#nanoapp)** -          πŸ“‘ **[Api](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#nanoappapi)** -          βš™οΈ **[Console](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Console/README.md#nanoappconsole)** -          πŸŒ **[Web](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Web/README.md#nanoappweb)** -    πŸ“œ **[Logging](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)** -    πŸ›’️ **[Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata)** -    βš‘ **[Eventing](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md#nanoeventing)** -    πŸ—‚ **[Storage](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage/README.md#nanostorage)** +    πŸš€ **[Applications](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#nanoapp)** +          πŸ“‘ **[Api](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#nanoappapi)** +          βš™οΈ **[Console](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Console/README.md#nanoappconsole)** +          πŸŒ **[Web](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Web/README.md#nanoappweb)** +    πŸ“œ **[Logging](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)** +    πŸ›’️ **[Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata)** +    βš‘ **[Eventing](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md#nanoeventing)** +    πŸ—‚ **[Storage](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md#nanostorage)** ## πŸ“Œ Summary Nano is a lightweight library for rapidly building modern .NET applications. @@ -59,23 +59,23 @@ more, Nano helps cover the full application lifecycle, from development and conf To support production-grade environments, Nano also provides the foundation for running applications securely and at scale in Kubernetes on Azure. Nano includes ready-to-use templates for Kubernetes and GitHub Actions, enabling consistent CI/CD pipelines and infrastructure provisioning. -> πŸ“– Learn more about **[Nano.Azure](https://github.com/Nano-Core/Nano.Azure/README.md#nanoazure)** and **[Nano.Azure.Kubernetes](https://github.com/Nano-Core/Nano.Azure.Kubernetes/README.md#nanoazurekubernetes)** +> πŸ“– Learn more about **[Nano.Azure](https://github.com/Nano-Core/Nano.Azure/blob/master/README.md#nanoazure)** and **[Nano.Azure.Kubernetes](https://github.com/Nano-Core/Nano.Azure.Kubernetes/blob/master/README.md#nanoazurekubernetes)** Together, these capabilities make Nano a strong choice for designing, building, and maintaining microservice architectures, even for small teams. ### πŸš€ Launch Your App in Under 60 Minutes -Get started quickly by building your own Nano **[Api](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md&nanoapi)**, **[Web](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Web/README.md#nanoweb)**, -or **[Console](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Console/README.md#nanoconsole)** application, and have it configured and running in less than an hour. Nano follows a flexible, -opt-in approach, allowing you to configure and enable only the features you need. For the four core pillars of distributed systems, **[Logging](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging/README.md#nanologging)**, -**[Data](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#nanodata)**, **[Eventing](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing/README.md#nanoeventing)**, -and **[Storage](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage#/README.md#nanostorage)**, Nano provides pluggable providers that integrate seamlessly into your application. +Get started quickly by building your own Nano **[Api](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#nanoappapi)**, **[Web](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Web/README.md#nanoappweb)**, +or **[Console](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Console/README.md#nanoappconsole)** application, and have it configured and running in less than an hour. Nano follows a flexible, +opt-in approach, allowing you to configure and enable only the features you need. For the four core pillars of distributed systems, **[Logging](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging/README.md#nanologging)**, +**[Data](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#nanodata)**, **[Eventing](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing/README.md#nanoeventing)**, +and **[Storage](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage/README.md#nanostorage)**, Nano provides pluggable providers that integrate seamlessly into your application. Simply choose and configure the providers that match your requirements for each pillar, and Nano handles the rest. -It’s recommended to start with the **[Quick Start Guide](https://github.com/Nano-Core/Nano.Library/tree/master/QUICK_START.md)** to get familiar with Nano, and then continue exploring +It’s recommended to start with the **[Quick Start Guide](https://github.com/Nano-Core/Nano.Library/blob/master/QUICK_START.md#quick-start-guide)** to get familiar with Nano, and then continue exploring the documentation for applications and providers to learn how to configure, use, and customize it. You can also dive into **[Nano.Lessons](https://github.com/Nano-Core/Nano.Lessons)**, which contains **100+** focused examples that demonstrate individual features in isolation. -> πŸ’‘ Explore API requests for all lessons in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> πŸ’‘ Explore API requests for all lessons in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore)**. ## ✨ Highlighted features @@ -90,7 +90,7 @@ In addition to built-in capabilities, Nano supports extending API clients with c functionality. Authentication, headers, and request metadata are handled automatically, including secure propagation between services. This ensures reliable, consistent, and secure communication across all connected Nano applications without additional boilerplate. -> πŸ“– Learn more about **[Api Clients](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README#api-clients)** +> πŸ“– Learn more about **[Api Clients](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#api-clients)** ### ✨ Entity Eventing Entity Events in Nano provide a lightweight, attribute-driven mechanism for synchronizing entity changes across distributed applications. They automatically propagate create, update, @@ -104,7 +104,7 @@ dependent entities to propagate back to root aggregates. This model reduces coupling between services while maintaining data consistency across boundaries. -> πŸ“– Learn more about **[Entity Eventing](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#entity-eventing)** +> πŸ“– Learn more about **[Entity Eventing](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#entity-events)** ### ✨ Include Annotation (graph-lite) Nano’s Include feature automatically loads navigation properties when retrieving entities through repositories, enabling full entity graphs with recursive inclusion up to a configured @@ -113,7 +113,7 @@ depth. It supports both references and collections, simplifying data access for This is especially useful when you want to work with complete object graphs instead of manually composing related data. However, inclusion can be selectively controlled per query, allowing you to retrieve only the main entity when full graphs are not needed. -> πŸ“– Learn more about **[Include Annotations](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#include-annotation)** +> πŸ“– Learn more about **[Include Annotations](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#include-annotation)** ### ✨ Cascading Health Checks Nano provides built-in health checks exposed through a /healthz endpoint for monitoring application status. @@ -123,7 +123,7 @@ failures propagate through related components and applications to provide a cons In addition, custom health checks can be registered during application startup, allowing application-specific components to integrate seamlessly into the same monitoring system. -> πŸ“– Learn more about **[Api Health Checks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#health-checks)** +> πŸ“– Learn more about **[Api Health Checks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#health-checks)** ## πŸ›οΈ Nano Architectures Nano supports multiple distributed architecture styles, depending on the complexity and communication patterns of your system. @@ -134,7 +134,7 @@ Nano supports multiple distributed architecture styles, depending on the complex | Microservice Orchestration (Top-Down) | API-driven orchestration where a central API coordinates downstream services. | | Microservice Orchestration (Service-to-Service) | Decentralized communication where services interact directly with each other. | -![Nano Application Architecture](https://raw.githubusercontent.com/Nano-Core/Nano.Library/refs/heads/10.0.0-rc7/.assets/Nano-Application-Architecture.png) +![Nano Application Architecture](https://raw.githubusercontent.com/Nano-Core/Nano.Library/blob/.assets/Nano-Application-Architecture.png) ## βš™οΈ Required Tools Before getting started, make sure you have the following tools installed and configured.