CentralBackend/repositories/settings/DashboardPlatformsRepository.js
2026-03-15 18:33:52 +01:00

143 lines
3.9 KiB
JavaScript

const pool = require('../../database/database');
class DashboardPlatformsRepository {
async _hasTable() {
const [rows] = await pool.query(
`SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'dashboard_plattforms'
LIMIT 1`
);
return Array.isArray(rows) && rows.length > 0;
}
_mapRow(row) {
if (!row) return null;
return {
id: row.id,
title: row.title,
description: row.description ?? '',
href: row.href,
icon: row.icon ?? '',
color: row.color ?? '',
state: row.state !== 0 && row.state !== false,
disabled: row.disabled === 1 || row.disabled === true,
disabledText: row.disabled_text ?? null,
sortOrder: Number.isFinite(Number(row.sort_order)) ? Number(row.sort_order) : 0,
};
}
async list() {
const has = await this._hasTable();
if (!has) return [];
const [rows] = await pool.query(
`SELECT id, title, description, href, icon, color, state, disabled, disabled_text, sort_order
FROM dashboard_plattforms
ORDER BY sort_order ASC, title ASC`
);
return (rows || []).map(r => this._mapRow(r));
}
async listPublic() {
const has = await this._hasTable();
if (!has) return [];
const [rows] = await pool.query(
`SELECT id, title, description, href, icon, color, state, disabled, disabled_text, sort_order
FROM dashboard_plattforms
WHERE state = 1
ORDER BY sort_order ASC, title ASC`
);
return (rows || []).map(r => this._mapRow(r));
}
async getById(id) {
const has = await this._hasTable();
if (!has) return null;
const [rows] = await pool.query(
`SELECT id, title, description, href, icon, color, state, disabled, disabled_text, sort_order
FROM dashboard_plattforms
WHERE id = ?
LIMIT 1`,
[id]
);
return this._mapRow(rows?.[0]);
}
async create(platform) {
const has = await this._hasTable();
if (!has) throw new Error('dashboard_plattforms table missing');
await pool.query(
`INSERT INTO dashboard_plattforms
(id, title, description, href, icon, color, state, disabled, disabled_text, sort_order)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
[
platform.id,
platform.title,
platform.description ?? '',
platform.href,
platform.icon ?? '',
platform.color ?? '',
platform.state ? 1 : 0,
platform.disabled ? 1 : 0,
platform.disabledText ?? null,
Number.isFinite(Number(platform.sortOrder)) ? Number(platform.sortOrder) : 0,
]
);
return this.getById(platform.id);
}
async update(id, fields) {
const has = await this._hasTable();
if (!has) throw new Error('dashboard_plattforms table missing');
const [result] = await pool.query(
`UPDATE dashboard_plattforms
SET
title = ?,
description = ?,
href = ?,
icon = ?,
color = ?,
disabled = ?,
disabled_text = ?,
sort_order = ?
WHERE id = ?`,
[
fields.title,
fields.description ?? '',
fields.href,
fields.icon ?? '',
fields.color ?? '',
fields.disabled ? 1 : 0,
fields.disabledText ?? null,
Number.isFinite(Number(fields.sortOrder)) ? Number(fields.sortOrder) : 0,
id,
]
);
if (!result?.affectedRows) return null;
return this.getById(id);
}
async setState(id, state) {
const has = await this._hasTable();
if (!has) throw new Error('dashboard_plattforms table missing');
const [result] = await pool.query(
`UPDATE dashboard_plattforms SET state = ? WHERE id = ?`,
[state ? 1 : 0, id]
);
if (!result?.affectedRows) return null;
return this.getById(id);
}
}
module.exports = DashboardPlatformsRepository;