wiki:UseCaseScenarios/scenario2

Регистрација на нов корисник

Цел:

Да му овозможи на нов корисник да се регистрира во системот, со внесување лични податоци и безбедна лозинка, по што добива сопствен профил и пристап до ограничени или целосни функционалности според улогата.

Влезни податоци:

  • Име
  • Презиме
  • Е-пошта (уникатна)
  • Лозинка
  • Потврда на лозинка

Главната идеја

„Регистрација на нов корисник“ е сценарио каде на корисникот му се овозможува креирање на нов профил на апликацијата. За секој најавен корисник во базата автоматски се креира профил, каде еден корисник може да има само еден профил со истата е-поштенска адреса. По поднесување на формуларот, системот ги валидаира внесените податоци, прво проверувајќи дали е-поштата веќе е користена од друг корисник, а потоа дали лозинката ги исполнува критериумите за безбедност.

Доколку сите податоци се валидни, лозинката се хашира користејќи безбеден алгоритам (BCrypt), по што се креира нов кориснички објект со основна улога, обично ROLE_USER, и се снима во базата на податоци. Регистрираниот корисник добива потврда за креирањето на својот профил, и е редиректиран да се најави со истиот креиран профил.

SQL queries за правилно извршување на акциите

Следната низа од квериња е преведена од show.sql=true property во Spring, со цел да се види што е правилната низа на операции кои се извршуваат од кога корисникот го активира копчето за регистрирање.

-- Проверка дали постои корисник со внесената email адреса
SELECT 
    user_id,
    created_at,
    email,
    is_active,
    name,
    password_hash,
    surname 
FROM reportiumuser 
WHERE email = :typed_email;

-- Вметнување на корисник во главната табела од ReportiumUser
INSERT INTO reportiumuser (
    created_at, 
    email, 
    is_active, 
    name, 
    password_hash, 
    surname
) 
VALUES (?, ?, ?, ?, ?, ?);

-- Тригер кој прави автоматски профил за новиот корисник

CREATE FUNCTION create_profile_automatically_when_user_comes() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO UserProfile (user_id, role_id, username)
    VALUES (NEW.user_id, 2, NEW.name || ' ' || NEW.surname);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_create_profile_for_user
AFTER INSERT ON ReportiumUser
FOR EACH ROW
EXECUTE FUNCTION create_profile_automatically_when_user_comes();

-- Го пребарува корисникот кој е внесен по profile_id, кое веќе постои
SELECT 
    profile_id,
    profile_created_at,
    user_id,
    role_id,
    username 
FROM userprofile 
WHERE user_id = ?;

-- Избира default улога
SELECT 
    role_id,
    description,
    role_name 
FROM role 
WHERE role_id = :default;

-- Вметнува лог дека е регистриран нов корисник
INSERT INTO userprofilelog (
    change_description, 
    changed_at, 
    profile_id
) 
VALUES (?, ?, ?);
Last modified 37 hours ago Last modified on 09/28/25 20:52:25
Note: See TracWiki for help on using the wiki.