91 lines
2.8 KiB
PL/PgSQL
91 lines
2.8 KiB
PL/PgSQL
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$
|
|
;
|
|
|
|
|