/
HiddenLogic
/
Motion-ERP
Обзор
Документация
Войти
/
HiddenLogic
/
Motion-ERP
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
Motion-ERP.API/Program.cs
154 строки
5 KB
adnet
Initial commit: Motion-ERP solution structure
30 июл 2026, 17:01
30 июл 2026, 17:01
bf32c92
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; using Motion_ERP_Application.Interfaces; using Motion_ERP_Application.Services; using Motion_ERP_Infrastructure.Data; using Motion_ERP_Infrastructure.Repositories; using Motion_ERP_API.Middleware; using System.Text; var builder = WebApplication.CreateBuilder(args); // DbContext builder.Services.AddDbContext<MotionErpDbContext>(options => options.UseSqlite(builder.Configuration.GetConnectionString("Database") ?? builder.Configuration["Database:ConnectionString"] ?? "Data Source=motion_erp.db;Cache=Shared;")); // Identity builder.Services.AddIdentity<IdentityUser, IdentityRole>(options => { options.Password.RequireDigit = true; options.Password.RequiredLength = 8; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = true; options.Password.RequireLowercase = true; }) .AddEntityFrameworkStores<MotionErpDbContext>() .AddDefaultTokenProviders(); // JWT Authentication var jwtKey = builder.Configuration["Jwt:Key"] ?? "DefaultSuperSecretKeyForMotionERP2024"; builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = builder.Configuration["Jwt:Issuer"] ?? "Motion-ERP", ValidAudience = builder.Configuration["Jwt:Audience"] ?? "Motion-ERP-Client", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtKey)) }; }); builder.Services.AddAuthorization(options => { options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin")); options.AddPolicy("ManagerOrAdmin", policy => policy.RequireRole("Manager", "Admin")); options.AddPolicy("AccountantOrAdmin", policy => policy.RequireRole("Accountant", "Admin")); }); // Swagger builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Motion-ERP API", Version = "v1", Description = "API управления движением арендного имущества", Contact = new OpenApiContact { Name = "Motion-ERP Team" } }); c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "JWT Authorization header. Example: 'Bearer {your token}'", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, Scheme = "Bearer" }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, Array.Empty<string>() } }); }); // Application Services builder.Services.AddScoped<IAssetService, AssetService>(); builder.Services.AddScoped<IAssetGroupService, AssetGroupService>(); builder.Services.AddScoped<ILocationService, LocationService>(); builder.Services.AddScoped<IContractorService, ContractorService>(); builder.Services.AddScoped<IContractService, ContractService>(); builder.Services.AddScoped<IHandoverService, HandoverService>(); builder.Services.AddScoped<ITariffService, TariffService>(); builder.Services.AddScoped<IChargesService, ChargesService>(); builder.Services.AddScoped<IPaymentService, PaymentService>(); builder.Services.AddScoped<IAuthService, AuthService>(); // Infrastructure Services builder.Services.AddScoped<IUnitOfWork, UnitOfWork>(); builder.Services.AddScoped<Motion_ERP_Application.Services.JwtService>(); builder.Services.AddControllers(); builder.Services.AddCors(options => { options.AddDefaultPolicy(policy => { policy.AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod(); }); }); var app = builder.Build(); // Apply migrations on startup using (var scope = app.Services.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService<MotionErpDbContext>(); dbContext.Database.Migrate(); // Seed admin user await SeedData.SeedAdminUser(scope.ServiceProvider); // Seed default data await SeedData.SeedDefaultData(dbContext); } // Middleware pipeline if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Motion-ERP API v1"); }); } app.UseMiddleware<ExceptionHandlingMiddleware>(); app.UseHttpsRedirection(); app.UseCors(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();