Files
upstream-atomic-crm/supabase/migrations/20260320120000_lowercase_email_website.sql
upstream-mirror 93ecc1a6f8
Some checks failed
✅ Check / 🔬 ESLint (push) Failing after 21s
✅ Check / 🏷️ Typecheck (push) Failing after 11s
✅ Check / 🔎 Test (push) Failing after 11s
✅ Check / e2e-test (push) Failing after 11s
✅ Check / 🔨 Build (push) Failing after 11s
🚀 Deploy / 🚀 Deploy (doc) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (demo) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (supabase) (push) Failing after 18s
snapshot of https://github.com/marmelab/atomic-crm.git (main, 2026-09-18; blobs > 131072B omitted)
2026-09-18 01:48:50 +05:00

87 lines
2.4 KiB
PL/PgSQL

-- Enable citext extension for case-insensitive text columns
CREATE EXTENSION IF NOT EXISTS "citext" WITH SCHEMA "extensions";
-- Drop view that depends on companies.website before altering the column type
DROP VIEW IF EXISTS public.companies_summary;
-- Change companies.website to citext for case-insensitive comparisons
ALTER TABLE companies ALTER COLUMN website TYPE extensions.citext;
-- Recreate companies_summary view
CREATE OR REPLACE VIEW public.companies_summary WITH (security_invoker = on) AS
SELECT
c.id,
c.created_at,
c.name,
c.sector,
c.size,
c.linkedin_url,
c.website,
c.phone_number,
c.address,
c.zipcode,
c.city,
c.state_abbr,
c.sales_id,
c.context_links,
c.country,
c.description,
c.revenue,
c.tax_identifier,
c.logo,
count(distinct d.id) as nb_deals,
count(distinct co.id) as nb_contacts
FROM public.companies c
LEFT JOIN public.deals d ON c.id = d.company_id
LEFT JOIN public.contacts co ON c.id = co.company_id
GROUP BY c.id;
-- Change sales.email to citext for case-insensitive comparisons
ALTER TABLE sales ALTER COLUMN email TYPE extensions.citext;
-- Function to lowercase email addresses in email_jsonb
CREATE OR REPLACE FUNCTION lowercase_email_jsonb()
RETURNS TRIGGER
LANGUAGE plpgsql
SET search_path TO 'public'
AS $$
BEGIN
IF NEW.email_jsonb IS NOT NULL THEN
NEW.email_jsonb = COALESCE((
SELECT jsonb_agg(
jsonb_set(elem, '{email}', to_jsonb(LOWER(elem->>'email')))
)
FROM jsonb_array_elements(NEW.email_jsonb) AS elem
), '[]'::jsonb);
END IF;
RETURN NEW;
END;
$$;
-- Drop and recreate triggers to ensure proper ordering
-- Lowercase trigger for email_jsonb must run before the avatar trigger
-- Drop existing triggers
DROP TRIGGER IF EXISTS contact_saved ON contacts;
-- Create lowercase trigger first (so it runs before contact_saved)
CREATE TRIGGER "10_lowercase_contact_emails"
BEFORE INSERT OR UPDATE ON contacts
FOR EACH ROW
EXECUTE FUNCTION lowercase_email_jsonb();
-- Recreate contact_saved trigger (will run after lowercase_contact_emails)
CREATE TRIGGER "20_contact_saved"
BEFORE INSERT OR UPDATE ON contacts
FOR EACH ROW
EXECUTE FUNCTION handle_contact_saved();
UPDATE contacts
SET email_jsonb = COALESCE((
SELECT jsonb_agg(
jsonb_set(elem, '{email}', to_jsonb(LOWER(elem->>'email')))
)
FROM jsonb_array_elements(email_jsonb) AS elem
), '[]'::jsonb)
WHERE email_jsonb IS NOT NULL;