76 lines
3.4 KiB
MySQL
76 lines
3.4 KiB
MySQL
|
|
-- Migration: Settings and User Management
|
||
|
|
-- Add settings table and extend users table
|
||
|
|
|
||
|
|
-- Settings table for system configuration
|
||
|
|
CREATE TABLE IF NOT EXISTS settings (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
key VARCHAR(255) UNIQUE NOT NULL,
|
||
|
|
value TEXT,
|
||
|
|
category VARCHAR(100) DEFAULT 'general',
|
||
|
|
description TEXT,
|
||
|
|
value_type VARCHAR(50) DEFAULT 'string', -- string, boolean, integer, json
|
||
|
|
is_public BOOLEAN DEFAULT false, -- Can be read by non-admin users
|
||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_by_user_id INTEGER
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Default settings
|
||
|
|
INSERT INTO settings (key, value, category, description, value_type, is_public) VALUES
|
||
|
|
('company_name', 'BMC Networks', 'company', 'Firmanavn', 'string', true),
|
||
|
|
('company_cvr', '', 'company', 'CVR-nummer', 'string', false),
|
||
|
|
('company_email', 'info@bmcnetworks.dk', 'company', 'Firma email', 'string', true),
|
||
|
|
('company_phone', '', 'company', 'Firma telefon', 'string', true),
|
||
|
|
('company_address', '', 'company', 'Firma adresse', 'string', false),
|
||
|
|
('vtiger_enabled', 'false', 'integrations', 'vTiger integration aktiv', 'boolean', false),
|
||
|
|
('vtiger_url', '', 'integrations', 'vTiger URL', 'string', false),
|
||
|
|
('vtiger_username', '', 'integrations', 'vTiger brugernavn', 'string', false),
|
||
|
|
('economic_enabled', 'false', 'integrations', 'e-conomic integration aktiv', 'boolean', false),
|
||
|
|
('economic_app_secret', '', 'integrations', 'e-conomic App Secret Token', 'string', false),
|
||
|
|
('economic_agreement_token', '', 'integrations', 'e-conomic Agreement Grant Token', 'string', false),
|
||
|
|
('email_notifications', 'true', 'notifications', 'Email notifikationer', 'boolean', true),
|
||
|
|
('system_timezone', 'Europe/Copenhagen', 'system', 'Tidszone', 'string', true)
|
||
|
|
ON CONFLICT (key) DO NOTHING;
|
||
|
|
|
||
|
|
-- Extend users table with more fields (if not already added by auth migration)
|
||
|
|
DO $$
|
||
|
|
BEGIN
|
||
|
|
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='users' AND column_name='is_active') THEN
|
||
|
|
ALTER TABLE users ADD COLUMN is_active BOOLEAN DEFAULT true;
|
||
|
|
END IF;
|
||
|
|
|
||
|
|
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='users' AND column_name='last_login') THEN
|
||
|
|
ALTER TABLE users ADD COLUMN last_login TIMESTAMP;
|
||
|
|
END IF;
|
||
|
|
|
||
|
|
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='users' AND column_name='created_at') THEN
|
||
|
|
ALTER TABLE users ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
|
||
|
|
END IF;
|
||
|
|
|
||
|
|
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='users' AND column_name='updated_at') THEN
|
||
|
|
ALTER TABLE users ADD COLUMN updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
|
||
|
|
END IF;
|
||
|
|
END $$;
|
||
|
|
|
||
|
|
-- Indexes
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_settings_category ON settings(category);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_settings_key ON settings(key);
|
||
|
|
|
||
|
|
-- Updated timestamp trigger for settings
|
||
|
|
CREATE OR REPLACE FUNCTION update_settings_updated_at()
|
||
|
|
RETURNS TRIGGER AS $$
|
||
|
|
BEGIN
|
||
|
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
||
|
|
RETURN NEW;
|
||
|
|
END;
|
||
|
|
$$ LANGUAGE plpgsql;
|
||
|
|
|
||
|
|
CREATE TRIGGER settings_updated_at_trigger
|
||
|
|
BEFORE UPDATE ON settings
|
||
|
|
FOR EACH ROW
|
||
|
|
EXECUTE FUNCTION update_settings_updated_at();
|
||
|
|
|
||
|
|
COMMENT ON TABLE settings IS 'System configuration and settings';
|
||
|
|
COMMENT ON COLUMN settings.value_type IS 'Data type: string, boolean, integer, json';
|
||
|
|
COMMENT ON COLUMN settings.is_public IS 'Whether non-admin users can read this setting';
|