CREATE OR REPLACE FUNCTION public.fn_session_upsert_participant(p_session_id integer, p_partner_id bigint, p_email text, p_full_name text, p_breakout_room text, p_zoom_registrant_id text DEFAULT NULL::text, p_zoom_join_url text DEFAULT NULL::text)
 RETURNS void
 LANGUAGE sql
AS $function$
  INSERT INTO public.session_participants
    (session_id, participant_type, partner_id, email, full_name, breakout_room, zoom_registrant_id, zoom_join_url)
  VALUES
    (p_session_id, 'STUDENT', p_partner_id, p_email, p_full_name, p_breakout_room,
     NULLIF(p_zoom_registrant_id, ''), NULLIF(p_zoom_join_url, ''))
  ON CONFLICT (session_id, email) DO UPDATE
    SET zoom_registrant_id = EXCLUDED.zoom_registrant_id,
        zoom_join_url      = EXCLUDED.zoom_join_url,
        breakout_room      = EXCLUDED.breakout_room;
$function$
;
