| Version 1 (modified by , 2 weeks ago) ( diff ) |
|---|
UseCaseC - Тренер
UseCaseC01 – Преглед на неделен внес на храна на клиент
- Актер кој го иницира: Тренер
- Други актери: Редовен корисник (клиентот)
Опис: Тренерот проверува што реално консумирал клиентот во текот на една недела, ден по ден, со цел советите што ги дава да се засноваат на внесени податоци, наместо на она што клиентот го памети.
- Tренерот ја избира опцијата „Извештај за клиент“ и ја внесува е-поштата на клиентот и неделата.
- Системот го прикажува дневниот внес на енергија за таа недела.
SELECT ip.date_time::date AS day, ROUND(SUM(ip.kcal)) AS kcal_consumed, COUNT(*) AS meals_logged FROM intake_planner ip WHERE ip.user_email = :client_email AND ip.is_consumed = TRUE AND ip.date_time >= :week_start AND ip.date_time < :week_start + INTERVAL '7 days' GROUP BY 1 ORDER BY 1;
- Tренерот отвора одреден ден за да види од кои оброци се состои.
SELECT ip.date_time, ip.notes, r.name AS meal, ROUND(r.kcal_sum / r.servings) AS kcal_per_portion FROM intake_planner ip LEFT JOIN intake_planner_save_to_list_post sp ON sp.planner_id = ip.id LEFT JOIN post p ON p.id = sp.post_id LEFT JOIN recipe r ON r.id = p.recipe_id WHERE ip.user_email = :client_email AND ip.date_time::date = :day ORDER BY ip.date_time; - Системот прикажува кои макронутриенти ги обезбедиле оброците на клиентот во текот на таа недела (полесно изведливо апликативно).
SELECT n.description AS nutrient, n.unit, ROUND(SUM(icn.quantity * rci.ingredient_quantity / 100.0 / r.servings), 1) AS total FROM intake_planner ip JOIN intake_planner_save_to_list_post sp ON sp.planner_id = ip.id JOIN post p ON p.id = sp.post_id JOIN recipe r ON r.id = p.recipe_id JOIN recipe_contains_ingredient rci ON rci.recipe_id = r.id JOIN ingredient_contains_nutrient icn ON icn.ingredient_name = rci.ingredient_name JOIN nutrient n ON n.id = icn.nutrient_id WHERE ip.user_email = :client_email AND ip.is_consumed = TRUE AND n.type = 'macro' AND ip.date_time >= :week_start AND ip.date_time < :week_start + INTERVAL '7 days' GROUP BY n.description, n.unit ORDER BY n.description; - Tренерот пишува повратна информација како коментар на една од објавите на клиентот.
INSERT INTO comment (description, post_id, created_by) VALUES (:description, :post_id, :trainer_email);
UseCaseC02 – Следење на биометрискиот напредок на клиентот
- Актер кој го иницира: Тренер
- Други актери: Редовен корисник (клиентот)
Опис: Тренерот следи како се менувале тежината и телесниот состав на клиентот во одреден временски период, со цел да процени дали тековниот план дава резултати.
- Тренерот ја избира опцијата „Напредок“ за одреден клиент.
- Системот го прикажува секое мерење заедно со промената во однос на претходното мерење.
SELECT b.date, b.weight, b.muscle_fat_ratio, ROUND(b.weight - LAG(b.weight) OVER (ORDER BY b.date), 1) AS weight_change, ROUND(b.weight / ((b.height / 100.0) * (b.height / 100.0)), 1) AS bmi FROM biometrics b WHERE b.user_email = :client_email ORDER BY b.date; - Системот ја прикажува вкупната промена за целиот временски период.
SELECT MIN(date) AS from_date, MAX(date) AS to_date, ROUND(MAX(weight) - MIN(weight), 1) AS weight_span, COUNT(*) AS measurements FROM biometrics WHERE user_email = :client_email; - Тренерот го споредува трендот на тежината со енергијата што клиентот ја внесувал во истиот период, за да утврди дали внесот ја објаснува промената.
UseCaseC03 – Објавување рецепт за одредено диетално ограничување
- Актер кој го иницира: Тренер
- Други актери: Редовен корисник (клиентите кои го следат почетниот приказ)
Опис: Тренерот креира рецепт наменет за специфично диетално барање, на пример без лактоза или за дијабетичари, и го објавува за клиентите кои го филтрираат почетниот приказ според тоа ограничување да можат да го пронајдат.
- Тренерот ја избира опцијата „Креирај рецепт“ и ги означува диетално ограничувања на кои рецептот одговара.
- Системот го внесува рецептот и неговите состојки исто како во UseCaseА01.
- Системот го означува рецептот со избраните ограничувања.
INSERT INTO recipe_contains_restriction (recipe_id, restriction_id) SELECT :recipe_id, id FROM restriction WHERE type = :restriction_type;
- Тренерот го објавува рецептот на почетната страница.
INSERT INTO post (is_private, is_favourite, status, created_by, recipe_id) VALUES (FALSE, FALSE, 'published', :trainer_email, :recipe_id);
- Клиентот го филтрира почетниот приказ според диетално ограничување кое го следи (полесно изведено апликативно).
SELECT r.name, ROUND(r.kcal_sum / r.servings) AS kcal_per_portion, u.username AS author FROM post p JOIN recipe r ON r.id = p.recipe_id JOIN "user" u ON u.email = p.created_by WHERE p.status = 'published' AND p.is_private = FALSE AND EXISTS ( SELECT 1 FROM recipe_contains_restriction rcr JOIN restriction res ON res.id = rcr.restriction_id WHERE rcr.recipe_id = r.id AND res.type = :restriction_type ) AND NOT EXISTS ( SELECT 1 FROM recipe_contains_restriction rcr JOIN restriction res ON res.id = rcr.restriction_id WHERE rcr.recipe_id = r.id AND res.description = ANY(:allergens_to_avoid) ) ORDER BY kcal_per_portion;
⬅️Назад кон општ преглед
Note:
See TracWiki
for help on using the wiki.
