143 lines
3.9 KiB
JavaScript
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;
|