From 7bf8a754db235df178d6eb1c808273f3554b8dd2 Mon Sep 17 00:00:00 2001 From: Stef Date: Tue, 1 Jul 2025 13:06:26 +0200 Subject: [PATCH] Add FoodLog model and update relationships Introduces the FoodLog model to track user food consumption, adds relationships between User, FoodItem, and FoodLog, and updates seed.py to include sample FoodLog data. Also fixes route redirection to use the correct blueprint namespace. --- application/user/routes.py | 6 ++++-- models.py | 25 ++++++++++++++++++++++++- seed.py | 5 ++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/application/user/routes.py b/application/user/routes.py index db2c2f8..7e11c82 100644 --- a/application/user/routes.py +++ b/application/user/routes.py @@ -76,11 +76,13 @@ def add_food_item(): ) db.session.commit() print("[DEBUG] New item added") - return redirect(url_for("food_item", barcode=form.barcode.data)) + return redirect( + url_for("user.food_item", barcode=form.barcode.data) + ) else: print("[DEBUG] Invalid form") if form.barcode.data: - return redirect(url_for("food_item", barcode=form.barcode.data)) + return redirect(url_for("user.food_item", barcode=form.barcode.data)) else: return redirect(url_for("scan")) diff --git a/models.py b/models.py index 8870d3b..e58a4e5 100644 --- a/models.py +++ b/models.py @@ -3,6 +3,7 @@ from werkzeug.security import generate_password_hash, check_password_hash from application import db from typing import Optional from forms import FoodItemForm +from datetime import datetime, timezone class User(UserMixin, db.Model): @@ -12,7 +13,8 @@ class User(UserMixin, db.Model): password = db.Column(db.String, nullable=False) is_admin = db.Column(db.Boolean, nullable=False, default=False) - food_items = db.relationship("FoodItem", lazy="dynamic") + food_items = db.relationship("FoodItem", lazy="dynamic", backref="user") + food_logs = db.relationship("FoodLog", lazy="dynamic", backref="user") def __init__( self, username: str, password: str, is_admin: bool = False @@ -50,6 +52,8 @@ class FoodItem(db.Model): fat_100 = db.Column(db.Float, nullable=False) saturated_fat_100 = db.Column(db.Float) + food_logs = db.relationship("FoodLog", backref="food_item", lazy="dynamic") + __table_args__ = ( db.UniqueConstraint("barcode", "owner_id", name="barcode_owner_key"), ) @@ -98,3 +102,22 @@ class FoodItem(db.Model): "fat_100": self.fat_100, "saturated_fat_100": self.saturated_fat_100, } + + +class FoodLog(db.Model): + __tablename__ = "food_log" + id = db.Column(db.Integer, primary_key=True) + datetime = db.Column( + db.DateTime, default=datetime.now(timezone.utc), nullable=False + ) + food_item_id = db.Column( + db.Integer, db.ForeignKey("food_item.id"), nullable=False + ) + user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) + amount = db.Column(db.Integer, nullable=False) + + def __init__(self, food_item_id: int, user_id: int, amount: int): + super().__init__() + self.food_item_id = food_item_id + self.user_id = user_id + self.amount = amount diff --git a/seed.py b/seed.py index dbc3e05..acf39d3 100644 --- a/seed.py +++ b/seed.py @@ -1,5 +1,5 @@ from application import db, app -from models import User, FoodItem +from models import User, FoodItem, FoodLog with app.app_context(): User.query.delete() @@ -21,4 +21,7 @@ with app.app_context(): ) ) + FoodLog.query.delete() + db.session.add(FoodLog(1, 1, 200)) + db.session.commit()