DB: melissa_prefs em user_settings + 'melissa' como layout_variant
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) <noreply@anthropic.com>
This commit is contained in:
@@ -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.';
|
||||||
@@ -132,7 +132,8 @@ CREATE TABLE public.user_settings (
|
|||||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||||
updated_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,
|
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_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])))
|
CONSTRAINT user_settings_theme_mode_check CHECK ((theme_mode = ANY (ARRAY['light'::text, 'dark'::text])))
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user