server_photo_s35js/api_v1/scanner/recordChange.js
2026-07-18 13:51:20 +02:00

97 lines
No EOL
2.9 KiB
JavaScript

// 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;