A1: migration 021 — partner attribution (pre-apply commit, per docs/PARTNERS.md)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
-- ---------------------------------------------------------------
|
||||||
|
-- 021 — partner attribution (A1 Session 3, per docs/PARTNERS.md).
|
||||||
|
--
|
||||||
|
-- Adds user_profiles.partner_ref (the external partner code captured from
|
||||||
|
-- the ?ref= cookie at signup and stored in auth metadata), extends
|
||||||
|
-- handle_new_user to copy it on profile creation (verified against the
|
||||||
|
-- LIVE function definition — it inserts (id, email) only; this adds one
|
||||||
|
-- column and preserves SECURITY DEFINER + search_path), and backfills
|
||||||
|
-- rows whose auth metadata already carries a ref.
|
||||||
|
--
|
||||||
|
-- Distinct from migration 004's USER-referral system: partner codes are
|
||||||
|
-- external strings; no dependency on referral_codes tables.
|
||||||
|
-- ---------------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE public.user_profiles
|
||||||
|
ADD COLUMN IF NOT EXISTS partner_ref text;
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_user_profiles_partner_ref
|
||||||
|
ON public.user_profiles(partner_ref)
|
||||||
|
WHERE partner_ref IS NOT NULL;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION public.handle_new_user()
|
||||||
|
RETURNS trigger
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
SECURITY DEFINER
|
||||||
|
SET search_path TO 'public'
|
||||||
|
AS $function$
|
||||||
|
begin
|
||||||
|
insert into public.user_profiles (id, email, partner_ref)
|
||||||
|
values (
|
||||||
|
new.id,
|
||||||
|
new.email,
|
||||||
|
upper(nullif(new.raw_user_meta_data->>'partner_ref', ''))
|
||||||
|
)
|
||||||
|
on conflict (id) do nothing;
|
||||||
|
return new;
|
||||||
|
end;
|
||||||
|
$function$;
|
||||||
|
|
||||||
|
-- One-time backfill for signups that predate the column.
|
||||||
|
UPDATE public.user_profiles p
|
||||||
|
SET partner_ref = upper(u.raw_user_meta_data->>'partner_ref')
|
||||||
|
FROM auth.users u
|
||||||
|
WHERE u.id = p.id
|
||||||
|
AND p.partner_ref IS NULL
|
||||||
|
AND nullif(u.raw_user_meta_data->>'partner_ref', '') IS NOT NULL;
|
||||||
Reference in New Issue
Block a user