/searches
This commit is contained in:
@@ -158,6 +158,86 @@ app.post('/tracker/run', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
|
// 🔍 SUCHAUFTRÄGE VERWALTEN (GET, PUT, DELETE)
|
||||||
|
// ----------------------------------------------------
|
||||||
|
|
||||||
|
// 1. Alle gespeicherten Suchaufträge anzeigen
|
||||||
|
app.get('/searches', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const result = await pool.query('SELECT * FROM tracked_searches ORDER BY id ASC');
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
count: result.rows.length,
|
||||||
|
searches: result.rows
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ success: false, error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 2. Einen bestimmten Suchauftrag bearbeiten (Query, Negativ-Keywords, Aktiv-Status)
|
||||||
|
app.put('/searches/:id', async (req, res) => {
|
||||||
|
const { id } = req.params;
|
||||||
|
const { query, negative_keywords, is_active } = req.body;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Array sicherstellen, falls Negativ-Keywords als Komma-String gesendet werden
|
||||||
|
let formattedNegatives = negative_keywords;
|
||||||
|
if (typeof negative_keywords === 'string') {
|
||||||
|
formattedNegatives = negative_keywords.split(',').map(k => k.trim()).filter(Boolean);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await pool.query(`
|
||||||
|
UPDATE tracked_searches
|
||||||
|
SET query = COALESCE($1, query),
|
||||||
|
negative_keywords = COALESCE($2, negative_keywords),
|
||||||
|
is_active = COALESCE($3, is_active),
|
||||||
|
updated_at = CURRENT_TIMESTAMP
|
||||||
|
WHERE id = $4
|
||||||
|
RETURNING *;
|
||||||
|
`, [
|
||||||
|
query || null,
|
||||||
|
formattedNegatives || null,
|
||||||
|
is_active !== undefined ? is_active : null,
|
||||||
|
id
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (result.rows.length === 0) {
|
||||||
|
return res.status(404).json({ success: false, message: 'Suchauftrag nicht gefunden.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
message: 'Suchauftrag erfolgreich aktualisiert!',
|
||||||
|
search: result.rows[0]
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ success: false, error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 3. Einen Suchauftrag löschen
|
||||||
|
app.delete('/searches/:id', async (req, res) => {
|
||||||
|
const { id } = req.params;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await pool.query('DELETE FROM tracked_searches WHERE id = $1 RETURNING *', [id]);
|
||||||
|
|
||||||
|
if (result.rows.length === 0) {
|
||||||
|
return res.status(404).json({ success: false, message: 'Suchauftrag nicht gefunden.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
message: `Suchauftrag "${result.rows[0].query}" (ID: ${id}) wurde gelöscht.`
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ success: false, error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// Server-Start
|
// Server-Start
|
||||||
async function startServer() {
|
async function startServer() {
|
||||||
await initDb();
|
await initDb();
|
||||||
|
|||||||
Reference in New Issue
Block a user