diff --git a/PostFundManagement.Api/Program.cs b/PostFundManagement.Api/Program.cs index becd553..11b6485 100644 --- a/PostFundManagement.Api/Program.cs +++ b/PostFundManagement.Api/Program.cs @@ -15,6 +15,8 @@ builder.Services.AddScoped(); builder.Services.AddEndpoints(Assembly.GetExecutingAssembly()); builder.Services.AddApiServices(builder.Configuration); +builder.Services.AddRegisterServices(builder.Configuration); +builder.Services.AddEndpointAndServiceCaching(builder.Configuration); builder.Services.AddMediator(); builder.Services.AddSecurityApiSdk(builder.Configuration); @@ -27,7 +29,6 @@ builder.Services.AddQuartzScheduler(DefaultSchedulerName, builder.Configuration) builder.Services.AddEmailServices(builder.Configuration); builder.Services.AddHashServices(builder.Configuration); builder.Services.AddGarageS3(builder.Configuration); -builder.Services.AddRegisterServices(); builder.Services.AddHttpClient(); builder.Services.AddDataProtectionDatabase(builder.Configuration); @@ -98,12 +99,12 @@ app.UseHsts(); app.UseHttpsRedirection(); app.UseRouting(); +app.UseOutputCache(); app.UseAuthentication(); app.UseAuthorization(); ApiVersionSet versionSet = app.NewApiVersionSet("v1") .HasApiVersion(new ApiVersion(1)) - .HasApiVersion(new ApiVersion(2)) .ReportApiVersions() .Build(); @@ -111,7 +112,7 @@ var versionGroups = new Dictionary { { 1, app.MapGroup("v{version:apiVersion}").WithApiVersionSet(versionSet) - .RequireAuthorization("ApiScope").AddEndpointFilter() + .RequireAuthorization("ApiScope").AddEndpointFilter() } }; diff --git a/PostFundManagement.Application/Extensions/Api.cs b/PostFundManagement.Application/Extensions/Api.cs index db3c0a8..50af457 100644 --- a/PostFundManagement.Application/Extensions/Api.cs +++ b/PostFundManagement.Application/Extensions/Api.cs @@ -6,6 +6,21 @@ namespace PostFundManagement.Application.Extensions; public static class Api { + public static IServiceCollection AddEndpointAndServiceCaching(this IServiceCollection services, IConfiguration configuration) + { + services.AddStackExchangeRedisOutputCache(options => + { + options.Configuration = configuration.GetConnectionString("Redis"); + options.ConfigurationOptions?.ClientName = "PFM-API"; + options.InstanceName = "PFM-API_"; + }); + + services.AddOutputCache(options => + options.AddBasePolicy(builder => builder.Expire(TimeSpan.FromMinutes(2)))); + + return services; + } + public static void ConfigureCookieOidcSameSiteSupport(this IServiceCollection services) => services.Configure(options => { diff --git a/PostFundManagement.Application/Extensions/General.cs b/PostFundManagement.Application/Extensions/General.cs index 8aa88c9..f12cedf 100644 --- a/PostFundManagement.Application/Extensions/General.cs +++ b/PostFundManagement.Application/Extensions/General.cs @@ -1,11 +1,12 @@ -using PostFundManagement.Application.Abstractions; +using Microsoft.Extensions.Caching.Hybrid; +using PostFundManagement.Application.Abstractions; using PostFundManagement.Domain.Abstractions; namespace PostFundManagement.Application.Extensions; public static class General { - public static IServiceCollection AddRegisterServices(this IServiceCollection services) + public static IServiceCollection AddRegisterServices(this IServiceCollection services, IConfiguration configuration) { var serviceType = typeof(IService); @@ -14,6 +15,15 @@ public static class General foreach (var sharedImplementation in sharedImplementations) services.AddScoped(sharedImplementation); + services.AddStackExchangeRedisCache(options => + options.Configuration = configuration.GetConnectionString("Redis")); + + services.AddHybridCache(options => options.DefaultEntryOptions = new HybridCacheEntryOptions + { + Expiration = TimeSpan.FromMinutes(2), + LocalCacheExpiration = TimeSpan.FromMinutes(1) + }); + return services; } diff --git a/PostFundManagement.Domain/Extensions/Constants.cs b/PostFundManagement.Domain/Extensions/Constants.cs index 00b8729..4a26e15 100644 --- a/PostFundManagement.Domain/Extensions/Constants.cs +++ b/PostFundManagement.Domain/Extensions/Constants.cs @@ -2,6 +2,8 @@ namespace PostFundManagement.Domain.Extensions; public static class Constants { + public const string CachePolicy = "DefaultCachePolicy"; + public const string EmailtemKey = "UserEmail"; public const string UserIdItemKey = "UserId"; diff --git a/PostFundManagement.Domain/PostFundManagement.Domain.csproj b/PostFundManagement.Domain/PostFundManagement.Domain.csproj index 09ee5db..e85fa52 100644 --- a/PostFundManagement.Domain/PostFundManagement.Domain.csproj +++ b/PostFundManagement.Domain/PostFundManagement.Domain.csproj @@ -12,6 +12,9 @@ + + + diff --git a/docker-compose.yml b/docker-compose.yml index 3532989..726b29a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -63,4 +63,7 @@ services: - Email__Credentials__Password=${EMAIL_CREDENTIALS_PASSWORD} - Email__Credentials__Username=${EMAIL_CREDENTIALS_USERNAME} - Email__SmtpServer=${EMAIL_SMTP_SERVER} - - Email__SmtpPort=${EMAIL_SMTP_PORT:-587} \ No newline at end of file + - Email__SmtpPort=${EMAIL_SMTP_PORT:-587} + + # Redis overrides + - ConnectionStrings__Redis=${REDIS_CONNECTION_STRING:-192.168.1.171:6379,ssl=false,abortConnect=false} \ No newline at end of file