// ── SQL for the visibility settings ─────────────────────────────────────── // // Two stores for one decision: the fleet default in `rust_settings`, and an // optional per-server override on `rust_servers`. See `schema.sql` for why each // lives where it does. const core = require('../../core') const SETTINGS = 'rust_settings' const SERVERS = 'rust_servers' /** One setting's stored value, or `null` when nobody has ever set it. */ async function getSetting(key) { const rows = await core.query(`SELECT value FROM ${SETTINGS} WHERE setting_key = ?`, [key]) return rows[0] ? rows[0].value : null } async function setSetting(key, value, userId = null) { await core.query( `INSERT INTO ${SETTINGS} (setting_key, value, updated_by, updated_at) VALUES (?, ?, ?, CURRENT_TIMESTAMP) ON DUPLICATE KEY UPDATE value = VALUES(value), updated_by = VALUES(updated_by), updated_at = CURRENT_TIMESTAMP`, [key, value, userId], ) } /** One server's override, `null` for "inherit", or `undefined` when there is no such server. */ async function getServerPresence(serverId) { const rows = await core.query(`SELECT presence_audience AS presence FROM ${SERVERS} WHERE id = ?`, [serverId]) return rows[0] ? rows[0].presence : undefined } /** Every configured server with its override, in the operator's own order. */ async function listServerPresence() { return core.query( `SELECT id, name, enabled, presence_audience AS presence FROM ${SERVERS} ORDER BY sort_order ASC, id ASC`, ) } /** * Sets or clears (`null`) one server's override. * * Returns nothing, deliberately. `affectedRows` would look like a way to tell * "no such server" from success, and it is not one: without `foundRows` an * UPDATE writing the value already there reports 0, and whether core's pool sets * that flag is core's business. The model checks existence with a read first. */ async function setServerPresence(serverId, value) { await core.query(`UPDATE ${SERVERS} SET presence_audience = ? WHERE id = ?`, [value, serverId]) } module.exports = { getSetting, setSetting, getServerPresence, listServerPresence, setServerPresence }