From 629e7ce18e957d50eb6888a875e36cd4a74b06c8 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Tue, 28 Apr 2026 17:12:25 -0300 Subject: [PATCH] DB: melissa_prefs em user_settings + 'melissa' como layout_variant MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migration nova (database-novo/migrations/20260427000001_*): - ALTER TABLE user_settings ADD COLUMN melissa_prefs jsonb DEFAULT '{}' NOT NULL — guarda toqueTermino, overlayOpacity, bgImageOpacity, use24h, cardsAtivos[] e cardsLayout. Sanitizacao no client antes do upsert. - bgUrl (data URL da foto, MBs) NAO entra aqui — segue em localStorage ate migrarmos pra Supabase Storage. Schema canonico (tenants_multi_tenant.sql) atualizado em paralelo: - mesma coluna melissa_prefs jsonb - check de layout_variant agora aceita 'melissa' alem de 'classic' e 'rail' (precondicao pra plugar o tema Direcao B no preference real) Leitura/escrita no client ainda pendente — feita em sessao separada. Co-Authored-By: Claude Opus 4.7 (1M context) --- ...0427000001_user_settings_melissa_prefs.sql | 25 +++++++++++++++++++ .../schema/04_tables/tenants_multi_tenant.sql | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 database-novo/migrations/20260427000001_user_settings_melissa_prefs.sql diff --git a/database-novo/migrations/20260427000001_user_settings_melissa_prefs.sql b/database-novo/migrations/20260427000001_user_settings_melissa_prefs.sql new file mode 100644 index 0000000..d7b902c --- /dev/null +++ b/database-novo/migrations/20260427000001_user_settings_melissa_prefs.sql @@ -0,0 +1,25 @@ +-- ========================================================================== +-- Agencia PSI — Migracao: melissa_prefs em user_settings +-- ========================================================================== +-- Persiste as preferencias do layout Melissa (Direção B) no DB em vez de +-- viverem só em localStorage (que perde ao trocar de navegador/dispositivo). +-- +-- Estrutura do JSONB (sanitizado no client antes de salvar): +-- { +-- "toqueTermino": "sino", // id em melissaToques.js +-- "overlayOpacity": 0.35, // 0..0.8 — escurecedor sobre o bg +-- "bgImageOpacity": 1, // 0..1 — transparencia da foto custom +-- "use24h": true, // formato do relogio +-- "cardsAtivos": ["proximo-..."], // ids de cards do resumo +-- "cardsLayout": "linha-unica" // 'linha-unica' | 'duas-linhas' +-- } +-- +-- bgUrl (data URL da foto) NAO entra aqui — pode ter MBs e estouraria a row. +-- Permanece em localStorage até migrarmos pra Supabase Storage. +-- ========================================================================== + +ALTER TABLE public.user_settings + ADD COLUMN IF NOT EXISTS melissa_prefs jsonb DEFAULT '{}'::jsonb NOT NULL; + +COMMENT ON COLUMN public.user_settings.melissa_prefs IS + 'Preferencias do layout Melissa (toque, opacidade overlay/imagem, formato hora, cards). Imagem de fundo permanece no localStorage por ser data URL pesada.'; diff --git a/database-novo/schema/04_tables/tenants_multi_tenant.sql b/database-novo/schema/04_tables/tenants_multi_tenant.sql index 15a25ed..123d5b1 100644 --- a/database-novo/schema/04_tables/tenants_multi_tenant.sql +++ b/database-novo/schema/04_tables/tenants_multi_tenant.sql @@ -132,7 +132,8 @@ CREATE TABLE public.user_settings ( created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, layout_variant text DEFAULT 'classic'::text NOT NULL, - CONSTRAINT user_settings_layout_variant_check CHECK ((layout_variant = ANY (ARRAY['classic'::text, 'rail'::text]))), + melissa_prefs jsonb DEFAULT '{}'::jsonb NOT NULL, + CONSTRAINT user_settings_layout_variant_check CHECK ((layout_variant = ANY (ARRAY['classic'::text, 'rail'::text, 'melissa'::text]))), CONSTRAINT user_settings_menu_mode_check CHECK ((menu_mode = ANY (ARRAY['static'::text, 'overlay'::text]))), CONSTRAINT user_settings_theme_mode_check CHECK ((theme_mode = ANY (ARRAY['light'::text, 'dark'::text]))) );