using Microsoft.AspNetCore.Routing; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using TeamUp.Modules.Governance.Auditing; using TeamUp.Modules.Governance.Endpoints; using TeamUp.Modules.Governance.Gate; using TeamUp.Modules.Governance.Persistence; using TeamUp.SharedKernel.Ai; using TeamUp.SharedKernel.Auditing; using TeamUp.SharedKernel.Modularity; using TeamUp.SharedKernel.Persistence; namespace TeamUp.Modules.Governance; /// Autonomy dial, the action gate, the review inbox, the audit log (M5). M1 ships the audit log. public sealed class GovernanceModule : IModule { public string Name => "governance"; public void Register(IServiceCollection services, IConfiguration configuration) { var connectionString = configuration.GetConnectionString("Postgres") ?? throw new InvalidOperationException("Missing connection string 'ConnectionStrings:Postgres'."); services.AddDbContext(options => options.UseNpgsql(connectionString)); services.AddScoped(sp => sp.GetRequiredService()); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.TryAddSingleton(TimeProvider.System); } public void MapEndpoints(IEndpointRouteBuilder endpoints) => GovernanceEndpoints.Map(endpoints); }