using GB5Shared.Connection; using GB5Shared.DTO.Framework.CommonConfig; using GB5Shared.DTO.Framework.Login; using GB5Shared.DTO.Framework.ServerConfig; using Microsoft.Data.SqlClient; using Microsoft.Extensions.Options; namespace ApiRegistrationTool; /// /// Custom IApplicationConnection for the CLI tool. /// /// The standard ApplicationConnection.DBConnectionStringCached(LoginDTO) does a /// SERVERCONFIG table lookup to resolve tenant DB connections. For the tool we /// always want the master Gb5System connection (MAPI tables live there), so we /// short-circuit that lookup and return Gb5SystemConnectionString() directly. /// public sealed class ToolApplicationConnection : IApplicationConnection { private readonly IApplicationConnection _inner; private readonly ToolConfig _cfg; private readonly IOptions _gb5SystemDto; public ToolApplicationConnection(ApplicationConnection inner, ToolConfig cfg, IOptions gb5SystemDto) { _inner = inner; _cfg = cfg; _gb5SystemDto = gb5SystemDto; } // ── When DatabaseName is configured: go through SERVERCONFIG lookup. // ── When not configured: fall back to the Gb5System master connection. public async Task DBConnectionStringCached(LoginDTO loginDTO) { if (!string.IsNullOrWhiteSpace(_cfg.DatabaseName)) { loginDTO.DatabaseName = _cfg.DatabaseName; return await _inner.DBConnectionStringCached(loginDTO); } return await _inner.Gb5SystemConnectionString(); } // ── All other methods delegate unchanged ───────────────────────────── public Task DBConnectionStringCached(string connectionName) => _inner.DBConnectionStringCached(connectionName); public Task DatabaseConnectionObject(string connectionName) => _inner.DatabaseConnectionObject(connectionName); public Task Gb5SystemConnectionString() => _inner.Gb5SystemConnectionString(); public Task DBConnectionStringCachedConnectionName(string connectionName) => _inner.DBConnectionStringCachedConnectionName(connectionName); public string Decrypt(string encryptedText, string key) => _inner.Decrypt(encryptedText, key); public string DecryptPasswordHash(string CipherString, bool UseHashing) => _inner.DecryptPasswordHash(CipherString, UseHashing); public string Encrypt(string plaintext, string key = "GB5") => _inner.Encrypt(plaintext, key); public string RandomGenerateAlphaNumeric(int size) => _inner.RandomGenerateAlphaNumeric(size); // ── The tool always targets the master Gb5System connection (see class // doc comment), so the DB type is just the configured global default — // no SERVERCONFIG/tenant lookup needed. ──────────────────────────── public Task DatabaseTypeCached(LoginDTO LoginDTO) => Task.FromResult(_gb5SystemDto.Value.DataBaseType); public Task DatabaseTypeCached(string ConnectionName) => Task.FromResult(_gb5SystemDto.Value.DataBaseType); }