209 lines
9.9 KiB
C#
209 lines
9.9 KiB
C#
using System.Text.Json.Serialization;
|
|
using Distribution.Data;
|
|
using Distribution.Features.Auth;
|
|
using Distribution.Middleware;
|
|
using Distribution.Features.Brand;
|
|
using Distribution.Features.Category;
|
|
using Distribution.Features.DeliveryRide;
|
|
using Distribution.Features.Payment;
|
|
using Distribution.Features.BankAccount;
|
|
using Distribution.Features.ChequeBook;
|
|
using Distribution.Features.ReceivedCheque;
|
|
using Distribution.Features.DriverComplianceConfig;
|
|
using Distribution.Features.DriverProfile;
|
|
using Distribution.Features.Grn;
|
|
using Distribution.Features.Notifications;
|
|
using Distribution.Features.Item;
|
|
using Distribution.Features.ShopPO;
|
|
using Distribution.Features.Invoice;
|
|
using Distribution.Features.PriceList;
|
|
using Distribution.Features.Po;
|
|
using Distribution.Features.PurchaseReturn;
|
|
using Distribution.Features.Returns;
|
|
using Distribution.Features.Claims;
|
|
using Distribution.Features.SupplierClaims;
|
|
using Distribution.Features.Region;
|
|
using Distribution.Features.LoadingEvent;
|
|
using Distribution.Features.Ride;
|
|
using Distribution.Features.Role;
|
|
using Distribution.Features.Route;
|
|
using Distribution.Features.Scheme;
|
|
using Distribution.Features.Store;
|
|
using Distribution.Features.Supplier;
|
|
using Distribution.Features.SupplierPayment;
|
|
using Distribution.Features.Sync;
|
|
using Distribution.Features.Uom;
|
|
using Distribution.Features.User;
|
|
using Distribution.Features.Vehicle;
|
|
using Distribution.Features.DashboardReport;
|
|
using Distribution.Features.ProductReport;
|
|
using Distribution.Features.Stock;
|
|
using Distribution.Features.StockReport;
|
|
using Distribution.Features.SysConfig;
|
|
using Distribution.Features.Warehouse;
|
|
using Distribution.Infra.Authorization;
|
|
using Distribution.Infra.UoW;
|
|
using Microsoft.AspNetCore.Authentication;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc.Authorization;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection")
|
|
?? throw new InvalidOperationException("Connection string 'DefaultConnection' was not found.");
|
|
|
|
builder.Services.AddDbContext<AppDBContext>(options =>
|
|
options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)));
|
|
|
|
builder.Services.AddScoped<IUnitOfWork, EFUnitOfWork>();
|
|
|
|
builder.Services.AddScoped<IRegionRepository, RegionRepository>();
|
|
builder.Services.AddScoped<IRouteRepository, RouteRepository>();
|
|
builder.Services.AddScoped<IVehicleRepository, VehicleRepository>();
|
|
builder.Services.AddScoped<IVehicleDashboardRepository, VehicleDashboardRepository>();
|
|
builder.Services.AddScoped<IStoreRepository, StoreRepository>();
|
|
builder.Services.AddScoped<IWarehouseRepository, WarehouseRepository>();
|
|
builder.Services.AddScoped<IWarehouseDashboardRepository, WarehouseDashboardRepository>();
|
|
builder.Services.AddScoped<IShopPORepository, ShopPORepository>();
|
|
builder.Services.AddScoped<IInvoiceRepository, InvoiceRepository>();
|
|
builder.Services.AddScoped<IUserRepository, UserRepository>();
|
|
builder.Services.AddScoped<IRoleRepository, RoleRepository>();
|
|
builder.Services.AddScoped<ICategoryRepository, CategoryRepository>();
|
|
builder.Services.AddScoped<ISubCategoryRepository, SubCategoryRepository>();
|
|
builder.Services.AddScoped<IBrandRepository, BrandRepository>();
|
|
builder.Services.AddScoped<IUomRepository, UomRepository>();
|
|
builder.Services.AddScoped<IItemRepository, ItemRepository>();
|
|
builder.Services.AddScoped<IStockRepository, StockRepository>();
|
|
builder.Services.AddScoped<IProductReportRepository, ProductReportRepository>();
|
|
builder.Services.AddScoped<ProductReportService>();
|
|
builder.Services.AddScoped<IDashboardReportRepository, DashboardReportRepository>();
|
|
builder.Services.AddScoped<DashboardReportService>();
|
|
builder.Services.AddScoped<IStockReportRepository, StockReportRepository>();
|
|
builder.Services.AddScoped<StockReportService>();
|
|
builder.Services.AddScoped<IDriverProfileRepository, DriverProfileRepository>();
|
|
builder.Services.AddScoped<IDriverComplianceConfigRepository, DriverComplianceConfigRepository>();
|
|
builder.Services.AddScoped<IRideRepository, RideRepository>();
|
|
builder.Services.AddScoped<ILoadingSheetRepository, LoadingSheetRepository>();
|
|
builder.Services.AddScoped<IPriceListRepository, PriceListRepository>();
|
|
builder.Services.AddScoped<ISupplierRepository, SupplierRepository>();
|
|
builder.Services.AddScoped<ISchemeRepository, SchemeRepository>();
|
|
builder.Services.AddScoped<IPoRepository, PoRepository>();
|
|
builder.Services.AddScoped<IGrnRepository, GrnRepository>();
|
|
builder.Services.AddScoped<IPurchaseReturnRepository, PurchaseReturnRepository>();
|
|
builder.Services.AddScoped<IReturnRepository, ReturnRepository>();
|
|
builder.Services.AddScoped<IClaimRepository, ClaimRepository>();
|
|
builder.Services.AddScoped<ISupplierClaimRepository, SupplierClaimRepository>();
|
|
builder.Services.AddScoped<ISysConfigRepository, SysConfigRepository>();
|
|
builder.Services.AddScoped<IDeliveryTaskRepository, DeliveryTaskRepository>();
|
|
builder.Services.AddScoped<IPaymentRepository, PaymentRepository>();
|
|
builder.Services.AddScoped<IBankAccountRepository, BankAccountRepository>();
|
|
builder.Services.AddScoped<IChequeBookRepository, ChequeBookRepository>();
|
|
builder.Services.AddScoped<IReceivedChequeRepository, ReceivedChequeRepository>();
|
|
builder.Services.AddScoped<ISupplierPaymentRepository, SupplierPaymentRepository>();
|
|
builder.Services.AddScoped<Distribution.Features.StoreCredit.IStoreCreditMovementRepository, Distribution.Features.StoreCredit.StoreCreditMovementRepository>();
|
|
|
|
builder.Services.AddScoped<RegionService>();
|
|
builder.Services.AddScoped<RouteService>();
|
|
builder.Services.AddScoped<VehicleService>();
|
|
builder.Services.AddScoped<VehicleDashboardService>();
|
|
builder.Services.AddScoped<StoreService>();
|
|
builder.Services.AddScoped<WarehouseService>();
|
|
builder.Services.AddScoped<WarehouseDashboardService>();
|
|
builder.Services.AddScoped<ShopPOService>();
|
|
builder.Services.AddScoped<InvoiceService>();
|
|
builder.Services.AddScoped<UserService>();
|
|
builder.Services.AddScoped<RoleService>();
|
|
builder.Services.AddScoped<AuthService>();
|
|
builder.Services.AddScoped<CategoryService>();
|
|
builder.Services.AddScoped<BrandService>();
|
|
builder.Services.AddScoped<UomService>();
|
|
builder.Services.AddScoped<ItemService>();
|
|
builder.Services.AddScoped<SyncService>();
|
|
builder.Services.AddScoped<StockService>();
|
|
builder.Services.AddScoped<StockMover>();
|
|
builder.Services.AddScoped<PriceListService>();
|
|
builder.Services.AddScoped<SupplierService>();
|
|
builder.Services.AddScoped<DriverProfileService>();
|
|
builder.Services.AddScoped<DriverComplianceConfigService>();
|
|
builder.Services.AddScoped<RideService>();
|
|
builder.Services.AddScoped<LoadingSheetService>();
|
|
builder.Services.AddScoped<SchemeService>();
|
|
builder.Services.AddScoped<PoService>();
|
|
builder.Services.AddScoped<GrnService>();
|
|
builder.Services.AddScoped<PurchaseReturnService>();
|
|
builder.Services.AddScoped<ReturnService>();
|
|
builder.Services.AddScoped<ClaimService>();
|
|
builder.Services.AddScoped<SupplierClaimService>();
|
|
builder.Services.AddScoped<DeliveryTaskService>();
|
|
builder.Services.AddScoped<PaymentService>();
|
|
builder.Services.AddScoped<BankAccountService>();
|
|
builder.Services.AddScoped<ChequeBookService>();
|
|
builder.Services.AddScoped<ReceivedChequeService>();
|
|
builder.Services.AddScoped<SupplierPaymentService>();
|
|
builder.Services.AddScoped<SysConfigService>();
|
|
|
|
builder.Services.AddScoped<INotificationRepository, NotificationRepository>();
|
|
builder.Services.AddScoped<NotificationRecipientResolver>();
|
|
builder.Services.AddScoped<NotificationService>();
|
|
builder.Services.AddScoped<INotificationService>(sp => sp.GetRequiredService<NotificationService>());
|
|
builder.Services.AddSingleton<Microsoft.AspNetCore.SignalR.IUserIdProvider, NotificationUserIdProvider>();
|
|
builder.Services.AddHostedService<NotificationCleanupJob>();
|
|
builder.Services.AddSignalR()
|
|
.AddJsonProtocol(options => options.PayloadSerializerOptions.Converters.Add(new JsonStringEnumConverter()));
|
|
|
|
builder.Services.AddMemoryCache();
|
|
builder.Services.AddHttpContextAccessor();
|
|
builder.Services.AddScoped<ICurrentUserService, CurrentUserService>();
|
|
builder.Services.AddHttpClient<IAuthHexClient, AuthHexClient>(client =>
|
|
{
|
|
var baseUrl = builder.Configuration["AuthHex:BaseUrl"] ?? throw new InvalidOperationException("AuthHex:BaseUrl is not configured.");
|
|
client.BaseAddress = new Uri(baseUrl);
|
|
});
|
|
builder.Services.AddScoped<IPermissionRepository, PermissionRepository>();
|
|
builder.Services.AddScoped<IScopeRepository, ScopeRepository>();
|
|
builder.Services.AddScoped<IPermissionService, PermissionService>();
|
|
builder.Services.AddScoped<IScopeAccessService, ScopeAccessService>();
|
|
builder.Services.AddAuthentication("Bearer")
|
|
.AddScheme<AuthenticationSchemeOptions, BearerResponseHandler>("Bearer", _ => { });
|
|
builder.Services.AddAuthorization();
|
|
builder.Services.AddSingleton<IAuthorizationPolicyProvider, PermissionPolicyProvider>();
|
|
builder.Services.AddScoped<IAuthorizationHandler, PermissionAuthorizationHandler>();
|
|
|
|
var allowedOrigins = builder.Configuration.GetSection("Cors:AllowedOrigins").Get<string[]>() ?? [];
|
|
builder.Services.AddCors(options =>
|
|
options.AddDefaultPolicy(policy =>
|
|
policy.WithOrigins(allowedOrigins)
|
|
.AllowAnyHeader()
|
|
.AllowAnyMethod()
|
|
.AllowCredentials()));
|
|
|
|
builder.Services.AddControllers(options =>
|
|
{
|
|
var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
|
|
options.Filters.Add(new AuthorizeFilter(policy));
|
|
})
|
|
.AddJsonOptions(options => options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));
|
|
builder.Services.AddEndpointsApiExplorer();
|
|
builder.Services.AddOpenApi();
|
|
builder.Services.AddSwaggerGen();
|
|
|
|
var app = builder.Build();
|
|
|
|
if (app.Environment.IsDevelopment())
|
|
{
|
|
app.MapOpenApi();
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI();
|
|
}
|
|
|
|
//app.UseHttpsRedirection();
|
|
app.UseCors();
|
|
app.UseMiddleware<AuthMiddleware>();
|
|
app.UseAuthentication();
|
|
app.UseAuthorization();
|
|
app.MapControllers();
|
|
app.MapHub<NotificationHub>(NotificationHub.Path);
|
|
|
|
app.Run();
|