create or replace function public.register_user(_email text, _password_hash text) returns setof public.user language plpgsql as $function$ declare _user_uuid uuid; begin insert into "user" ( user_email, user_password_hash ) values ( _email, _password_hash ) returning user_uuid into _user_uuid; return query select * from "user" where user_uuid = _user_uuid; end; $function$; create or replace function public.validate_session(_session_uuid uuid) returns setof public.v_session language plpgsql as $function$ begin return query select * from v_session where session_uuid = _session_uuid and session_time_last_active + session_timeout_length < now(); end; $function$; create or replace function public.login_user_session(_user_uuid uuid, _timeout_length interval, _ip_addr varchar(50), _user_agent varchar(500), _referer varchar(500), _link uuid) returns setof public.v_session language plpgsql as $function$ declare _session_uuid uuid; begin insert into "session" ( session_user_uuid, session_timeout_length, session_ip_address, session_user_agent, session_referer, session_originating_link ) values ( _user_uuid, _timeout_length, _ip_addr, _user_agent, _referer, _link ) returning session_uuid into _session_uuid; return query select * from public.validate_session(_session_uuid); end; $function$;