Files
cal_counter/app.py
Stef d78f48710e Add meal v2 flow and user timezone support
Introduces a new add_meal_v2 blueprint with barcode scanning, item search, and improved meal logging UI. Adds user timezone support: login form now captures timezone, User model and database schema updated, and timezone is set on login. Refactors templates and forms to support these changes, and removes the old login template.
2025-08-14 06:08:17 +02:00

73 lines
1.7 KiB
Python

from flask import (
redirect,
url_for,
send_from_directory,
)
from flask_login import (
login_required,
current_user,
)
from models import User
from application import db, app, login_manager
from application.admin.routes import admin_bp
from application.user.routes import user_bp
from application.add_meal.routes import bp as add_meal_bp
from application.auth.routes import bp as auth_bp
from application.add_meal_v2.routes import bp as add_meal_v2_bp
from typing import Optional
# Config
app.config["SECRET_KEY"] = "Stef123"
login_manager.login_view = "auth.login" # type: ignore
@login_manager.user_loader # type: ignore
def load_user(user_id: int):
return db.session.get(User, user_id)
# Register blueprints
app.register_blueprint(admin_bp)
app.register_blueprint(user_bp)
app.register_blueprint(add_meal_bp)
app.register_blueprint(auth_bp)
app.register_blueprint(add_meal_v2_bp)
# Routes
def default_return(next_page: Optional[str] = None):
return redirect(url_for("user.daily_log"))
if next_page:
return redirect(next_page)
if current_user.is_admin:
return redirect(url_for("admin.food_items"))
return redirect(url_for("dashboard"))
@app.route("/")
@login_required
def index():
return redirect(url_for("auth.login"))
@app.route("/favicon.ico")
def favicon():
return send_from_directory("static", "favicon.ico")
# Run
if __name__ == "__main__":
# If there are no users, create admin account
with app.app_context():
if User.query.count() == 0:
admin = User(username="admin", password="admin", is_admin=True)
db.session.add(admin)
db.session.commit()
app.run(
host="0.0.0.0",
port=80,
debug=True,
)