Files
cal_counter/models.py
Stef a39f54dbb0 Add food item management and improve barcode workflow
Implemented routes and forms for adding and viewing food items by barcode, including templates for displaying and entering nutritional information. Enhanced the scan workflow to redirect to food item details or entry form. Added admin ability to delete food items. Improved UI for login and scan pages. Updated FoodItem model and form fields for consistency and accuracy.
2025-06-29 08:39:25 +02:00

81 lines
2.6 KiB
Python

from flask_login import UserMixin # type: ignore
from werkzeug.security import generate_password_hash, check_password_hash
from application import db
from typing import Optional
class User(UserMixin, db.Model):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(150), unique=True, nullable=False)
password = db.Column(db.String, nullable=False)
is_admin = db.Column(db.Boolean, nullable=False, default=False)
def __init__(
self, username: str, password: str, is_admin: bool = False
) -> None:
super().__init__()
self.username = username
self.password = generate_password_hash(password=password)
self.is_admin = is_admin
def check_password(self, password: str) -> bool:
return check_password_hash(pwhash=self.password, password=password)
def change_password(self, password: str) -> None:
self.password = generate_password_hash(password=password)
class Unit(db.Model):
__tablename__ = "unit"
id = db.Column(db.Integer, primary_key=True)
symbol = db.Column(db.String(10), unique=True, nullable=False)
name = db.Column(db.String(50), unique=True, nullable=False)
class FoodItem(db.Model):
__tablename__ = "food_item"
id = db.Column(db.Integer, primary_key=True)
barcode = db.Column(db.Integer, nullable=False)
name = db.Column(db.String(150), unique=True, nullable=False)
energy_100g = db.Column(db.Integer, nullable=False)
protein_100g = db.Column(db.Float, nullable=False)
carbs_100g = db.Column(db.Float, nullable=False)
sugar_100g = db.Column(db.Float)
fats_100g = db.Column(db.Float, nullable=False)
saturated_fats_100g = db.Column(db.Float)
def __init__(
self,
name: str,
energy: int,
protein: float,
carbs: float,
fats: float,
barcode: int,
sugar: Optional[float] = None,
saturated_fats: Optional[float] = None,
):
self.name = name
self.energy_100g = energy
self.protein_100g = protein
self.carbs_100g = carbs
self.sugar_100g = sugar
self.fats_100g = fats
self.saturated_fats_100g = saturated_fats
self.barcode = barcode
def to_dict(self):
return {
"id": self.id,
"barcode": self.barcode,
"name": self.name,
"energy_100g": self.energy_100g,
"protein_100g": self.protein_100g,
"carbs_100g": self.carbs_100g,
"sugar_100g": self.sugar_100g,
"fats_100g": self.fats_100g,
"saturated_fats_100g": self.saturated_fats_100g,
}