Changes between Version 1 and Version 2 of UseCase002


Ignore:
Timestamp:
09/15/26 11:37:45 (2 weeks ago)
Author:
233149
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCase002

    v1 v2  
    1 == UseCase002 - Регистрација на студент
     1== UC002 - Регистрација на студент
    22
    3 === Актери
    4  * Нерегистриран корисник
     3'''Иницијален актер:''' Посетител
    54
    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
     22SELECT 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
     30INSERT INTO project.users
     31    (name, surname, embg, "index", bday, email, password, role, quota, enrollment_year)
     32VALUES
     33    ('Marko', 'Ristov', '1503004450088', '249123', '2004-03-15',
     34     'marko.ristov@students.finki.ukim.mk',
     35     '$2a$11$examplehashvalue', 'student', 'drzavna', 2026)
     36RETURNING id;
     37}}}
     38
     39 6. Системот ги запишува контакт податоците, поврзани со новиот корисник преку врската 1:1.
     40{{{#!sql
     41INSERT INTO project.contact
     42    (user_id, city, municipality, address, number, microsoft_email)
     43VALUES
     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
     51INSERT INTO project.high_school (user_id, gpa, type)
     52VALUES ((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).