| |
| const express = require('express'); |
| const bodyParser = require('body-parser'); |
| const { Pool } = require('pg'); |
| const Redis = require('ioredis'); |
| const { v4: uuidv4 } = require('uuid'); |
|
|
| const pool = new Pool({ connectionString: process.env.DATABASE_URL || 'postgresql://localhost/integral' }); |
| const redis = new Redis(process.env.REDIS_URL || 'redis://localhost:6379'); |
|
|
| const app = express(); |
| app.use(bodyParser.json()); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| app.post('/detect', async (req, res) => { |
| try { |
| const { namespace, type, timestamp, location, severity=1, images=[], provenance={} } = req.body; |
| const id = uuidv4(); |
| const q = `INSERT INTO objects (id, namespace, type, timestamp, location, severity, images, provenance) |
| VALUES ($1,$2,$3,$4,$5,$6,$7,$8) RETURNING *`; |
| const values = [id, namespace, type, timestamp || new Date().toISOString(), location || null, severity, JSON.stringify(images), provenance]; |
| const result = await pool.query(q, values); |
| const obj = result.rows[0]; |
|
|
| |
| await redis.publish('infra:faults:created', JSON.stringify({ id: obj.id, namespace, type, location, severity })); |
|
|
| res.status(201).json(obj); |
| } catch (err) { |
| console.error(err); |
| res.status(500).json({ error: 'detection failed' }); |
| } |
| }); |
|
|
| app.listen(process.env.PORT || 3001, () => console.log('detection-service listening on 3001')); |
|
|