create or replace function check_user(in username text, in plain_password text, out resource json) language plpgsql as
$$
declare
    _username alias for username;
begin
    select
       case when count(u) = 1
       then to_json(json_populate_record(null::user_lite, to_json(u)))  -- TODO refactor this !
       else null end
    into resource
    from "user" as u
    where u.username = lower(_username)
      and u.password = crypt(plain_password, u.password)
    group by u;
end;
$$;

-- drop function if exists check_user(text, text, out json);