Projektsuche Implementiert mit anbindung an INFRA
This commit is contained in:
91
services/mssql-infra-service.js
Normal file
91
services/mssql-infra-service.js
Normal file
@@ -0,0 +1,91 @@
|
||||
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 50
|
||||
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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user