using CPRNIMS.Domain.Contracts.Account; using CPRNIMS.Domain.Contracts.Canvass; using CPRNIMS.Domain.Contracts.Common; using CPRNIMS.Domain.Contracts.Finance; using CPRNIMS.Domain.Contracts.Inventory; using CPRNIMS.Domain.Contracts.Items; using CPRNIMS.Domain.Contracts.PO; using CPRNIMS.Domain.Contracts.PR; using CPRNIMS.Domain.Contracts.Receiving; using CPRNIMS.Domain.Contracts.Reports; using CPRNIMS.Domain.Contracts.SMTP; using CPRNIMS.Domain.Services; using CPRNIMS.Domain.Services.Account; using CPRNIMS.Domain.Services.Canvass; using CPRNIMS.Domain.Services.Common; using CPRNIMS.Domain.Services.Finance; using CPRNIMS.Domain.Services.Inventory; using CPRNIMS.Domain.Services.PO; using CPRNIMS.Domain.Services.Receiving; using CPRNIMS.Domain.Services.SMTP; using CPRNIMS.Infrastructure.Database; using CPRNIMS.Infrastructure.Entities.Account; using CPRNIMS.Infrastructure.Helper; using CPRNIMS.Infrastructure.Reports; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; using System.Text; namespace CPRNIMS.WebApi.Common { public static class ServiceExtensions { public static void AddApplicationServices(this IServiceCollection services, WebApplicationBuilder builder) { AddIdentityServices(services); AddDbContexts(builder, services); AddMvcServices(services); AddAuthenticationServices(builder, services); AddCorsServices(services); AddOtherServices(services); services.AddControllers(); services.AddEndpointsApiExplorer(); services.AddHttpsRedirection(options => { options.HttpsPort = 2023; // The default HTTPS port }); services.AddSwaggerGen(c => { c.SwaggerDoc("v2", new OpenApiInfo { Version = "v2", Title = "LLI API", Description = "ASP.NET Core Web API", //TermsOfService = new Uri("https://example.com/terms"), Contact = new OpenApiContact { Name = "Rowell Soriano", Email = string.Empty, Url = new Uri("http://lloydlab.com/"), }, License = new OpenApiLicense { Name = "Use under LLI", Url = new Uri("http://lloydlab.com/"), } }); }); } private static void AddIdentityServices(IServiceCollection services) { services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); services.AddScoped(); } private static void AddDbContexts(WebApplicationBuilder builder, IServiceCollection services) { var defaultConn = builder.Configuration.GetConnectionString("DefaultConnection"); var localConn = builder.Configuration.GetConnectionString("LocalPurchConn"); services.AddDbContext(options => options.UseSqlServer(defaultConn, sql => { sql.EnableRetryOnFailure(5, TimeSpan.FromHours(2), null); sql.CommandTimeout(20); })); services.AddDbContext(options => options.UseSqlServer(localConn, sql => { sql.EnableRetryOnFailure(5, TimeSpan.FromHours(2), null); sql.CommandTimeout(20); })); } private static void AddMvcServices(IServiceCollection services) { services.AddMvc().AddJsonOptions(options => { options.JsonSerializerOptions.WriteIndented = true; }); } private static void AddAuthenticationServices(WebApplicationBuilder builder, IServiceCollection services) { services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.SaveToken = true; options.RequireHttpsMetadata = false; options.TokenValidationParameters = new TokenValidationParameters() { ValidateIssuer = true, ValidateAudience = true, ValidAudience = builder.Configuration["JWT:ValidAudience"], ValidIssuer = builder.Configuration["JWT:ValidIssuer"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JWT:Secret"] ?? "N/A")) }; }); } private static void AddCorsServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AllowAnyOrigin", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); } private static void AddOtherServices(IServiceCollection services) { services.AddMemoryCache(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); #region Automation using LLM services.AddHttpClient(); #endregion services.AddScoped(); services.AddScoped(); services.AddScoped (); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddTransient(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); } } }