diff --git a/supabase/migrations/20250708150826_remote_schema.sql b/supabase/migrations/20250708150826_remote_schema.sql new file mode 100644 index 0000000..3409dd2 --- /dev/null +++ b/supabase/migrations/20250708150826_remote_schema.sql @@ -0,0 +1,90 @@ +drop function if exists "public"."create_event"(p_name text, p_date date, p_email_subject text, p_email_body text, p_sheet_id text, p_name_column integer, p_surname_column integer, p_email_column integer, p_confirmation_column integer); + +drop function if exists "public"."participant_emailed"(p_participant_id uuid, p_sent boolean); + +drop function if exists "public"."participants_add_bulk"(p_event uuid, p_names text[], p_surnames text[], p_emails text[]); + +drop index if exists "public"."participants_event_name_surname_email_uidx"; + +alter table "public"."events" drop column "confirmation_column"; + +alter table "public"."events" drop column "email_column"; + +alter table "public"."events" drop column "name_column"; + +alter table "public"."events" drop column "surname_column"; + +alter table "public"."participants" drop column "email_sent"; + +set check_function_bodies = off; + +CREATE OR REPLACE FUNCTION public.create_event(p_name text, p_date date) + RETURNS events + LANGUAGE plpgsql + SECURITY DEFINER + SET search_path TO 'public' +AS $function$ +declare + v_user uuid := auth.uid(); -- current user + v_section uuid; -- their section_id + v_evt public.events%rowtype; -- the inserted event +begin + -- 1) lookup the user's section + select section_id + into v_section + from public.profiles + where id = v_user; + + if v_section is null then + raise exception 'no profile/section found for user %', v_user; + end if; + + -- 2) insert into events, filling created_by and section_id + insert into public.events ( + name, + date, + created_by, + section_id + ) + values ( + p_name, + p_date, + v_user, + v_section + ) + returning * into v_evt; + + -- 3) return the full row + return v_evt; +end; +$function$ +; + +CREATE OR REPLACE FUNCTION public.create_qrcodes_bulk(p_section_id uuid, p_event_id uuid, p_names text[], p_surnames text[], p_emails text[]) + RETURNS SETOF participants + LANGUAGE plpgsql + SECURITY DEFINER + SET search_path TO 'public', 'pg_temp' +AS $function$BEGIN + ----------------------------------------------------------------- + -- 1) keep the array-length check exactly as before + ----------------------------------------------------------------- + IF array_length(p_names, 1) IS DISTINCT FROM + array_length(p_surnames,1) OR + array_length(p_names, 1) IS DISTINCT FROM + array_length(p_emails, 1) THEN + RAISE EXCEPTION + 'Names, surnames and emails arrays must all be the same length'; + END IF; + + RETURN QUERY + INSERT INTO public.participants (section_id, event, name, surname, email) + SELECT p_section_id, + p_event_id, + n, s, e + FROM unnest(p_names, p_surnames, p_emails) AS u(n, s, e) + RETURNING *; +END;$function$ +; + +