db/schema/020_user.sql
Orion Kindel 0502154f4d
Some checks failed
migrate-stage / migrate-stage (push) Failing after 25s
migrate-devel / migrate-devel (push) Failing after 9s
feat: usr_session
2023-07-02 17:11:51 -05:00

58 lines
1.6 KiB
PL/PgSQL

select create_newtype_text('public.usr_tag');
select create_newtype_text('public.usr_tag_or_email');
create function usr_tag_or_email_to_email(toe public.usr_tag_or_email)
returns public.email
language plpgsql
immutable as $$
begin
if position('@' in usr_tag_or_email_to_string(toe)) > 0 then
return email_of_string(usr_tag_or_email_to_string(toe));
else
return null;
end if;
end;
$$;
create function usr_tag_or_email_to_tag(toe public.usr_tag_or_email)
returns public.usr_tag
language plpgsql
immutable as $$
begin
if usr_tag_or_email_to_email(toe) is null then
return usr_tag_of_string(usr_tag_or_email_to_string(toe));
else
return null;
end if;
end;
$$;
create table public.usr
( id int not null primary key generated always as identity
, uid uuid not null default gen_random_uuid()
, deleted boolean not null default false
, tag public.usr_tag not null
, password public.hashed_text not null
, email public.email not null unique
);
insert into public.usr (tag, password, email)
values (usr_tag_of_string('system'), hashed_text_of_string(''), email_of_string(''));
select audit( 'public'
, 'usr'
, array[ row('tag', 'public.usr_tag')
, row('password', 'public.hashed_text')
, row('email', 'public.email')
] :: audited_column[]
, soft_delete => true
);
select immutable( 'public'
, 'usr'
, array[ 'id'
, 'uid'
]
);