Release v2.10.3
This commit is contained in:
+25
-3
@@ -1,3 +1,5 @@
|
||||
// Database pool setup and lifecycle maintenance for persisted onboarding devices.
|
||||
|
||||
const mysql = require('mysql2/promise');
|
||||
|
||||
function createPool() {
|
||||
@@ -15,14 +17,34 @@ function createPool() {
|
||||
}
|
||||
|
||||
async function pruneStaleOnboardingDevices(pool) {
|
||||
// Uncompleted pairings expire quickly; completed bindings use their persisted heartbeat instead.
|
||||
await pool.query(
|
||||
`DELETE FROM d_onboarding_devices
|
||||
WHERE screen_id IS NULL
|
||||
AND modified_at < (CURRENT_TIMESTAMP - INTERVAL 1 MINUTE)`
|
||||
WHERE (screen_id IS NULL
|
||||
AND modified_at < (CURRENT_TIMESTAMP - INTERVAL 15 MINUTE))
|
||||
OR (last_seen_at IS NOT NULL
|
||||
AND last_seen_at < (CURRENT_TIMESTAMP - INTERVAL 24 HOUR))`
|
||||
);
|
||||
}
|
||||
|
||||
async function touchOnboardingDeviceLastSeen(pool, deviceId) {
|
||||
const deviceIds = (Array.isArray(deviceId) ? deviceId : [deviceId])
|
||||
.map(function (value) { return String(value || '').trim(); })
|
||||
.filter(Boolean);
|
||||
if (!deviceIds.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
await pool.query(
|
||||
`UPDATE d_onboarding_devices
|
||||
SET last_seen_at = CURRENT_TIMESTAMP
|
||||
WHERE device_id IN (${deviceIds.map(function () { return '?'; }).join(', ')})`,
|
||||
deviceIds
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
createPool,
|
||||
pruneStaleOnboardingDevices
|
||||
pruneStaleOnboardingDevices,
|
||||
touchOnboardingDeviceLastSeen
|
||||
};
|
||||
@@ -1,3 +1,5 @@
|
||||
// Schema initialization, migration execution, and database bootstrap helpers.
|
||||
|
||||
const { version: appVersion } = require('#root/package.json');
|
||||
const { compareVersions, detectSchemaVersion, getPendingMigrations, recordSchemaVersion, runMigrations } = require('./migrations');
|
||||
|
||||
@@ -331,6 +333,7 @@ async function ensureSchema(pool, options) {
|
||||
created_by INT NULL,
|
||||
modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
modified_by INT NULL,
|
||||
last_seen_at TIMESTAMP NULL,
|
||||
CONSTRAINT fk_player_onboarding_devices_screen FOREIGN KEY (screen_id) REFERENCES d_screens(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
`);
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Ordered database migrations kept independent from the application version.
|
||||
|
||||
const { version: appVersion } = require('#root/package.json');
|
||||
const TIMETABLE_TIME_ZONE = 'Europe/London';
|
||||
const APP_STATE_TABLE = 'o_app_state';
|
||||
@@ -552,6 +554,13 @@ const VERSIONED_MIGRATIONS = [
|
||||
run: async function (pool) {
|
||||
await ensureColumn(pool, 'c_templates', 'background_gradient', 'LONGTEXT NULL', 'background_color');
|
||||
}
|
||||
},
|
||||
{
|
||||
version: '2.10.2',
|
||||
label: 'v2.10.2 onboarding client last-seen schema',
|
||||
run: async function (pool) {
|
||||
await ensureColumn(pool, 'd_onboarding_devices', 'last_seen_at', 'TIMESTAMP NULL', 'screen_id');
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user