122 lines
2.2 KiB
MySQL
122 lines
2.2 KiB
MySQL
|
CREATE FUNCTION _api.user_insert()
|
||
|
RETURNS TRIGGER
|
||
|
LANGUAGE plpgsql VOLATILE
|
||
|
AS $BODY$
|
||
|
DECLARE
|
||
|
_length INTEGER;
|
||
|
BEGIN
|
||
|
PERFORM _api.validate_text(
|
||
|
_text => NEW.username,
|
||
|
_column => 'username',
|
||
|
_min => 1,
|
||
|
_max => 24
|
||
|
);
|
||
|
|
||
|
PERFORM TRUE FROM admin.user
|
||
|
WHERE username = NEW.username;
|
||
|
|
||
|
IF FOUND THEN
|
||
|
PERFORM _api.raise_unique('username');
|
||
|
END IF;
|
||
|
|
||
|
PERFORM _api.validate_text(
|
||
|
_text => NEW.password,
|
||
|
_column => 'password',
|
||
|
_max => 256
|
||
|
);
|
||
|
|
||
|
PERFORM _api.validate_text(
|
||
|
_text => NEW.first_name,
|
||
|
_nullable => TRUE,
|
||
|
_column => 'first_name',
|
||
|
_max => 256
|
||
|
);
|
||
|
NEW.first_name = COALESCE(NEW.first_name, ''::text);
|
||
|
|
||
|
PERFORM _api.validate_text(
|
||
|
_text => NEW.last_name,
|
||
|
_nullable => TRUE,
|
||
|
_column => 'last_name',
|
||
|
_max => 256
|
||
|
);
|
||
|
NEW.last_name = COALESCE(NEW.last_name, ''::text);
|
||
|
|
||
|
PERFORM _api.validate_text(
|
||
|
_text => NEW.middle_name,
|
||
|
_nullable => TRUE,
|
||
|
_column => 'middle_name',
|
||
|
_max => 256
|
||
|
);
|
||
|
NEW.middle_name = COALESCE(NEW.middle_name, ''::text);
|
||
|
|
||
|
PERFORM _api.validate_text(
|
||
|
_text => NEW.email,
|
||
|
_column => 'email',
|
||
|
_max => 256
|
||
|
);
|
||
|
|
||
|
PERFORM _api.validate_text(
|
||
|
_text => NEW.gender,
|
||
|
_column => 'gender',
|
||
|
_max => 256
|
||
|
);
|
||
|
|
||
|
IF NEW.birth_date IS NULL THEN
|
||
|
PERFORM _api.raise_null('birth_date');
|
||
|
END IF;
|
||
|
|
||
|
PERFORM _api.validate_text(
|
||
|
_text => NEW.profile_bio,
|
||
|
_nullable => TRUE,
|
||
|
_column => 'profile_bio',
|
||
|
_max => 2048
|
||
|
);
|
||
|
NEW.profile_bio = COALESCE(NEW.profile_bio, ''::text);
|
||
|
|
||
|
INSERT INTO admin.user (
|
||
|
username,
|
||
|
password,
|
||
|
first_name,
|
||
|
last_name,
|
||
|
middle_name,
|
||
|
email,
|
||
|
gender,
|
||
|
birth_date,
|
||
|
profile_avatar,
|
||
|
profile_banner,
|
||
|
profile_bio
|
||
|
) VALUES (
|
||
|
NEW.username,
|
||
|
NEW.password,
|
||
|
NEW.first_name,
|
||
|
NEW.last_name,
|
||
|
NEW.middle_name,
|
||
|
NEW.email,
|
||
|
NEW.gender,
|
||
|
NEW.birth_date,
|
||
|
NEW.profile_avatar,
|
||
|
NEW.profile_banner,
|
||
|
NEW.profile_bio
|
||
|
);
|
||
|
|
||
|
NEW.password := NULL;
|
||
|
|
||
|
RETURN NEW;
|
||
|
END
|
||
|
$BODY$;
|
||
|
|
||
|
GRANT EXECUTE ON FUNCTION _api.user_insert()
|
||
|
TO rest_anon, rest_user;
|
||
|
GRANT INSERT ON TABLE api.user
|
||
|
TO rest_anon, rest_user;
|
||
|
GRANT INSERT ON TABLE admin.user
|
||
|
TO rest_anon, rest_user;
|
||
|
GRANT UPDATE ON TABLE sys.user_id_seq
|
||
|
TO rest_anon, rest_user;
|
||
|
|
||
|
CREATE TRIGGER api_user_insert_trgr
|
||
|
INSTEAD OF INSERT
|
||
|
ON api.user
|
||
|
FOR EACH ROW
|
||
|
EXECUTE PROCEDURE _api.user_insert();
|