/** * Records Routes * Query and manage imported records */ const express = require('express'); module.exports = (pool) => { const router = express.Router(); // List records for a source router.get('/source/:source_name', async (req, res, next) => { try { const { limit = 100, offset = 0, transformed_only } = req.query; let query = 'SELECT * FROM records WHERE source_name = $1'; const params = [req.params.source_name]; if (transformed_only === 'true') { query += ' AND transformed IS NOT NULL'; } query += ' ORDER BY id DESC LIMIT $2 OFFSET $3'; params.push(parseInt(limit), parseInt(offset)); const result = await pool.query(query, params); res.json(result.rows); } catch (err) { next(err); } }); // Get single record router.get('/:id', async (req, res, next) => { try { const result = await pool.query( 'SELECT * FROM records WHERE id = $1', [req.params.id] ); if (result.rows.length === 0) { return res.status(404).json({ error: 'Record not found' }); } res.json(result.rows[0]); } catch (err) { next(err); } }); // Search records router.post('/search', async (req, res, next) => { try { const { source_name, query, limit = 100 } = req.body; if (!source_name || !query) { return res.status(400).json({ error: 'Missing required fields: source_name, query' }); } // Search in both data and transformed fields const result = await pool.query( `SELECT * FROM records WHERE source_name = $1 AND (data @> $2 OR transformed @> $2) ORDER BY id DESC LIMIT $3`, [source_name, JSON.stringify(query), parseInt(limit)] ); res.json(result.rows); } catch (err) { next(err); } }); // Delete record router.delete('/:id', async (req, res, next) => { try { const result = await pool.query( 'DELETE FROM records WHERE id = $1 RETURNING id', [req.params.id] ); if (result.rows.length === 0) { return res.status(404).json({ error: 'Record not found' }); } res.json({ success: true, deleted: result.rows[0].id }); } catch (err) { next(err); } }); // Delete all records for a source router.delete('/source/:source_name/all', async (req, res, next) => { try { const result = await pool.query( 'DELETE FROM records WHERE source_name = $1', [req.params.source_name] ); res.json({ success: true, deleted_count: result.rowCount }); } catch (err) { next(err); } }); return router; };