5707bd4c31
Introduced StoreCreditMovement entity and migration to track store credit usage and settlements. Updated payment flow to enforce credit limits and record credit movements. Modified outstanding balance calculation to use credit movements. Enhanced frontend to display real-time credit info and prevent over-credit payments. Updated API types, seed data, and DI registrations accordingly.
198 lines
9.2 KiB
C#
198 lines
9.2 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.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.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.Run();
|