123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- using MTWorkHR.Application;
- using MTWorkHR.Infrastructure;
- using Microsoft.EntityFrameworkCore;
- using MTWorkHR.Core;
- using MTWorkHR.Core.Global;
- using MTWorkHR.Application.Middlewares;
- using MTWorkHR.Application.Services.Interfaces;
- using MTWorkHR.Application.Filters;
- using MTWorkHR.Application.StartupService;
- using Microsoft.AspNetCore.Mvc;
- using MTWorkHR.Infrastructure.DBContext;
- using Microsoft.AspNetCore.Mvc.Controllers;
- using Microsoft.OpenApi.Models;
- using MTWorkHR.API.Swagger;
- using Azure.Storage.Blobs;
- using Moq;
- using Microsoft.Extensions.DependencyInjection;
- var builder = WebApplication.CreateBuilder(args);
- if (OperatingSystem.IsLinux())
- {
- builder.Configuration.AddJsonFile("appsettings.Linux.json", optional: true, reloadOnChange: true);
- }
- var config = new AppSettingsConfiguration();
- // Add services to the container.
- builder.Services.AddDbContext<HRDataContext>(options =>
- {
- options.UseSqlServer(config.ConnectionStrings.LocalConnectionString);
- // options.UseSqlServer(builder.Configuration.GetSection("ConnectionStrings:MTWorkHRConnectionString").Value);
- });
- builder.Configuration.Bind(config);
- builder.Services.AddApplicationServices(config);
- builder.Services.AddInfrastructureIdentityServices(config);
- //builder.Services.AddPersistenceServices(builder.Configuration);
- //builder.Services.AddIdentityServices(config);
- builder.Services.AddHostedService<DbMigrationService>();
- if (builder.Environment.IsDevelopment())
- {
- var mockBlobServiceClient = new Mock<BlobServiceClient>();
- // Mock BlobContainerClient since this is what BlobServiceClient interacts with.
- var mockBlobContainerClient = new Mock<BlobContainerClient>();
- // Set up the mock to return a mock BlobContainerClient when requested.
- mockBlobServiceClient
- .Setup(x => x.GetBlobContainerClient(It.IsAny<string>()))
- .Returns(mockBlobContainerClient.Object);
- builder.Services.AddSingleton(mockBlobServiceClient.Object);
- }
- else
- {
- // Use the actual connection string for production or other environments.
- builder.Services.AddSingleton(x => new BlobServiceClient(config.ConnectionStrings.BlobConnectionString));
- }
- //builder.Services.AddControllers();
- builder.Services.AddControllers(options =>
- {
- //add filter by instance
- options.Filters.Add(new InputValidationActionFilter());
- //add filter By the type
- options.Filters.Add(typeof(InputValidationActionFilter));
- });
- //disable default model validation, because we handle this in InputValidationActionFilter and LoggingMiddleware.
- builder.Services.Configure<ApiBehaviorOptions>(options =>
- {
- options.SuppressModelStateInvalidFilter = true;
- });
- // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
- builder.Services.AddEndpointsApiExplorer();
- //builder.Services.AddSwaggerGen();
- //--------------------------
- builder.Services.AddSwaggerGen(swagger =>
- {
- //This is to apply global headers for all requests
- swagger.OperationFilter<HeaderOperationFilter>();
- //This is to export enums to front
- swagger.SchemaFilter<EnumSchemaFilter>();
- //This is to generate the Default UI of Swagger Documentation
- swagger.SwaggerDoc("v1", new OpenApiInfo
- {
- Version = "v1",
- Title = "MTWorkHR.API",
- Description = "MTWorkHR.APIDesc"
- });
- swagger.CustomOperationIds(
- d => (d.ActionDescriptor as ControllerActionDescriptor)?.ControllerName + (d.ActionDescriptor as ControllerActionDescriptor)?.ActionName
- );
- // To Enable authorization using Swagger (JWT)
- swagger.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
- {
- Name = "Authorization",
- Type = SecuritySchemeType.ApiKey,
- Scheme = "Bearer",
- BearerFormat = "JWT",
- In = ParameterLocation.Header,
- Description = "Enter 'Bearer' [space] and then your valid token in the text input below.\r\n\r\nExample: \"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\"",
- });
- swagger.AddSecurityRequirement(new OpenApiSecurityRequirement
- {
- {
- new OpenApiSecurityScheme
- {
- Reference = new OpenApiReference
- {
- Type = ReferenceType.SecurityScheme,
- Id = "Bearer"
- }
- },
- new string[] {}
- }
- });
- });
- //--------------------------
- var app = builder.Build();
- // Configure the HTTP request pipeline.
- // if (app.Environment.IsDevelopment())
- // {
- app.UseSwagger();
- //app.UseSwaggerUI();
- app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MTWorkHR.API v1"));
- // }
- app.UseCors(x => x
- .AllowAnyMethod()
- .AllowAnyHeader()
- .SetIsOriginAllowed(origin =>
- true) // allow any origin
- .AllowCredentials()); // allow credentials
- app.UseHttpsRedirection();
- app.UseAuthentication();
- app.UseAuthorization();
- app.UseMiddleware<LoggingMiddleware>();
- app.MapControllers();
- app.Run();
|