server_photo_s85js/db/dbWs.js
2026-08-11 08:45:04 +02:00

142 lines
3.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// db/dbWs.js
console.log(">>> dbWs.js CARICATO:", __filename);
const knex = require("./knex");
// ===============================
// SESSIONI
// ===============================
async function upsertSession(session_id, user, device_id) {
const now = Date.now();
const existing = await knex("ws_sessions")
.where({ session_id, device_id })
.first();
if (!existing) {
await knex("ws_sessions").insert({
session_id,
user,
device_id,
connected_at: now,
last_ack: now,
last_sync: null,
need_full_sync: false
});
} else {
await knex("ws_sessions")
.where({ session_id, device_id })
.update({
user,
connected_at: now,
last_ack: now
});
}
}
async function getDevicesForSession(session_id) {
const rows = await knex('ws_sessions')
.where({ session_id })
.select('device_id');
return rows.map(r => r.device_id);
}
async function getSession(session_id, device_id) {
return knex("ws_sessions")
.where({ session_id, device_id })
.first();
}
async function updateSessionAck(session_id, device_id) {
return knex("ws_sessions")
.where({ session_id, device_id })
.update({ last_ack: Date.now() });
}
async function setSessionNeedFullSync(session_id, device_id, value) {
return knex("ws_sessions")
.where({ session_id, device_id })
.update({ need_full_sync: value });
}
async function clearNeedFullSync(session_id, device_id) {
return knex("ws_sessions")
.where({ session_id, device_id })
.update({ need_full_sync: false });
}
async function getSessionsByUser(user) {
return knex("ws_sessions").where({ user });
}
async function deleteSession(session_id, device_id) {
await knex("ws_sessions").where({ session_id, device_id }).del();
await knex("pending_events").where({ session_id, device_id }).del();
}
// ===============================
// PENDING EVENTS (nuovo modello)
// ===============================
async function insertPendingEvent({ user_id, session_id, device_id, event_id, payload, created_at }) {
return knex("pending_events").insert({
user_id,
session_id,
device_id,
event_id,
payload,
created_at
});
}
async function deletePendingEvent({ user_id, session_id, device_id, event_id }) {
return knex("pending_events")
.where({ user_id, session_id, device_id, event_id })
.delete();
}
async function getPendingEvents(user_id, session_id, device_id) {
return knex("pending_events")
.where({ user_id, session_id, device_id })
.orderBy("created_at", "asc");
}
async function deleteAllSessions() {
console.log(">>> deleteAllSessions() elimino tutte le sessioni WS");
return knex("ws_sessions").del();
}
async function deleteAllPendingEvents() {
console.log(">>> deleteAllPendingEvents() elimino tutti i pending events");
return knex("pending_events").del();
}
async function setLastSync(session_id, device_id, timestamp = null) {
const ts = timestamp || Date.now();
return knex("ws_sessions")
.where({ session_id, device_id })
.update({ last_sync: ts });
}
// ===============================
// EXPORT
// ===============================
module.exports = {
upsertSession,
getSession,
updateSessionAck,
setSessionNeedFullSync,
clearNeedFullSync,
deleteSession,
getSessionsByUser,
insertPendingEvent,
deletePendingEvent,
getPendingEvents,
getDevicesForSession,
setLastSync,
deleteAllSessions,
deleteAllPendingEvents
};