Skip to content

Commit

Permalink
add feature management
Browse files Browse the repository at this point in the history
  • Loading branch information
mhmoudalaskalany committed Dec 4, 2024
1 parent 8a02aa9 commit f25a940
Showing 4 changed files with 56 additions and 69 deletions.
45 changes: 20 additions & 25 deletions Template.Api/Extensions/ConfigureDependencyExtension.cs
Original file line number Diff line number Diff line change
@@ -27,6 +27,8 @@
using Template.Api.Extensions.Swagger.Headers;
using Template.Api.Extensions.Swagger.Options;
using Hangfire;
using Microsoft.FeatureManagement;
using Template.Common.FeatureFlags;

namespace Template.Api.Extensions
{
@@ -40,12 +42,10 @@ public static class ConfigureDependencyExtension
/// <summary>
/// Register Extensions
/// </summary>
/// <param name="services"></param>
/// <param name="configuration"></param>
/// <returns></returns>
public static IServiceCollection RegisterServices(this IServiceCollection services, IConfiguration configuration)
{
services.RegisterDbContext(configuration);
services.AddFeatureManagement();
services.AddLocalizationServices();
services.RegisterCores();
services.RegisterRepository();
@@ -56,15 +56,14 @@ public static IServiceCollection RegisterServices(this IServiceCollection servic
services.RegisterApiVersioning();
services.RegisterSwaggerConfig();
services.RegisterLowerCaseUrls();
services.RegisterHangFire(configuration);
services.AddControllers();
return services;
}

/// <summary>
/// Add DbContext
/// </summary>
/// <param name="services"></param>
/// <param name="configuration"></param>
private static void RegisterDbContext(this IServiceCollection services, IConfiguration configuration)
{
services.AddDbContext<TemplateDbContext>(options =>
@@ -78,7 +77,6 @@ private static void RegisterDbContext(this IServiceCollection services, IConfigu
/// <summary>
/// Add Health Checks
/// </summary>
/// <param name="services"></param>
private static void RegisterApiMonitoring(this IServiceCollection services)
{
services.AddHealthChecks()
@@ -89,7 +87,6 @@ private static void RegisterApiMonitoring(this IServiceCollection services)
/// <summary>
/// register auto-mapper
/// </summary>
/// <param name="services"></param>
private static void RegisterAutoMapper(this IServiceCollection services)
{
services.AddAutoMapper(typeof(MappingService));
@@ -99,7 +96,6 @@ private static void RegisterAutoMapper(this IServiceCollection services)
/// <summary>
/// Register localization
/// </summary>
/// <param name="services"></param>
private static void AddLocalizationServices(this IServiceCollection services)
{
services.AddLocalization();
@@ -108,7 +104,6 @@ private static void AddLocalizationServices(this IServiceCollection services)
/// <summary>
/// Register Custom Repositories
/// </summary>
/// <param name="services"></param>
private static void RegisterRepository(this IServiceCollection services)
{
services.AddScoped<IActiveDirectoryRepository, ActiveDirectoryRepository>();
@@ -117,7 +112,6 @@ private static void RegisterRepository(this IServiceCollection services)
/// <summary>
/// register Integration Repositories
/// </summary>
/// <param name="services"></param>
private static void RegisterIntegrationRepositories(this IServiceCollection services)
{
services.AddTransient<IFileRepository, FileRepository>();
@@ -127,7 +121,6 @@ private static void RegisterIntegrationRepositories(this IServiceCollection serv
/// <summary>
/// Register Api Versioning
/// </summary>
/// <param name="services"></param>
private static void RegisterApiVersioning(this IServiceCollection services)
{
services.AddEndpointsApiExplorer();
@@ -148,7 +141,6 @@ private static void RegisterApiVersioning(this IServiceCollection services)
/// <summary>
/// Lower Case Urls
/// </summary>
/// <param name="services"></param>
private static void RegisterLowerCaseUrls(this IServiceCollection services)
{
services.Configure<RouteOptions>(options => { options.LowercaseUrls = true; });
@@ -157,7 +149,6 @@ private static void RegisterLowerCaseUrls(this IServiceCollection services)
/// <summary>
/// Swagger Config
/// </summary>
/// <param name="services"></param>

private static void RegisterSwaggerConfig(this IServiceCollection services)
{
@@ -194,14 +185,13 @@ private static void RegisterSwaggerConfig(this IServiceCollection services)
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
options.IncludeXmlComments(xmlPath);
});

services.AddSwaggerGenNewtonsoftSupport();
}

/// <summary>
/// Register Main Core
/// Register Core Dependencies
/// </summary>
/// <param name="services"></param>
private static void RegisterCores(this IServiceCollection services)
{
services.AddSingleton<AppHelper>();
@@ -215,17 +205,22 @@ private static void RegisterCores(this IServiceCollection services)
}

/// <summary>
/// Register HangFire
/// Register Hang Fire
/// </summary>
private static void AddHangFire(this IServiceCollection services, IConfiguration configuration)
private static void RegisterHangFire(this IServiceCollection services, IConfiguration configuration)
{
var connection = configuration.GetConnectionString(ConnectionStringName);
services.AddHangfire(config => config
.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage(connection));
services.AddHangfireServer();
var featureManager = services.BuildServiceProvider().GetRequiredService<IFeatureManager>();
if (featureManager.IsEnabledAsync(nameof(FeatureFlags.EnableHangFire)).Result)
{
var connection = configuration.GetConnectionString(ConnectionStringName);
services.AddHangfire(config => config
.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage(connection));
services.AddHangfireServer();
}

}
}
}
28 changes: 12 additions & 16 deletions Template.Api/Extensions/ConfigureMiddlewareExtension.cs
Original file line number Diff line number Diff line change
@@ -9,10 +9,12 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.FeatureManagement;
using Serilog;
using Swashbuckle.AspNetCore.SwaggerUI;
using Template.Api.Authorization;
using Template.Application.Services.BackgroundJobs.Jobs;
using Template.Common.FeatureFlags;
using Template.Domain;
using Template.Infrastructure.Context;
using Environment = Template.Common.StaticData.Environment;
@@ -28,11 +30,6 @@ public static class ConfigureMiddlewareExtension
/// <summary>
/// General Configuration Method
/// </summary>
/// <param name="app"></param>
/// <param name="env"></param>
/// <param name="configuration"></param>
/// <param name="provider"></param>
/// <returns></returns>
public static IApplicationBuilder Configure(this IApplicationBuilder app, IWebHostEnvironment env, IConfiguration configuration, IApiVersionDescriptionProvider provider)
{
app.ConfigureCors();
@@ -44,13 +41,13 @@ public static IApplicationBuilder Configure(this IApplicationBuilder app, IWebHo
app.AddLocalization();
app.UseFluentScheduler(configuration);
app.SwaggerConfig(provider);
app.UseHangFire();
app.UseHealthChecks("/probe");
return app;
}
/// <summary>
/// Configure Cors
/// </summary>
/// <param name="app"></param>
public static void ConfigureCors(this IApplicationBuilder app)
{
app.UseCors(builder => builder
@@ -62,7 +59,6 @@ public static void ConfigureCors(this IApplicationBuilder app)
/// <summary>
/// Create Database From Migration
/// </summary>
/// <param name="app"></param>
public static void CreateDatabase(this IApplicationBuilder app)
{
try
@@ -92,7 +88,6 @@ public static void CreateDatabase(this IApplicationBuilder app)
/// <summary>
/// Add Localization
/// </summary>
/// <param name="app"></param>
public static void AddLocalization(this IApplicationBuilder app)
{
var supportedCultures = new[] { "en-US", "ar-OM" };
@@ -105,8 +100,6 @@ public static void AddLocalization(this IApplicationBuilder app)
/// <summary>
/// User Swagger
/// </summary>
/// <param name="app"></param>
/// <param name="provider"></param>
private static void SwaggerConfig(this IApplicationBuilder app, IApiVersionDescriptionProvider provider)
{
app.UseSwagger();
@@ -126,8 +119,6 @@ private static void SwaggerConfig(this IApplicationBuilder app, IApiVersionDescr
/// <summary>
/// User Fluent Scheduler
/// </summary>
/// <param name="app"></param>
/// <param name="configuration"></param>
public static void UseFluentScheduler(this IApplicationBuilder app, IConfiguration configuration)
{
var env = configuration["Environment"];
@@ -137,13 +128,18 @@ public static void UseFluentScheduler(this IApplicationBuilder app, IConfigurati
}
}

/// <summary>
/// Add Hang fire
/// </summary>
public static void UseHangFire(this IApplicationBuilder app)
{
app.UseHangfireDashboard("/hangfire", new DashboardOptions()
{
Authorization = new[] { new HangFireAuthorizationFilter() }
var featureManager = app.ApplicationServices.GetRequiredService<IFeatureManager>();
if (featureManager.IsEnabledAsync(nameof(FeatureFlags.EnableHangFire)).Result)
app.UseHangfireDashboard("/hangfire", new DashboardOptions()
{
Authorization = new[] { new HangFireAuthorizationFilter() }

});
});
}
}
}
50 changes: 23 additions & 27 deletions Template.Api/Template.Api.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit f25a940

Please sign in to comment.