diff --git a/src/main/resources/sql/functions/citizen/find_citizen_by_name.sql b/src/main/resources/sql/functions/citizen/find_citizen_by_name.sql new file mode 100644 index 0000000..cf9d3b4 --- /dev/null +++ b/src/main/resources/sql/functions/citizen/find_citizen_by_name.sql @@ -0,0 +1,16 @@ +create or replace function find_citizen_by_name(_name json, out resource json) language plpgsql as +$$ +begin + select to_json(t) into resource + from ( + select + z.*, + find_user_by_id(u.id) as "user" + from citizen as z + join "user" as u on z.user_id = u.id + where z.name->>'first_name' = _name->>'first_name' + and z.name->>'last_name' = _name->>'last_name' + ) as t; +end; +$$; + diff --git a/src/test/sql/citizen.sql b/src/test/sql/citizen.sql index 2738a3e..5f8da78 100644 --- a/src/test/sql/citizen.sql +++ b/src/test/sql/citizen.sql @@ -35,9 +35,17 @@ begin select find_citizen_by_user_id((created_citizen->>'user_id')::uuid) into selected_citizen; assert selected_citizen#>>'{name, first_name}' = 'George', format('first name must be George, %s', selected_citizen#>>'{name, first_name}'); + -- get citizen by username and check the first name + select find_citizen_by_username(created_citizen#>>'{user, username}') into selected_citizen; + assert selected_citizen#>>'{name, first_name}' = 'George', format('first name must be George, %s', selected_citizen#>>'{name, first_name}'); + + -- get citizen by name and check the first name + select find_citizen_by_name(created_citizen->'name') into selected_citizen; + assert selected_citizen#>>'{name, first_name}' = 'George', format('first name must be George, %s', selected_citizen#>>'{name, first_name}'); + rollback; - -- check if fint by id return null if citizen not exist + -- check if find by id return null if citizen not exist select find_citizen_by_user_id((created_citizen->>'user_id')::uuid) into selected_citizen; assert selected_citizen is null, format('citizen must be null if not exist, %s', selected_citizen);