wiki:UCA

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;
    

⬅️Назад кон општ преглед

Last modified 2 weeks ago Last modified on 09/15/26 02:34:53
Note: See TracWiki for help on using the wiki.