= Додавање на услуга во категорија == Актери * Администратор == Опис Администраторот додава нова услуга во постоечка категорија, со цел салонот да може да нуди структурирана листа на услуги по категории (пр. Масажи, Козметички третмани, Фризерски услуги). == Сценарио == Чекор 1 Администраторот ја отвора страницата „Services“ и во делот за одредена категорија го гледа формуларот **„Add Service to {Category}“**. == Чекор 2 Администраторот ги внесува податоците за новата услуга: * име на услуга, * цена, * времетраење (во минути), * категорија (се зема од избраниот блок – соодветен `category_id`). == Чекор 3 Администраторот кликнува на копчето „Add“ за да ја додаде услугата. == Чекор 4 Системот проверува дали корисникот е најавен и дали има администраторска улога. Прво го вчитува корисникот врз основа на неговиот `user_id`: {{{ SELECT user_id, full_name, email, phone FROM "User" WHERE user_id = $1; }}} Потоа ги вчитува неговите улоги: {{{ SELECT r.name FROM UserRole ur JOIN Role r ON ur.role_id = r.role_id WHERE ur.user_id = $1; }}} Доколку улогите не содржат „admin“, системот го одбива барањето и услугата не се креира. == Чекор 5 Ако корисникот е администратор и формата е валидна (име, цена и времетраење се внесени и во дозволен опсег), системот се обидува да внесе нова услуга во базата, поврзана со избраната категорија: {{{ INSERT INTO Service (name, price, duration_minutes, category_id) VALUES ($1, $2, $3, $4) RETURNING *; }}} == Чекор 6 Важат и следните ограничувања од дефиницијата на табелата `service`: {{{ CREATE TABLE service ( service_id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, name varchar NOT NULL, price numeric NOT NULL, duration_minutes integer NOT NULL, category_id integer NOT NULL, CONSTRAINT fk_service_category FOREIGN KEY (category_id) REFERENCES category(category_id) ON DELETE RESTRICT, CONSTRAINT service_price_check CHECK (price >= 0), CONSTRAINT service_duration_minutes_check CHECK (duration_minutes > 0) ); }}} * Ако `category_id` не постои во табелата `category`, ќе се прекрши `FOREIGN KEY` ограничувањето `fk_service_category` и системот прикажува грешка дека категоријата не е валидна. * Ако цената е негативна или времетраењето е невалидно (≤ 0), се прекршуваат `CHECK` ограничувањата и системот прикажува порака за невалидни податоци. == Чекор 7 Ако внесувањето е успешно, системот прикажува порака дека услугата е успешно додадена и при следното вчитување на страницата „Services“ новата услуга се прикажува под соодветната категорија. == Резултат Новата услуга е успешно додадена во избраната категорија и достапна за прикажување и понатамошно закажување од страна на клиентите.