InitalCommit
This commit is contained in:
116
routes/search.js
Normal file
116
routes/search.js
Normal file
@@ -0,0 +1,116 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const { fullTextSearch, getAvailableTables, getTableColumns, SEARCH_CONFIG } = require('../services/searchService');
|
||||
|
||||
/**
|
||||
* GET /api/search?q=suchbegriff
|
||||
* Führt eine Volltextsuche durch
|
||||
*/
|
||||
router.get('/', async (req, res) => {
|
||||
try {
|
||||
const searchTerm = req.query.q;
|
||||
|
||||
if (!searchTerm) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error: 'Suchbegriff fehlt. Verwenden Sie ?q=IhrSuchbegriff'
|
||||
});
|
||||
}
|
||||
|
||||
const results = await fullTextSearch(searchTerm);
|
||||
|
||||
const totalMatches = results.reduce((sum, table) => sum + table.matchCount, 0);
|
||||
const tableErrors = results.filter(table => table && table.error);
|
||||
|
||||
// Wenn es Konfigurations-/SQL-Fehler gibt und gleichzeitig keine Treffer gefunden wurden,
|
||||
// deutet das sehr wahrscheinlich auf ein Problem mit der Suchkonfiguration hin
|
||||
if (totalMatches === 0 && tableErrors.length > 0) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
searchTerm: searchTerm,
|
||||
totalMatches: totalMatches,
|
||||
tablesSearched: results.length,
|
||||
results: results,
|
||||
error: 'Fehler bei der Suche in einer oder mehreren Tabellen. Bitte prüfen Sie die Suchkonfiguration (Spaltennamen, Tabellen).',
|
||||
tableErrors: tableErrors
|
||||
});
|
||||
}
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
searchTerm: searchTerm,
|
||||
totalMatches: totalMatches,
|
||||
tablesSearched: results.length,
|
||||
results: results,
|
||||
tableErrors: tableErrors
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('Suchfehler:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* GET /api/search/tables
|
||||
* Gibt alle verfügbaren Tabellen zurück
|
||||
*/
|
||||
router.get('/tables', async (req, res) => {
|
||||
try {
|
||||
const tables = await getAvailableTables();
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
tables: tables,
|
||||
configured: SEARCH_CONFIG.map(t => t.tableName)
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Abrufen der Tabellen:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* GET /api/search/tables/:tableName
|
||||
* Gibt die Spalten einer Tabelle zurück
|
||||
*/
|
||||
router.get('/tables/:tableName', async (req, res) => {
|
||||
try {
|
||||
const tableName = req.params.tableName;
|
||||
const columns = await getTableColumns(tableName);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
tableName: tableName,
|
||||
columns: columns
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Abrufen der Spalten:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* GET /api/search/config
|
||||
* Gibt die aktuelle Suchkonfiguration zurück
|
||||
*/
|
||||
router.get('/config', (req, res) => {
|
||||
res.json({
|
||||
success: true,
|
||||
config: SEARCH_CONFIG
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
Reference in New Issue
Block a user