From f81329cedd7aff3c3c7558285644b8045fcf922b Mon Sep 17 00:00:00 2001 From: Stef Date: Thu, 7 Aug 2025 21:15:38 +0200 Subject: [PATCH] Preserve date offset in meal logging flow Adds session storage of the 'offset' parameter to ensure the correct date is used when adding meals and redirecting to the daily log. Updates the add_meal and user routes to handle and validate the offset, improving navigation and data consistency for users logging meals on different days. --- application/add_meal/routes.py | 13 +++++++++++-- application/user/routes.py | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/application/add_meal/routes.py b/application/add_meal/routes.py index f6778bc..f54e6b7 100644 --- a/application/add_meal/routes.py +++ b/application/add_meal/routes.py @@ -6,12 +6,14 @@ from flask import ( session, request, jsonify, + abort, ) from flask_login import current_user from forms import FoodItemForm, FoodLogForm from application import db from models import FoodItem, FoodLog from sqlalchemy import and_ +from datetime import datetime, timedelta, timezone bp = Blueprint( "add_meal", @@ -116,7 +118,13 @@ def step4(): form = FoodLogForm() item = db.session.get(FoodItem, session["item_id"]) - assert item + offset = session["offset"] + if offset is None or item is None: + abort(404) + + today = datetime.now(timezone.utc).date() + day = today + timedelta(days=offset) + if form.validate_on_submit(): assert form.amount.data db.session.add( @@ -125,12 +133,13 @@ def step4(): user_id=current_user.id, amount=form.amount.data, part_of_day=session["meal_type"], + date_=day, ) ) db.session.commit() session.pop("meal_type") session.pop("item_id") - return redirect("/") + return redirect(url_for("user.daily_log", offset=offset)) match session["meal_type"]: case 0: diff --git a/application/user/routes.py b/application/user/routes.py index 12aa67d..4236c40 100644 --- a/application/user/routes.py +++ b/application/user/routes.py @@ -5,6 +5,7 @@ from flask import ( render_template, flash, abort, + session, ) from flask_login import current_user from application import db @@ -76,6 +77,7 @@ def daily_log(offset: int = 0): abort(400) # or handle invalid input today = datetime.now(timezone.utc).date() day = today + timedelta(days=offset) + session["offset"] = offset logs_today = current_user.food_logs.filter_by(date_=day).all() logs = [[], [], [], []] calories: float = 0