51 lines
949 B
PL/PgSQL
51 lines
949 B
PL/PgSQL
create or replace procedure add_user(
|
|
in in_username varchar(32),
|
|
in in_password_hash varchar(72)
|
|
)
|
|
language plpgsql
|
|
as $$
|
|
begin
|
|
insert into "user" ("username", "password_hash")
|
|
values (in_username, in_password_hash);
|
|
|
|
insert into "role_binding" ("user_id", "role_id")
|
|
values (
|
|
(
|
|
select "id"
|
|
from "user"
|
|
where "username" = in_username
|
|
),
|
|
(
|
|
select "id"
|
|
from "role"
|
|
where "name" = 'member'
|
|
)
|
|
);
|
|
end;
|
|
$$;
|
|
|
|
create or replace procedure add_channel(
|
|
in channel_name varchar(32),
|
|
in channel_desc varchar(200)
|
|
)
|
|
language plpgsql
|
|
as $$
|
|
declare
|
|
channel_id integer;
|
|
begin
|
|
insert into "channel" ("name", "description")
|
|
values (channel_name, channel_desc)
|
|
returning "id" into channel_id;
|
|
|
|
insert into "right" ("role_id", "channel_id", "rights")
|
|
values (
|
|
(
|
|
select "id"
|
|
from "role"
|
|
where "name" = 'admin'
|
|
),
|
|
channel_id,
|
|
'A'
|
|
);
|
|
end;
|
|
$$ |