Files
ChamomileProject/DaisiesApi/Program.cs

132 lines
5.1 KiB
C#

using DaisiesBuisnessLogic.Implementations;
using DaisiesBuisnessLogic.OfficePackage;
using DaisiesContracts.AdapterContracts;
using DaisiesContracts.BuisnessLogicContracts;
using DaisiesContracts.Infrastructure;
using DaisiesContracts.StoragesContracts;
using DaisiesDatabase;
using DaisiesDatabase.Implementations;
using DaisiesWebApi;
using DaisiesWebApi.Adapters;
using DaisiesWebApi.Infrastructure;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using Serilog;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddAutoMapper(typeof(Program).Assembly);
builder.Services.AddSingleton<IConfigurationDatabase, ConfigurationDatabase>();
builder.Services.AddSingleton<IConfigurationDatabase, ConfigurationDatabase>();
builder.Services.AddSingleton<IConfigurationDiscount, ConfigurationDiscount>();
// Ðåãèñòðàöèÿ áèçíåñ-ëîãèêè
builder.Services.AddTransient<IBuyerBuisnessLogicContract, BuyerBuisnessLogicContract>();
builder.Services.AddTransient<IClientDiscountBuisnessLogicContract, ClientDiscountBuisnessLogicContract>();
builder.Services.AddTransient<IPostBuisnessLogicContract, PostBuisnessLogicContract>();
builder.Services.AddTransient<IProductBuisnessLogicContract, ProductBuisnessLogicContract>();
builder.Services.AddTransient<ISaleBuisnessLogicContract, SaleBusinessLogicContract>();
builder.Services.AddTransient<IWorkerBuisnessLogicContract, WorkerBuisnessLogicContract>();
// Ðåãèñòðàöèÿ õðàíèëèù
builder.Services.AddTransient<DaisiesDbContext>();
builder.Services.AddTransient<IBuyerStorageContract, BuyerStorageContract>();
builder.Services.AddTransient<IPostStorageContract, PostStorageContract>();
builder.Services.AddTransient<IProductStorageContract, ProductStorageContract>();
builder.Services.AddTransient<IClientDiscountStorageContract, ClientDiscountStorageContract>();
builder.Services.AddTransient<ISaleStorageContract, SaleStorageContract>();
builder.Services.AddTransient<IWorkerStorageContract, WorkerStorageContract>();
// Ðåãèñòðàöèÿ àäàïòåðîâ
builder.Services.AddTransient<IBuyerAdapter, BuyerAdapter>();
builder.Services.AddTransient<IClientDiscountAdapter, ClientDiscountAdapter>();
builder.Services.AddTransient<IPostAdapter, PostAdapter>();
builder.Services.AddTransient<IProductAdapter, ProductAdapter>();
builder.Services.AddTransient<ISaleAdapter, SaleAdapter>();
builder.Services.AddTransient<IWorkerAdapter, WorkerAdapter>();
builder.Services.AddTransient<IReportContract, ReportContract>();
builder.Services.AddTransient<IReportAdapter, ReportAdapter>();
builder.Services.AddTransient<IReportAdapter, ReportAdapter>();
builder.Services.AddTransient<BaseWordBuilder, OpenXmlWordBuilder>();
builder.Services.AddTransient<BaseExcelBuilder, OpenXmlExcelBuilder>();
builder.Services.AddTransient<BasePdfBuilder, MigraDocPdfBuilder>();
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
builder.Services.AddOpenApi();
using var loggerFactory = new LoggerFactory();
loggerFactory.AddSerilog(new LoggerConfiguration().ReadFrom.Configuration(builder.Configuration).CreateLogger());
builder.Services.AddSingleton(loggerFactory.CreateLogger("Any"));
builder.Services.AddAuthorization();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
// óêàçûâàåò, áóäåò ëè âàëèäèðîâàòüñÿ èçäàòåëü ïðè âàëèäàöèè òîêåíà
ValidateIssuer = true,
// ñòðîêà, ïðåäñòàâëÿþùàÿ èçäàòåëÿ
ValidIssuer = AuthOptions.ISSUER,
// áóäåò ëè âàëèäèðîâàòüñÿ ïîòðåáèòåëü òîêåíà
ValidateAudience = true,
// óñòàíîâêà ïîòðåáèòåëÿ òîêåíà
ValidAudience = AuthOptions.AUDIENCE,
// áóäåò ëè âàëèäèðîâàòüñÿ âðåìÿ ñóùåñòâîâàíèÿ
ValidateLifetime = true,
// óñòàíîâêà êëþ÷à áåçîïàñíîñòè
IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
// âàëèäàöèÿ êëþ÷à áåçîïàñíîñòè
ValidateIssuerSigningKey = true,
};
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
}
if (app.Environment.IsProduction())
{
var dbContext = app.Services.GetRequiredService<DaisiesDbContext>();
if (dbContext.Database.CanConnect())
{
dbContext.Database.EnsureCreated();
dbContext.Database.Migrate();
}
}
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.Map("/login/{username}", (string username) =>
{
return new JwtSecurityTokenHandler().WriteToken(new JwtSecurityToken(
issuer: AuthOptions.ISSUER,
audience: AuthOptions.AUDIENCE,
claims: [new(ClaimTypes.Name, username)],
expires: DateTime.UtcNow.Add(TimeSpan.FromMinutes(2)),
signingCredentials: new
SigningCredentials(AuthOptions.GetSymmetricSecurityKey(),
SecurityAlgorithms.HmacSha256)));
});
app.MapControllers();
app.Run();