CREATE TABLE IF NOT EXISTS user_preferences ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id), preference_key VARCHAR(50) NOT NULL, preference_value TEXT, metadata JSONB DEFAULT '{}', created_at TIMESTAMP NOT NULL DEFAULT NOW(), updated_at TIMESTAMP NOT NULL DEFAULT NOW(), UNIQUE(user_id, preference_key) ); -- Добавляем колонку metadata, если её нет DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_name = 'user_preferences' AND column_name = 'metadata' ) THEN ALTER TABLE user_preferences ADD COLUMN metadata JSONB DEFAULT '{}'; END IF; END $$; CREATE INDEX IF NOT EXISTS idx_user_preferences_user_id ON user_preferences(user_id); -- Базовые настройки (пропускаем, так как колонки зашифрованы) -- Данные будут добавлены через encryptedDatabaseService -- DO $$ -- BEGIN -- INSERT INTO user_preferences (user_id, preference_key, preference_value, metadata) -- SELECT id, 'language', 'ru', '{"available": ["ru", "en"]}'::jsonb -- FROM users u -- WHERE NOT EXISTS ( -- SELECT 1 FROM user_preferences -- WHERE preference_key = 'language' AND user_id = u.id -- ); -- END $$; -- DO $$ -- BEGIN -- INSERT INTO user_preferences (user_id, preference_key, preference_value, metadata) -- SELECT id, 'notifications', 'true', '{"channels": ["email", "telegram"]}'::jsonb -- FROM users u -- WHERE NOT EXISTS ( -- SELECT 1 FROM user_preferences -- WHERE preference_key = 'notifications' AND user_id = u.id -- ); -- END $$;