057dd5aedc
- Added CategoryService for managing categories with listing, tree structure, and creation functionalities. - Introduced ItemService for item management, including listing, detail retrieval, creation, updating, and status management. - Created UomService for handling unit of measure operations, including listing and creation. - Developed VendorService for vendor management, supporting listing, detail retrieval, creation, updating, and status management. - Implemented WarehouseService for warehouse and bin management, including listing warehouses, creating warehouses, and managing bins within warehouses. - Added interfaces for each service to define the contract for service implementations. - Generated Entity Framework Core model snapshot for database migrations.
74 lines
2.6 KiB
C#
74 lines
2.6 KiB
C#
using System.Text.Json.Serialization;
|
|
using ERPCore.Infra.Auth;
|
|
using ERPCore.Infra.Persistence;
|
|
using ERPCore.Infra.UoW;
|
|
using ERPCore.Repositories;
|
|
using ERPCore.Repositories.Interfaces;
|
|
using ERPCore.Services;
|
|
using ERPCore.Services.Interfaces;
|
|
using ERPCore.System.Errors;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.OpenApi;
|
|
using Serilog;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
// Serilog (file sink) — reads levels from configuration, plus a rolling daily file.
|
|
builder.Host.UseSerilog((ctx, cfg) => cfg
|
|
.ReadFrom.Configuration(ctx.Configuration)
|
|
.WriteTo.File("logs/erpcore-.log", rollingInterval: RollingInterval.Day));
|
|
|
|
// Controllers + JSON: serialize enums as their string names (docs/11 §8, camelCase).
|
|
builder.Services.AddControllers()
|
|
.AddJsonOptions(o => o.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));
|
|
|
|
// EF Core + PostgreSQL
|
|
builder.Services.AddDbContext<ErpDbContext>(o =>
|
|
o.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
|
|
|
|
// ProblemDetails (RFC 7807) + domain-exception mapping
|
|
builder.Services.AddProblemDetails();
|
|
builder.Services.AddExceptionHandler<DomainExceptionHandler>();
|
|
|
|
// JWT bearer auth (RBAC deferred; identity used only for the audit stamp)
|
|
builder.Services.AddErpJwtAuth(builder.Configuration);
|
|
|
|
// Current-user (audit actor) derived from token `sub`
|
|
builder.Services.AddHttpContextAccessor();
|
|
builder.Services.AddScoped<ICurrentUser, CurrentUser>();
|
|
|
|
// Unit of work + generic repository base
|
|
builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
|
|
builder.Services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
|
|
|
|
// Master-data services (docs/11 §2)
|
|
builder.Services.AddScoped<IItemService, ItemService>();
|
|
builder.Services.AddScoped<IUomService, UomService>();
|
|
builder.Services.AddScoped<ICategoryService, CategoryService>();
|
|
builder.Services.AddScoped<IVendorService, VendorService>();
|
|
builder.Services.AddScoped<IWarehouseService, WarehouseService>();
|
|
|
|
// Health checks (EF Core DB)
|
|
builder.Services.AddHealthChecks().AddDbContextCheck<ErpDbContext>();
|
|
|
|
// Swagger / OpenAPI (Swashbuckle v10 → OpenAPI 3.1)
|
|
builder.Services.AddEndpointsApiExplorer();
|
|
builder.Services.AddSwaggerGen(o => o.SwaggerDoc("v1", new OpenApiInfo { Title = "ERPCore API", Version = "v1" }));
|
|
|
|
var app = builder.Build();
|
|
|
|
app.UseSerilogRequestLogging();
|
|
|
|
if (app.Environment.IsDevelopment())
|
|
{
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI();
|
|
}
|
|
|
|
app.UseExceptionHandler(); // -> DomainExceptionHandler / ProblemDetails
|
|
app.UseAuthentication();
|
|
app.UseAuthorization();
|
|
app.MapControllers();
|
|
app.MapHealthChecks("/health");
|
|
app.Run();
|