// api_v1/scanner/recordChange.js const { log } = require('./logger'); const wss = require('../../ws-server'); // IMPORTANTE async function recordChange(db, photo_id, user, change_type) { const timestamp = new Date().toISOString(); // ----------------------------------------------------- // DEDUPLICA SOLO PER "removed" // ----------------------------------------------------- if (change_type === 'removed') { const already = await db('photo_changes') .where({ photo_id, user, change_type: 'removed' }) .first(); if (already) { log(`📘 [CHANGES] removed già registrato → ${photo_id}, ma invio comunque WS`); // ----------------------------------------------------- // 🔥 INVIA WS ANCHE SE GIÀ REGISTRATO // ----------------------------------------------------- console.log("WS → invio evento (USER) [removed già registrato]"); try { wss.broadcastToUser(user, { type: "removed", id: photo_id }); console.log("WS → OK USER (removed già registrato)"); } catch (e) { console.error("WS → ERRORE USER (removed già registrato):", e); } console.log("WS → invio evento (ADMIN) [removed già registrato]"); try { wss.broadcastToAdmins({ type: "removed", id: photo_id, user }); console.log("WS → OK ADMIN (removed già registrato)"); } catch (e) { console.error("WS → ERRORE ADMIN (removed già registrato):", e); } return; } } // ----------------------------------------------------- // SALVA NEL DB (added o primo removed) // ----------------------------------------------------- await db("photo_changes").insert({ photo_id, user, change_type, timestamp }); log(`📘 [CHANGES] ${change_type} → ${photo_id}`); // ----------------------------------------------------- // LOG PRIMA DEL BROADCAST // ----------------------------------------------------- console.log("WS → invio evento:", { user, change_type, photo_id }); // ----------------------------------------------------- // 🔥 BROADCAST A USER // ----------------------------------------------------- console.log("WS → invio evento (USER)"); try { wss.broadcastToUser(user, { type: change_type, id: photo_id }); console.log("WS → OK USER"); } catch (e) { console.error("WS → ERRORE USER:", e); } // ----------------------------------------------------- // 🔥 BROADCAST A ADMIN // ----------------------------------------------------- console.log("WS → invio evento (ADMIN)"); try { wss.broadcastToAdmins({ type: change_type, id: photo_id, user }); console.log("WS → OK ADMIN"); } catch (e) { console.error("WS → ERRORE ADMIN:", e); } } module.exports = recordChange;