Refactor: Server-Settings von appsettings.json in DB-Tabelle (server_settings)
- Neuer ServerSettingsService: zentrale Settings in SQLite mit In-Memory-Cache - Auto-Migration: bestehende appsettings.Production.json wird einmalig in DB übernommen - Alle Services umgestellt: IConfiguration → ServerSettingsService (dynamisch, kein Neustart) - Port bleibt als einziges Setting in appsettings.Production.json (erfordert Neustart) - ServerSettingsEndpoint: liest/schreibt DB statt JSON-Datei, Port als Sonder-Setting - IConfiguration komplett entfernt aus allen Services (ChatService, ToolService, AnthropicService, OpenAiService, KreaService, TelegramService, KeyScannerService, GitHubEventScannerService) - AuthMiddleware: KreaApiKey dynamisch aus DB - appsettings.json bereinigt: nur noch Port und Logging - Dokumentation aktualisiert (ARCHITECTURE.md, ARCHITECTURE_QUICK.md, README.md)
This commit is contained in:
1 parent
542a031172
commit
122000487c
18 files changed
+389
-270
No files matched your search
+18
-17
@@ -16,7 +16,18 @@ var builder = WebApplication.CreateBuilder(args);
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
builder.Services.AddWindowsService();
|
||||
|
||||
var proxyUrl = builder.Configuration["ProxyUrl"];
|
||||
var dataDir = Path.Combine(AppContext.BaseDirectory, "data");
|
||||
Directory.CreateDirectory(dataDir);
|
||||
|
||||
var dbPath = Path.Combine(dataDir, "gott.db");
|
||||
|
||||
// ServerSettingsService – zentrale Settings aus DB
|
||||
var serverSettings = new ServerSettingsService(dbPath);
|
||||
serverSettings.MigrateFromAppSettings(builder.Environment.ContentRootPath);
|
||||
builder.Services.AddSingleton(serverSettings);
|
||||
|
||||
// Proxy (erfordert Neustart – wird nur beim Start gelesen)
|
||||
var proxyUrl = serverSettings.Get("ProxyUrl");
|
||||
if (!string.IsNullOrWhiteSpace(proxyUrl))
|
||||
{
|
||||
builder.Services.AddHttpClient().ConfigureHttpClientDefaults(b =>
|
||||
@@ -31,10 +42,6 @@ else
|
||||
builder.Services.AddHttpClient();
|
||||
}
|
||||
|
||||
var dataDir = Path.Combine(AppContext.BaseDirectory, "data");
|
||||
Directory.CreateDirectory(dataDir);
|
||||
|
||||
var dbPath = Path.Combine(dataDir, "gott.db");
|
||||
var authService = new AuthService(dbPath);
|
||||
var dbService = new DatabaseService(dbPath);
|
||||
dbService.EnsureDefaultUser(authService);
|
||||
@@ -50,11 +57,9 @@ builder.Services.AddSingleton(memoryService);
|
||||
builder.Services.AddSingleton(skillService);
|
||||
|
||||
// Shared Services
|
||||
var toolService = new ToolService(builder.Configuration);
|
||||
var toolService = new ToolService(serverSettings);
|
||||
builder.Services.AddSingleton(toolService);
|
||||
var maxHistory = builder.Configuration.GetValue<int>("MaxHistory", 120);
|
||||
var reminderInterval = builder.Configuration.GetValue<int>("ReminderInterval", 30);
|
||||
var chatService = new ChatService(dbService, toolService, memoryService, skillService, maxHistory, reminderInterval);
|
||||
var chatService = new ChatService(dbService, toolService, memoryService, skillService, serverSettings);
|
||||
builder.Services.AddSingleton(chatService);
|
||||
|
||||
// Embedding-Services (lokal, ONNX)
|
||||
@@ -67,14 +72,12 @@ builder.Services.AddSingleton(embeddingBgService);
|
||||
builder.Services.AddHostedService(sp => sp.GetRequiredService<Gott.Services.EmbeddingBackgroundService>());
|
||||
|
||||
// AnthropicService (Singleton – Token wird pro Request vom User aufgelöst)
|
||||
var payloadLogging = builder.Configuration.GetValue<bool>("PayloadLogging", false);
|
||||
var payloadLoggingGzip = builder.Configuration.GetValue<bool>("PayloadLoggingGzip", false);
|
||||
builder.Services.AddSingleton<AnthropicService>(sp =>
|
||||
{
|
||||
var svc = new AnthropicService(
|
||||
sp.GetRequiredService<IHttpClientFactory>(),
|
||||
toolService, dbService, memoryService,
|
||||
payloadLogging, payloadLoggingGzip,
|
||||
serverSettings,
|
||||
vectorSearch: vectorSearchService,
|
||||
embeddingBg: embeddingBgService);
|
||||
svc.SetChatService(chatService);
|
||||
@@ -83,21 +86,19 @@ builder.Services.AddSingleton<AnthropicService>(sp =>
|
||||
|
||||
// OpenAI-kompatibler Service (Nvidia etc.)
|
||||
builder.Services.AddSingleton<OpenAiService>(sp =>
|
||||
new OpenAiService(sp.GetRequiredService<IHttpClientFactory>(), dbService, sp.GetRequiredService<ToolService>(), builder.Configuration, dataDir));
|
||||
new OpenAiService(sp.GetRequiredService<IHttpClientFactory>(), dbService, sp.GetRequiredService<ToolService>(), serverSettings, dataDir));
|
||||
|
||||
// Telegram Bot (pro Session – Token aus Session-Config)
|
||||
var maxIterations = builder.Configuration.GetValue<int>("MaxIterations", 100);
|
||||
builder.Services.AddSingleton<TelegramService>(sp =>
|
||||
new TelegramService(
|
||||
sp.GetRequiredService<IHttpClientFactory>(),
|
||||
dbService, chatService,
|
||||
sp.GetRequiredService<AnthropicService>(),
|
||||
maxIterations));
|
||||
serverSettings));
|
||||
|
||||
// Krea Image Generation
|
||||
var kreaToken = builder.Configuration["KreaToken"] ?? "";
|
||||
builder.Services.AddSingleton(sp =>
|
||||
new KreaService(sp.GetRequiredService<IHttpClientFactory>(), kreaToken, dataDir));
|
||||
new KreaService(sp.GetRequiredService<IHttpClientFactory>(), serverSettings, dataDir));
|
||||
|
||||
// Cronjob-Service (BackgroundService)
|
||||
builder.Services.AddSingleton<CronjobService>();
|
||||
|
||||
Reference in new issue
Block a user