| | 1 | = Use-case 0001 — Register new account = |
| | 2 | |
| | 3 | '''Initiating actor:''' Visitor |
| | 4 | |
| | 5 | '''Other actors:''' — |
| | 6 | |
| | 7 | A new person creates an account on !EduBerza so they can later log in as a Trader. The system validates input, refuses duplicates, and stores a hashed password. |
| | 8 | |
| | 9 | == Scenario == |
| | 10 | |
| | 11 | 1. Visitor chooses "Register" from the anonymous menu. |
| | 12 | 2. System prompts for username, email, full name and password. |
| | 13 | 3. Visitor enters values. |
| | 14 | 4. System validates: |
| | 15 | * username, email, password are non-empty. |
| | 16 | * email contains `@`. |
| | 17 | * password is at least 6 characters. |
| | 18 | 5. System checks whether the chosen username or email already exists: |
| | 19 | |
| | 20 | {{{ |
| | 21 | SELECT EXISTS ( |
| | 22 | SELECT 1 FROM project.users |
| | 23 | WHERE username = $1 OR email = $2 |
| | 24 | ); |
| | 25 | }}} |
| | 26 | |
| | 27 | 6. If the row exists, system informs the user and the scenario ends. Otherwise it creates the account: |
| | 28 | |
| | 29 | {{{ |
| | 30 | INSERT INTO project.users (username, email, full_name, password_hash, available_balance) |
| | 31 | VALUES ($1, $2, $3, encode(digest($4, 'sha256'), 'hex'), 0); |
| | 32 | }}} |
| | 33 | |
| | 34 | 7. System confirms success and returns to the anonymous menu; Visitor can then proceed to UC0002. |
| | 35 | |
| | 36 | === Alternate flow 3a — invalid email === |
| | 37 | |
| | 38 | If step 4 fails email validation, system shows "Invalid email." and scenario returns to step 2. |
| | 39 | |
| | 40 | === Alternate flow 5a — duplicate === |
| | 41 | |
| | 42 | If step 5 returns `true`, system shows "Username or email already taken." and scenario ends. |