const { db } = require('../database'); const sql = require('mssql'); let cachedConfig = null; let lastConfigLoad = 0; let pool = null; async function loadConfig() { return new Promise((resolve, reject) => { db.get('SELECT server, database, username, password FROM mssql_config WHERE id = 1', (err, row) => { if (err) { return reject(new Error('Fehler beim Lesen der MSSQL-Konfiguration: ' + err.message)); } resolve(row || null); }); }); } async function getMssqlPool() { const now = Date.now(); if (!cachedConfig || now - lastConfigLoad > 60 * 1000) { cachedConfig = await loadConfig(); lastConfigLoad = now; } if (!cachedConfig || !cachedConfig.server || !cachedConfig.database || !cachedConfig.username || !cachedConfig.password) { throw new Error('MSSQL-Konfiguration ist unvollständig. Bitte im Adminbereich konfigurieren.'); } if (pool && pool.connected) { return pool; } const config = { server: cachedConfig.server, database: cachedConfig.database, user: cachedConfig.username, password: cachedConfig.password, options: { encrypt: false, trustServerCertificate: true } }; pool = await sql.connect(config); return pool; } async function searchProjectsByDescription(searchTerm) { const pool = await getMssqlPool(); const request = pool.request(); request.input('search', sql.NVarChar, `%${searchTerm}%`); // Datenbankname aus Konfiguration verwenden const dbName = cachedConfig && cachedConfig.database ? cachedConfig.database : null; if (!dbName) { throw new Error('MSSQL-Datenbankname ist nicht konfiguriert.'); } const query = ` SELECT TOP 25 kk.Auftrag AS auftrag, kk.Proj AS proj, kk.Such AS such, kk.Knd AS knd, k.Bez AS bez FROM [${dbName}].dbo.KKOPF kk LEFT JOIN [${dbName}].dbo.KUNDE k ON kk.Knd = k.Knd WHERE kk.Proj LIKE @search OR kk.Auftrag LIKE @search OR kk.Such LIKE @search OR k.Bez LIKE @search ORDER BY kk.ErfTerm DESC `; const result = await request.query(query); return result.recordset || []; } async function testMssqlConnection() { const pool = await getMssqlPool(); await pool.request().query('SELECT TOP 1 1 AS ok'); return true; } module.exports = { getMssqlPool, searchProjectsByDescription, testMssqlConnection };