= UseCaseA - Редовен корисник === UseCaseA01 – Креирање рецепт * Актер кој го иницира: Редовен корисник * Други актери: Нема **Опис:** Корисникот внесува сопствен рецепт, ги наведува состојките со нивните количини и го означува со диететските ограничувања на кои рецептот одговара. Системот ја пресметува вкупната енергетска вредност на рецептот врз основа на податоците за состојките, наместо корисникот да ја внесува вредноста. * Корисникот ја избира опцијата „Креирај рецепт“. * Системот прикажува форма со следните полиња: 1. Име 2. Упатство (чекори за подготовка) 3. Број на порции 4. Листа на состојки (состојка + количина во грами) 5. Диетални ограничувања * Корисникот ги внесува податоците и ја испраќа формата. * Системот го зачувува рецептот и го доделува како сопственост на најавениот корисник. {{{ INSERT INTO recipe (name, guide, kcal_sum, servings, user_email) VALUES (:name, :guide, 0, :servings, :user_email) RETURNING id; }}} * Системот внесува еден запис за секоја избрана состојка. {{{ INSERT INTO recipe_contains_ingredient (recipe_id, ingredient_name, ingredient_quantity) VALUES (:recipe_id, :ingredient_name, :quantity); }}} * Системот внесува еден запис за секое избрано диететско ограничување. {{{ INSERT INTO recipe_contains_restriction (recipe_id, restriction_id) VALUES (:recipe_id, :restriction_id); }}} === UseCaseA02 – Внесување оброк во планерот за внес * Актер кој го иницира: Редовен корисник * Други актери: Нема **Опис:** Корисникот внесува што јадел во одредено време со прикачување на еден или повеќе споделени оброци во записот во планерот. Системот пресметува една порција за секој прикачен оброк и автоматски ја пресметува енергетската вредност на записот. * Корисникот ја избира опцијата „Внеси оброк“. * Системот прикажува форма со следните полиња: 1. Датум и време 2. Забелешки (на пример: „Ручек дома“) 3. Оброци за прикачување (избрани од доводот или од омилени) 4. Веќе консумирано (да / не) * Корисникот ги внесува податоците и ја испраќа формата. * Системот го внесува записот во планерот. {{{ INSERT INTO intake_planner (date_time, notes, kcal, is_consumed, user_email) VALUES (:date_time, :notes, 0, :is_consumed, :user_email) RETURNING id; }}} * Системот го поврзува секој избран оброк со записот. {{{ INSERT INTO intake_planner_save_to_list_post (planner_id, post_id) VALUES (:planner_id, :post_id); }}} * Системот ја пресметува енергетската вредност на записот, земајќи една порција од секој прикачен рецепт. {{{ UPDATE intake_planner ip SET kcal = ROUND(COALESCE(( SELECT SUM(r.kcal_sum / r.servings) FROM intake_planner_save_to_list_post sp JOIN post p ON p.id = sp.post_id JOIN recipe r ON r.id = p.recipe_id WHERE sp.planner_id = ip.id ), 0), 2) WHERE ip.id = :planner_id; }}} === UseCaseA03 – Креирање листа за пазарење од рецепти * Актер кој го иницира: Редовен корисник * Други актери: Нема **Опис:** Корисникот креира листа за пазарење со додавање на цели рецепти одеднаш и додавање на поединечни производи дополнително. Системот ја пресметува вкупната енергетска вредност на сè што е додадено на листата. * Корисникот ја избира опцијата „Нова листа за пазарење“. * Системот прикажува форма со следните полиња: 1. Датум и време 2. Забелешки 3. Рецепти за додавање во целост 4. Поединечни состојки со количина за купување * Корисникот ги внесува податоците и ја испраќа формата. * Системот ја внесува листата. {{{ INSERT INTO grocery_list (date_time, notes, is_bought, kcal, user_email) VALUES (:date_time, :notes, FALSE, 0, :user_email) RETURNING id; }}} * Системот го додава секој избран рецепт во целост. {{{ INSERT INTO grocery_list_bulk_add_ingredient (list_id, recipe_id) VALUES (:list_id, :recipe_id); }}} * Системот ја додава секоја поединечно избрана состојка. {{{ INSERT INTO grocery_list_single_add_ingredient (list_id, ingredient_name, buy_quantity) VALUES (:list_id, :ingredient_name, :buy_quantity); }}} * Системот ја пресметува вкупната енергетска вредност на листата. {{{ UPDATE grocery_list g SET kcal = ROUND( COALESCE((SELECT SUM(r.kcal_sum) FROM grocery_list_bulk_add_ingredient b JOIN recipe r ON r.id = b.recipe_id WHERE b.list_id = g.id), 0) + COALESCE((SELECT SUM(i.kcal * s.buy_quantity / 100.0) FROM grocery_list_single_add_ingredient s JOIN ingredient i ON i.name = s.ingredient_name WHERE s.list_id = g.id), 0) , 2) WHERE g.id = :list_id; }}} * Системот ја прикажува обединетата листа за пазарење, групирана според категоријата на состојките. {{{ SELECT i.type, i.name, SUM(x.quantity) AS total_grams FROM ( SELECT rci.ingredient_name AS name, rci.ingredient_quantity AS quantity FROM grocery_list_bulk_add_ingredient b JOIN recipe_contains_ingredient rci ON rci.recipe_id = b.recipe_id WHERE b.list_id = :list_id UNION ALL SELECT s.ingredient_name, s.buy_quantity FROM grocery_list_single_add_ingredient s WHERE s.list_id = :list_id ) AS x JOIN ingredient i ON i.name = x.name GROUP BY i.type, i.name ORDER BY i.type, i.name; }}} * Корисникот ја означува листата како купена по завршувањето на пазарењето. {{{ UPDATE grocery_list SET is_bought = TRUE WHERE id = :list_id AND user_email = :user_email; }}} === [https://develop.finki.ukim.mk/projects/nutritioneer/wiki/UseCaseModel ⬅️Назад кон општ преглед]