import BaseService from './BaseService.js'; import UserDashboard from '../models/community/user_dashboard.js'; class DashboardService extends BaseService { /** * @param {string} hashedUserId * @returns {Promise<{ widgets: Array<{ id: string, title: string, endpoint: string }> }>} */ async getConfig(hashedUserId) { const user = await this.getUserByHashedId(hashedUserId); const row = await UserDashboard.findOne({ where: { userId: user.id } }); const config = row?.config ?? { widgets: [] }; if (!Array.isArray(config.widgets)) config.widgets = []; return config; } /** * @param {string} hashedUserId * @param {{ widgets: Array<{ id: string, title: string, endpoint: string }> }} config */ async setConfig(hashedUserId, config) { const user = await this.getUserByHashedId(hashedUserId); const widgets = Array.isArray(config?.widgets) ? config.widgets : []; const sanitized = widgets.map(w => ({ id: String(w?.id ?? ''), title: String(w?.title ?? ''), endpoint: String(w?.endpoint ?? '') })).filter(w => w.id && (w.title || w.endpoint)); await UserDashboard.upsert({ userId: user.id, config: { widgets: sanitized } }, { conflictFields: ['userId'] }); return { widgets: sanitized }; } } export default new DashboardService();