using Core.Cerberos.Adapters.Extensions; using Core.Cerberos.Adapters.Helpers; using Core.Cerberos.Application.UseCases.Modules; using Core.Cerberos.Application.UseCases.Modules.Adapter; using Core.Cerberos.Application.UseCases.Modules.Input; using Core.Cerberos.Application.UseCases.Modules.Ports; using Core.Cerberos.Application.UseCases.Modules.Validator; using Core.Cerberos.Application.UseCases.Permissions; using Core.Cerberos.Application.UseCases.Permissions.Adapter; using Core.Cerberos.Application.UseCases.Permissions.Input; using Core.Cerberos.Application.UseCases.Permissions.Ports; using Core.Cerberos.Application.UseCases.Permissions.Validator; using Core.Cerberos.Application.UseCases.Role; using Core.Cerberos.Application.UseCases.Roles.Adapter; using Core.Cerberos.Application.UseCases.Roles.Input; using Core.Cerberos.Application.UseCases.Roles.Ports; using Core.Cerberos.Application.UseCases.Roles.Validator; using Core.Cerberos.Application.UseCases.Users; using Core.Cerberos.Application.UseCases.Users.Adapter; using Core.Cerberos.Application.UseCases.Users.Input; using Core.Cerberos.Application.UseCases.Users.Ports; using Core.Cerberos.Application.UseCases.Users.Validator; using Core.Cerberos.External.ClientConfiguration; using Core.Cerberos.Service.API.Extensions; using FluentValidation; using Lib.Architecture.BuildingBlocks; using Microsoft.AspNetCore.ResponseCompression; using System.IO.Compression; var builder = WebApplication.CreateBuilder(args); var authSettings = AuthHelper.GetAuthSettings(builder, "cerberos_service"); builder.Services.ConfigureAuthentication(builder.Configuration, authSettings); builder.Host.ConfigureServices((context, services) => { services.AddCors(options => { options.AddPolicy("AllowAll", policyBuilder => policyBuilder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()); }); services.AddMvc().AddJsonOptions(options => { options.JsonSerializerOptions.WriteIndented = true; options.JsonSerializerOptions.MaxDepth = 20; options.JsonSerializerOptions.NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowNamedFloatingPointLiterals; }); services.Configure(options => { options.Level = CompressionLevel.SmallestSize; }); services.Configure(options => { options.Level = CompressionLevel.SmallestSize; }); services.AddResponseCompression(options => { options.EnableForHttps = true; options.Providers.Add(); options.Providers.Add(); }); services.AddResponseCaching(); services.AddControllers(); services.AddEndpointsApiExplorer(); builder.Services.AddSwagger(builder.Configuration, "Core.Cerberos.Service.API.xml", authSettings); builder.Services.AddVersioning(builder.Configuration); services.AddLogging(); services.AddProblemDetails(); //Register Stuff services.RegisterExternalLayer(builder.Configuration); services.AddScoped(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddScoped, UserHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, CreateUserValidator>(); services.AddScoped, UserHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, UpdateUserValidator>(); services.AddScoped, UserHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, ChangeUserStatusValidator>(); services.AddScoped, UserHandler>(); services.AddScoped(); services.AddScoped, RoleHandler>(); services.AddScoped, RoleHandler>(); services.AddScoped, RoleHandler>(); services.AddScoped, RoleHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, CreateRoleValidator>(); services.AddScoped, RoleHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, UpdateRoleValidator>(); services.AddScoped, RoleHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, ChangeRoleStatusValidator>(); services.AddScoped, RoleHandler>(); services.AddScoped(); services.AddScoped, PermissionHandler>(); services.AddScoped, PermissionHandler>(); services.AddScoped, PermissionHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, CreatePermissionValidator>(); services.AddScoped, PermissionHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, UpdatePermissionValidator>(); services.AddScoped, PermissionHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, ChangePermissionStatusValidator>(); services.AddScoped, PermissionHandler>(); services.AddScoped(); services.AddScoped, ModuleHandler>(); services.AddScoped, ModuleHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, GetAllModulesByListValidator>(); services.AddScoped, ModuleHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, CreateModuleValidator>(); services.AddScoped, ModuleHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, UpdateModuleValidator>(); services.AddScoped, ModuleHandler>(); services.AddValidatorsFromAssemblyContaining(); services.AddScoped, ChangeModuleStatusValidator>(); services.AddScoped, ModuleHandler>(); }); var app = builder.Build(); app.UseSwaggerUI(builder.Configuration, authSettings); app.ConfigureSwagger(builder.Configuration); app.UseResponseCompression(); app.UseResponseCaching(); app.UseHttpsRedirection(); app.UseCors("AllowAll"); app.UseAuthorization(); app.MapControllers(); app.Run();