UseCaseA - Редовен корисник
UseCaseA01 – Креирање рецепт
- Актер кој го иницира: Редовен корисник
- Други актери: Нема
Опис: Корисникот внесува сопствен рецепт, ги наведува состојките со нивните количини и го означува со диететските ограничувања на кои рецептот одговара. Системот ја пресметува вкупната енергетска вредност на рецептот врз основа на податоците за состојките, наместо корисникот да ја внесува вредноста.
- Корисникот ја избира опцијата „Креирај рецепт“.
- Системот прикажува форма со следните полиња:
- Име
- Упатство (чекори за подготовка)
- Број на порции
- Листа на состојки (состојка + количина во грами)
- Диетални ограничувања
- Корисникот ги внесува податоците и ја испраќа формата.
- Системот го зачувува рецептот и го доделува како сопственост на најавениот корисник.
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 – Внесување оброк во планерот за внес
- Актер кој го иницира: Редовен корисник
- Други актери: Нема
Опис: Корисникот внесува што јадел во одредено време со прикачување на еден или повеќе споделени оброци во записот во планерот. Системот пресметува една порција за секој прикачен оброк и автоматски ја пресметува енергетската вредност на записот.
- Корисникот ја избира опцијата „Внеси оброк“.
- Системот прикажува форма со следните полиња:
- Датум и време
- Забелешки (на пример: „Ручек дома“)
- Оброци за прикачување (избрани од доводот или од омилени)
- Веќе консумирано (да / не)
- Корисникот ги внесува податоците и ја испраќа формата.
- Системот го внесува записот во планерот.
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 – Креирање листа за пазарење од рецепти
- Актер кој го иницира: Редовен корисник
- Други актери: Нема
Опис: Корисникот креира листа за пазарење со додавање на цели рецепти одеднаш и додавање на поединечни производи дополнително. Системот ја пресметува вкупната енергетска вредност на сè што е додадено на листата.
- Корисникот ја избира опцијата „Нова листа за пазарење“.
- Системот прикажува форма со следните полиња:
- Датум и време
- Забелешки
- Рецепти за додавање во целост
- Поединечни состојки со количина за купување
- Корисникот ги внесува податоците и ја испраќа формата.
- Системот ја внесува листата.
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;
