2026-04-12 02:27:01 +02:00
|
|
|
-- Migration 166: Bottom bar module activation and overrides
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS module_role_settings (
|
|
|
|
|
id SERIAL PRIMARY KEY,
|
|
|
|
|
module_name VARCHAR(100) NOT NULL,
|
|
|
|
|
group_id INTEGER NOT NULL REFERENCES groups(id) ON DELETE CASCADE,
|
|
|
|
|
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
UNIQUE (module_name, group_id)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS user_module_preferences (
|
|
|
|
|
id SERIAL PRIMARY KEY,
|
|
|
|
|
user_id INTEGER NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,
|
|
|
|
|
module_name VARCHAR(100) NOT NULL,
|
|
|
|
|
enabled BOOLEAN,
|
|
|
|
|
collapsed BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
UNIQUE (user_id, module_name)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
INSERT INTO settings (key, value, category, description, value_type, is_public)
|
|
|
|
|
VALUES
|
2026-04-15 09:34:26 +02:00
|
|
|
('bottom_bar_enabled', 'true', 'bottom_bar', 'Enable or disable bottom bar globally', 'boolean', false)
|
2026-04-12 02:27:01 +02:00
|
|
|
ON CONFLICT (key) DO NOTHING;
|
|
|
|
|
|
|
|
|
|
-- Default role access: admins, managers and technicians enabled. viewers disabled.
|
|
|
|
|
INSERT INTO module_role_settings (module_name, group_id, enabled)
|
|
|
|
|
SELECT 'bottom_bar', g.id,
|
|
|
|
|
CASE WHEN g.name IN ('Administrators', 'Managers', 'Technicians') THEN TRUE ELSE FALSE END
|
|
|
|
|
FROM groups g
|
|
|
|
|
ON CONFLICT (module_name, group_id) DO NOTHING;
|
|
|
|
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_module_role_settings_module ON module_role_settings(module_name);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_user_module_preferences_user_module ON user_module_preferences(user_id, module_name);
|
|
|
|
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION update_module_setting_updated_at()
|
|
|
|
|
RETURNS TRIGGER AS $$
|
|
|
|
|
BEGIN
|
|
|
|
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
|
|
|
|
RETURN NEW;
|
|
|
|
|
END;
|
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
|
|
|
|
|
DROP TRIGGER IF EXISTS module_role_settings_updated_at_trigger ON module_role_settings;
|
|
|
|
|
CREATE TRIGGER module_role_settings_updated_at_trigger
|
|
|
|
|
BEFORE UPDATE ON module_role_settings
|
|
|
|
|
FOR EACH ROW
|
|
|
|
|
EXECUTE FUNCTION update_module_setting_updated_at();
|
|
|
|
|
|
|
|
|
|
DROP TRIGGER IF EXISTS user_module_preferences_updated_at_trigger ON user_module_preferences;
|
|
|
|
|
CREATE TRIGGER user_module_preferences_updated_at_trigger
|
|
|
|
|
BEFORE UPDATE ON user_module_preferences
|
|
|
|
|
FOR EACH ROW
|
|
|
|
|
EXECUTE FUNCTION update_module_setting_updated_at();
|