v0.9.48 schedule changes
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jama-backend",
|
||||
"version": "0.9.47",
|
||||
"version": "0.9.48",
|
||||
"description": "TeamChat backend server",
|
||||
"main": "src/index.js",
|
||||
"scripts": {
|
||||
|
||||
@@ -389,8 +389,9 @@ function initDb() {
|
||||
name TEXT NOT NULL UNIQUE,
|
||||
colour TEXT NOT NULL DEFAULT '#6366f1',
|
||||
default_user_group_id INTEGER,
|
||||
default_duration_hrs REAL NOT NULL DEFAULT 1.0,
|
||||
default_duration_hrs REAL,
|
||||
is_default INTEGER NOT NULL DEFAULT 0,
|
||||
is_protected INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||||
FOREIGN KEY (default_user_group_id) REFERENCES user_groups(id) ON DELETE SET NULL
|
||||
);
|
||||
@@ -428,7 +429,15 @@ function initDb() {
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
);
|
||||
`);
|
||||
db.prepare("INSERT OR IGNORE INTO event_types (name, colour, is_default) VALUES ('Default', '#9ca3af', 1)").run();
|
||||
db.prepare("INSERT OR IGNORE INTO event_types (name, colour, is_default, is_protected) VALUES ('Default', '#9ca3af', 1, 1)").run();
|
||||
db.prepare("INSERT OR IGNORE INTO event_types (name, colour, is_protected, default_duration_hrs) VALUES ('Event', '#6366f1', 1, NULL)").run();
|
||||
db.prepare("INSERT OR IGNORE INTO event_types (name, colour, default_duration_hrs) VALUES ('Game', '#22c55e', 3.0)").run();
|
||||
db.prepare("INSERT OR IGNORE INTO event_types (name, colour, default_duration_hrs) VALUES ('Practice', '#f59e0b', 1.0)").run();
|
||||
// Migration: add is_protected if missing
|
||||
try { db.exec("ALTER TABLE event_types ADD COLUMN is_protected INTEGER NOT NULL DEFAULT 0"); } catch(e) {}
|
||||
try { db.exec("ALTER TABLE event_types ADD COLUMN default_duration_hrs REAL"); } catch(e) {}
|
||||
// Ensure built-in types are protected
|
||||
db.prepare("UPDATE event_types SET is_protected = 1 WHERE name IN ('Default', 'Event')").run();
|
||||
console.log('[DB] Schedule Manager tables ready');
|
||||
} catch (e) { console.error('[DB] Schedule Manager migration error:', e.message); }
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ router.patch('/event-types/:id', authMiddleware, teamManagerMiddleware, (req, re
|
||||
const db = getDb();
|
||||
const et = db.prepare('SELECT * FROM event_types WHERE id = ?').get(req.params.id);
|
||||
if (!et) return res.status(404).json({ error: 'Not found' });
|
||||
if (et.is_default) return res.status(403).json({ error: 'Cannot edit the Default event type' });
|
||||
if (et.is_protected) return res.status(403).json({ error: 'Cannot edit a protected event type' });
|
||||
const { name, colour, defaultUserGroupId, defaultDurationHrs } = req.body;
|
||||
if (name && name.trim() !== et.name) {
|
||||
if (db.prepare('SELECT id FROM event_types WHERE LOWER(name) = LOWER(?) AND id != ?').get(name.trim(), et.id))
|
||||
@@ -86,7 +86,7 @@ router.delete('/event-types/:id', authMiddleware, teamManagerMiddleware, (req, r
|
||||
const db = getDb();
|
||||
const et = db.prepare('SELECT * FROM event_types WHERE id = ?').get(req.params.id);
|
||||
if (!et) return res.status(404).json({ error: 'Not found' });
|
||||
if (et.is_default) return res.status(403).json({ error: 'Cannot delete the Default event type' });
|
||||
if (et.is_default || et.is_protected) return res.status(403).json({ error: 'Cannot delete a protected event type' });
|
||||
// Null out event_type_id on events using this type
|
||||
db.prepare('UPDATE events SET event_type_id = NULL WHERE event_type_id = ?').run(et.id);
|
||||
db.prepare('DELETE FROM event_types WHERE id = ?').run(et.id);
|
||||
|
||||
Reference in New Issue
Block a user