summaryrefslogtreecommitdiff
path: root/sql/functions/auth.user_delete.sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql/functions/auth.user_delete.sql')
-rw-r--r--sql/functions/auth.user_delete.sql54
1 files changed, 54 insertions, 0 deletions
diff --git a/sql/functions/auth.user_delete.sql b/sql/functions/auth.user_delete.sql
new file mode 100644
index 0000000..6fe66f4
--- /dev/null
+++ b/sql/functions/auth.user_delete.sql
@@ -0,0 +1,54 @@
+drop function auth.user_delete (
+ p_id bigint
+);
+
+create or replace function auth.user_delete (
+ p_id bigint
+)
+returns bool
+as $$
+declare
+ l_id bigint;
+ l_result bool;
+begin
+ if p_id is null then
+ l_result := false::bool;
+ else
+ select id into l_id
+ from auth.users
+ where id = p_id;
+
+ if l_id is null or l_id != p_id then
+ l_result := false::bool;
+ else
+ delete
+ from auth.users_roles_append
+ where user_id = l_id;
+
+ delete
+ from auth.users_roles_exclude
+ where user_id = l_id;
+
+ delete
+ from auth.users_role_groups
+ where user_id = l_id;
+
+ delete
+ from general.roster
+ where user_id = l_id;
+
+ delete
+ from contact.contact_us_posts_read
+ where user_id = l_id;
+
+ delete
+ from auth.users
+ where id = l_id;
+
+ l_result := true::bool;
+ end if;
+ end if;
+
+ return l_result;
+end;
+$$ language plpgsql;