| Version 2 (modified by , 2 weeks ago) ( diff ) |
|---|
UC002 - Регистрација на студент
Иницијален актер: Посетител
Други актери: -
Посетителот сака да отвори студентска сметка во системот. При регистрацијата внесува лични податоци, контакт податоци и податоци за завршеното средно образование. Целта е успешно креирана сметка со која потоа може да се најави и да ги користи функционалностите наменети за студенти.
Сценарио
- Посетителот ја отвора почетната страница и избира Регистрација.
- Системот прикажува формулар со три групи полиња: лични податоци (име, презиме, ЕМБГ, индекс, датум на раѓање, е-пошта, лозинка), контакт податоци (град, општина, адреса, телефон, Microsoft е-пошта) и средно образование (успех, тип на училиште), како и податоци за запишување (студиска програма, квота, година на запишување).
- Посетителот ги пополнува полињата и го испраќа формуларот.
- Системот проверува дали веќе постои корисник со истата е-пошта. Ако постои, регистрацијата се прекинува со порака за грешка.
SELECT EXISTS ( SELECT 1 FROM project.users WHERE email = 'marko.ristov@students.finki.ukim.mk' ) AS email_taken;
- Ако е-поштата е слободна, системот отвора трансакција и го креира корисникот. Лозинката се чува како BCrypt hash, никогаш како чист текст. Идентификаторот се доделува автоматски од IDENTITY колоната.
INSERT INTO project.users (name, surname, embg, "index", bday, email, password, role, quota, enrollment_year) VALUES ('Marko', 'Ristov', '1503004450088', '249123', '2004-03-15', 'marko.ristov@students.finki.ukim.mk', '$2a$11$examplehashvalue', 'student', 'drzavna', 2026) RETURNING id;
- Системот ги запишува контакт податоците, поврзани со новиот корисник преку врската 1:1.
INSERT INTO project.contact (user_id, city, municipality, address, number, microsoft_email) VALUES ((SELECT id FROM project.users WHERE email = 'marko.ristov@students.finki.ukim.mk'), 'Skopje', 'Aerodrom', 'Ul. Bledski Dogovor 5', '070123456', 'marko.ristov@live.finki.ukim.mk');
- Системот ги запишува податоците за средното образование.
INSERT INTO project.high_school (user_id, gpa, type) VALUES ((SELECT id FROM project.users WHERE email = 'marko.ristov@students.finki.ukim.mk'), 4.75, 'gimnazija');
- Системот ја потврдува трансакцијата. Трите записи се запишуваат заедно или воопшто не се запишуваат, така што не може да остане корисник без контакт податоци.
- Системот прикажува порака за успешна регистрација и го пренасочува посетителот на страницата за најава.
Алтернативни текови
- 4а. Е-поштата е веќе зафатена - системот прикажува порака и формуларот останува пополнет.
- 5а. Ограничувањето UNIQUE врз users.email го спречува дупликатот и на ниво на база, дури и ако две регистрации се извршат истовремено.
- 8а. Ако некој од записите не успее, целата трансакција се враќа назад (ROLLBACK).
Note:
See TracWiki
for help on using the wiki.
