47 lines
1.6 KiB
SQL
47 lines
1.6 KiB
SQL
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 $$; |