| | 1 | = Додавање на услуга во категорија |
| | 2 | |
| | 3 | == Актери |
| | 4 | * Администратор |
| | 5 | |
| | 6 | == Опис |
| | 7 | Администраторот додава нова услуга во постоечка категорија, со цел салонот да може да нуди структурирана листа на услуги по категории (пр. Масажи, Козметички третмани, Фризерски услуги). |
| | 8 | |
| | 9 | == Сценарио |
| | 10 | |
| | 11 | == Чекор 1 |
| | 12 | Администраторот ја отвора страницата „Services“ и во делот за одредена категорија го гледа формуларот **„Add Service to {Category}“**. |
| | 13 | |
| | 14 | == Чекор 2 |
| | 15 | Администраторот ги внесува податоците за новата услуга: |
| | 16 | * име на услуга, |
| | 17 | * цена, |
| | 18 | * времетраење (во минути), |
| | 19 | * категорија (се зема од избраниот блок – соодветен `category_id`). |
| | 20 | |
| | 21 | == Чекор 3 |
| | 22 | Администраторот кликнува на копчето „Add“ за да ја додаде услугата. |
| | 23 | |
| | 24 | == Чекор 4 |
| | 25 | Системот проверува дали корисникот е најавен и дали има администраторска улога. |
| | 26 | Прво го вчитува корисникот врз основа на неговиот `user_id`: |
| | 27 | |
| | 28 | {{{ |
| | 29 | SELECT user_id, full_name, email, phone |
| | 30 | FROM "User" |
| | 31 | WHERE user_id = $1; |
| | 32 | }}} |
| | 33 | |
| | 34 | Потоа ги вчитува неговите улоги: |
| | 35 | |
| | 36 | {{{ |
| | 37 | SELECT r.name |
| | 38 | FROM UserRole ur |
| | 39 | JOIN Role r ON ur.role_id = r.role_id |
| | 40 | WHERE ur.user_id = $1; |
| | 41 | }}} |
| | 42 | |
| | 43 | Доколку улогите не содржат „admin“, системот го одбива барањето и услугата не се креира. |
| | 44 | |
| | 45 | == Чекор 5 |
| | 46 | Ако корисникот е администратор и формата е валидна (име, цена и времетраење се внесени и во дозволен опсег), системот се обидува да внесе нова услуга во базата, поврзана со избраната категорија: |
| | 47 | |
| | 48 | {{{ |
| | 49 | INSERT INTO Service (name, price, duration_minutes, category_id) |
| | 50 | VALUES ($1, $2, $3, $4) |
| | 51 | RETURNING *; |
| | 52 | }}} |
| | 53 | |
| | 54 | == Чекор 6 |
| | 55 | Важат и следните ограничувања од дефиницијата на табелата `service`: |
| | 56 | |
| | 57 | {{{ |
| | 58 | CREATE TABLE service ( |
| | 59 | service_id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, |
| | 60 | name varchar NOT NULL, |
| | 61 | price numeric NOT NULL, |
| | 62 | duration_minutes integer NOT NULL, |
| | 63 | category_id integer NOT NULL, |
| | 64 | CONSTRAINT fk_service_category |
| | 65 | FOREIGN KEY (category_id) REFERENCES category(category_id) |
| | 66 | ON DELETE RESTRICT, |
| | 67 | CONSTRAINT service_price_check CHECK (price >= 0), |
| | 68 | CONSTRAINT service_duration_minutes_check CHECK (duration_minutes > 0) |
| | 69 | ); |
| | 70 | }}} |
| | 71 | |
| | 72 | * Ако `category_id` не постои во табелата `category`, ќе се прекрши `FOREIGN KEY` ограничувањето `fk_service_category` и системот прикажува грешка дека категоријата не е валидна. |
| | 73 | * Ако цената е негативна или времетраењето е невалидно (≤ 0), се прекршуваат `CHECK` ограничувањата и системот прикажува порака за невалидни податоци. |
| | 74 | |
| | 75 | == Чекор 7 |
| | 76 | Ако внесувањето е успешно, системот прикажува порака дека услугата е успешно додадена и при следното вчитување на страницата „Services“ новата услуга се прикажува под соодветната категорија. |
| | 77 | |
| | 78 | == Резултат |
| | 79 | Новата услуга е успешно додадена во избраната категорија и достапна за прикажување и понатамошно закажување од страна на клиентите. |