feat: user preferences sync — server-side storage, whiteboard defaults, dashboard widget visibility

- New table `user_preferences` (user_id PK, JSON blob, updated_at)
- GET/PATCH/DELETE /api/preferences with deep-merge UPSERT
- LS.prefs singleton in api.js: dot-notation get/set, debounced flush (1.5s), server sync
- classroom.html: load wb.color/width/lineStyle/theme from prefs on init; save on change
- dashboard.html: widget configurator panel (gear button) — toggle visibility per-user, persisted server-side

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-04-14 20:17:25 +03:00
parent ba20a76839
commit 89ba25cd20
7 changed files with 292 additions and 6 deletions
+10
View File
@@ -0,0 +1,10 @@
const express = require('express');
const router = express.Router();
const { authMiddleware } = require('../middleware/auth');
const { getPreferences, patchPreferences, resetPreferences } = require('../controllers/preferencesController');
router.get('/', authMiddleware, getPreferences);
router.patch('/', authMiddleware, patchPreferences);
router.delete('/', authMiddleware, resetPreferences);
module.exports = router;