| 6 | | === Чекори |
| 7 | | 1. Корисникот кликнува на копчето „Регистрирај се“ |
| 8 | | 2. На корисникот му се прикажува форма за внесување лични податоци, контакт податоци, средношколско образование и податоци за упис |
| 9 | | 3. Корисникот ги пополнува сите задолжителни полиња |
| 10 | | 4. Корисникот кликнува на копчето „Регистрирај се“ |
| 11 | | 5. Системот проверува дали веќе постои корисник со истата е-пошта |
| 12 | | 6. Доколку не постои, лозинката се хешира и се креира нов корисник заедно со контакт, упис и средношколски податоци во една трансакција |
| 13 | | 7. По успешна регистрација корисникот се пренасочува кон страната за најава |
| | 5 | '''Други актери:''' - |
| | 6 | |
| | 7 | Посетителот сака да отвори студентска сметка во системот. При регистрацијата |
| | 8 | внесува лични податоци, контакт податоци и податоци за завршеното средно |
| | 9 | образование. Целта е успешно креирана сметка со која потоа може да се најави и |
| | 10 | да ги користи функционалностите наменети за студенти. |
| | 11 | |
| | 12 | === Сценарио |
| | 13 | |
| | 14 | 1. Посетителот ја отвора почетната страница и избира '''Регистрација'''. |
| | 15 | |
| | 16 | 2. Системот прикажува формулар со три групи полиња: лични податоци (име, презиме, ЕМБГ, индекс, датум на раѓање, е-пошта, лозинка), контакт податоци (град, општина, адреса, телефон, Microsoft е-пошта) и средно образование (успех, тип на училиште), како и податоци за запишување (студиска програма, квота, година на запишување). |
| | 17 | |
| | 18 | 3. Посетителот ги пополнува полињата и го испраќа формуларот. |
| | 19 | |
| | 20 | 4. Системот проверува дали веќе постои корисник со истата е-пошта. Ако постои, регистрацијата се прекинува со порака за грешка. |
| | 21 | {{{#!sql |
| | 22 | SELECT EXISTS ( |
| | 23 | SELECT 1 FROM project.users |
| | 24 | WHERE email = 'marko.ristov@students.finki.ukim.mk' |
| | 25 | ) AS email_taken; |
| | 26 | }}} |
| | 27 | |
| | 28 | 5. Ако е-поштата е слободна, системот отвора трансакција и го креира корисникот. Лозинката се чува како BCrypt hash, никогаш како чист текст. Идентификаторот се доделува автоматски од IDENTITY колоната. |
| | 29 | {{{#!sql |
| | 30 | INSERT INTO project.users |
| | 31 | (name, surname, embg, "index", bday, email, password, role, quota, enrollment_year) |
| | 32 | VALUES |
| | 33 | ('Marko', 'Ristov', '1503004450088', '249123', '2004-03-15', |
| | 34 | 'marko.ristov@students.finki.ukim.mk', |
| | 35 | '$2a$11$examplehashvalue', 'student', 'drzavna', 2026) |
| | 36 | RETURNING id; |
| | 37 | }}} |
| | 38 | |
| | 39 | 6. Системот ги запишува контакт податоците, поврзани со новиот корисник преку врската 1:1. |
| | 40 | {{{#!sql |
| | 41 | INSERT INTO project.contact |
| | 42 | (user_id, city, municipality, address, number, microsoft_email) |
| | 43 | VALUES |
| | 44 | ((SELECT id FROM project.users WHERE email = 'marko.ristov@students.finki.ukim.mk'), |
| | 45 | 'Skopje', 'Aerodrom', 'Ul. Bledski Dogovor 5', '070123456', |
| | 46 | 'marko.ristov@live.finki.ukim.mk'); |
| | 47 | }}} |
| | 48 | |
| | 49 | 7. Системот ги запишува податоците за средното образование. |
| | 50 | {{{#!sql |
| | 51 | INSERT INTO project.high_school (user_id, gpa, type) |
| | 52 | VALUES ((SELECT id FROM project.users WHERE email = 'marko.ristov@students.finki.ukim.mk'), |
| | 53 | 4.75, 'gimnazija'); |
| | 54 | }}} |
| | 55 | |
| | 56 | 8. Системот ја потврдува трансакцијата. Трите записи се запишуваат заедно или воопшто не се запишуваат, така што не може да остане корисник без контакт податоци. |
| | 57 | |
| | 58 | 9. Системот прикажува порака за успешна регистрација и го пренасочува посетителот на страницата за најава. |
| | 59 | |
| | 60 | === Алтернативни текови |
| | 61 | |
| | 62 | * '''4а.''' Е-поштата е веќе зафатена - системот прикажува порака и формуларот останува пополнет. |
| | 63 | * '''5а.''' Ограничувањето UNIQUE врз users.email го спречува дупликатот и на ниво на база, дури и ако две регистрации се извршат истовремено. |
| | 64 | * '''8а.''' Ако некој од записите не успее, целата трансакција се враќа назад (ROLLBACK). |