wip: currently rewriting the project as a full stack application tangled.org/kacaii.dev/sigo
gleam
at main 117 lines 3.1 kB view raw
1begin; 2 3-- DROP ------------------------------------------------------------------------ 4drop function if exists public.query_crew_members; 5drop function if exists public.assign_brigade_members; 6drop function if exists public.replace_brigade_members; 7drop function if exists public.assign_occurrence_brigades; 8drop function if exists public.replace_occurrence_brigades; 9 10-- CREATE ---------------------------------------------------------------------- 11 12--  Returns all users that are in the same brigades as the target user 13create or replace function public.query_crew_members(p_user_id uuid) 14returns table (member_id uuid, brigade_id uuid) 15language plpgsql 16stable 17parallel safe 18as $$ 19begin 20 return query 21 select distinct bm.user_id as member_id, bm.brigade_id as brigade_id 22 from public.brigade_membership as bm 23 inner join public.brigade_membership as target_bm 24 on bm.brigade_id = target_bm.brigade_id 25 where target_bm.user_id = p_user_id 26 and bm.user_id <> p_user_id; 27end; 28$$; 29 30-- 󰮆 Assign members to a brigade 31create or replace function public.assign_brigade_members( 32 p_brigade_id uuid, 33 p_members_id uuid [] 34) 35returns table (inserted_user_id uuid) 36language plpgsql 37as $$ 38begin 39 return query 40 insert into public.brigade_membership as bm 41 (brigade_id, user_id) 42 select 43 p_brigade_id, 44 member_id 45 from unnest(p_members_id) as member_id 46 on conflict (brigade_id, user_id) 47 do nothing 48 returning user_id; 49end; 50$$; 51 52 53-- 󰮆 Replace assigned members from a brigade 54create or replace function public.replace_brigade_members( 55 p_brigade_id uuid, 56 p_members_id uuid [] 57) 58returns table (inserted_user_id uuid) 59language plpgsql 60as $$ 61begin 62 --  Remove all current members 63 delete from public.brigade_membership as bm 64 where bm.brigade_id = p_brigade_id; 65 66 --  Assign the new ones 67 return query 68 select b.inserted_user_id 69 from public.assign_brigade_members(p_brigade_id, p_members_id) as b; 70end; 71$$; 72 73 74-- 󰮆 Assign brigades to a occurrence 75create or replace function public.assign_occurrence_brigades( 76 p_occurrence_id uuid, 77 p_brigades_id uuid [] 78) 79returns table (inserted_brigade_id uuid) 80language plpgsql 81as $$ 82begin 83 return query 84 insert into public.occurrence_brigade as oc 85 (occurrence_id, brigade_id) 86 select 87 p_occurrence_id, 88 brigade_id 89 from unnest(p_brigades_id) as brigade_id 90 on conflict (occurrence_id, brigade_id) 91 do nothing 92 returning brigade_id; 93end; 94$$; 95 96 97-- 󰮆 replace assigned brigades from a occurrence 98create or replace function public.replace_occurrence_brigades( 99 p_occurrence_id uuid, 100 p_brigades_id uuid [] 101) 102returns table (inserted_brigade_id uuid) 103language plpgsql 104as $$ 105begin 106 --  Remove all current assigned brigades 107 delete from public.occurrence_brigade as ob 108 where ob.occurrence_id = p_occurrence_id; 109 110 --  Assign the new ones 111 return query 112 select o.inserted_brigade_id 113 from public.assign_occurrence_brigades(p_occurrence_id, p_brigades_id) as o; 114end; 115$$; 116 117commit;