using FluentValidation; using FluentValidation.AspNetCore; using Hotline.Api.Realtimes; using Hotline.Application; using Hotline.Application.Contracts; using Hotline.CallCenter.Devices; using Hotline.NewRock; using Hotline.Permissions; using Hotline.Repository.SqlSugar.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Serilog; using Mapster; using Tr.Sdk; using XF.Domain.Dependency; using XF.Domain.Filters; using XF.Domain.Options; using XF.EasyCaching; using XF.Utility.MQ; using Hotline.Ai.Jths; using Hotline.Api.Sdk; using Hotline.CallCenter.Configs; using Hotline.YbEnterprise.Sdk; using Hotline.Share.Dtos.SendSms; using Hotline.Wex; using Hotline.Application.CallCenter.Calls; using Hotline.Application.CallCenter; using Hotline.CallCenter.Calls; namespace Hotline.Api; internal static class StartupExtensions { const string CorsOrigins = "CorsOrigins"; internal static WebApplication ConfigureServices(this WebApplicationBuilder builder) { var services = builder.Services; var configuration = builder.Configuration; services.AddHttpContextAccessor(); #if DEBUG builder.WebHost.UseUrls("http://*:50100"); #endif services.Configure(d => configuration.GetSection(nameof(IdentityConfiguration)).Bind(d)); services.Configure(d => configuration.GetSection(nameof(CallCenterConfiguration)).Bind(d)); services.Configure(d => configuration.GetSection("AiVisit").Bind(d)); services.Configure(d => configuration.GetSection("SendSms").Bind(d)); // Add services to the container. services .BatchInjectServices() .RegisterRepository() .AddApplication() //.AddClientCore(configuration) //.AddScoped, PasswordHasher>() .AddScoped(typeof(IPasswordHasher<>), typeof(PasswordHasher<>)) ; //cache services.AddCache(d => { var cacheConfig = configuration.GetSection("Cache").Get(); cacheConfig.Adapt(d); d.Prefix = "Hotline"; d.TopicName = "hotline-topic"; }); //Authentication services.RegisterAuthentication(configuration); services.AddControllers(options => { options.Filters.Add(); options.Filters.Add(); }) ; // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle services.AddEndpointsApiExplorer(); //swagger services.RegisterSwagger(); //signalR services.RegisterSignalR(configuration); /* CORS */ services.RegisterCors(configuration, CorsOrigins); //mapster services.RegisterMapper(); //mediatr services.AddMediatR(d => { d.RegisterServicesFromAssembly(typeof(ApplicationStartupExtensions).Assembly); }); //callcenter var callCenterConfiguration = configuration .GetRequiredSection(nameof(CallCenterConfiguration)) .Get(); services.AddNewRock(callCenterConfiguration.NewRock); switch (callCenterConfiguration.CallCenterType) { case "XunShi": break; case "WerErXin": services .AddWex(callCenterConfiguration.Wex) .AddWexDb(configuration); break; case "TianRun": services .AddScoped() .AddScoped() .AddHostedService() .AddHostedService() .AddTrSdk(callCenterConfiguration.TianRun.Address, callCenterConfiguration.TianRun.Username, callCenterConfiguration.TianRun.Password); break; case "XingTang": services.AddXingTangDb(callCenterConfiguration.XingTang) .AddScoped() .AddScoped() ; break; default: break; } ////tr //var trConfig = configuration.GetRequiredSection("Tr").Get(); //jths services.AddAiJths(configuration.GetSection("AiQuality").Get().Url); //宜宾企业服务 services.Configure(d => configuration.GetSection("Enterprise").Bind(d)); var enterpriseConfig = configuration.GetSection("Enterprise").Get(); services.AddYbEnterpriseSdk(enterpriseConfig?.AddressUrl); var aiVisitConfig = configuration.GetSection("AiVisit").Get(); services.AddAiVisitService( aiVisitConfig.Url, aiVisitConfig.Appkey, aiVisitConfig.ServiceVersion); //sqlsugar services.AddSqlSugar(configuration); //validator services.AddFluentValidationAutoValidation(config => { config.DisableDataAnnotationsValidation = true; }) .AddValidatorsFromAssembly(typeof(AppContractsStartupExtensions).Assembly); //mq services.AddMq(configuration); //job services.RegisterJob(callCenterConfiguration); services.AddSingleton(); services.AddSingleton(); //services.AddScoped(); return builder.Build(); } internal static WebApplication ConfigurePipelines(this WebApplication app) { app.UseSerilogRequestLogging(); // Configure the HTTP request pipeline. var swaggerEnable = app.Configuration.GetSection("Swagger").Get(); if (swaggerEnable) { app.UseSwagger(); app.UseSwaggerUI(c => { //c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); }); } app.UseCors(CorsOrigins); app.UseAuthentication(); app.UseAuthorization(); //app.MapHub("/hubs/callcenter"); app.MapHub("/hubs/hotline"); app.MapControllers() .RequireAuthorization(); //app.MapSubscribeHandler(); return app; } }