diff --git a/admin/app.py b/admin/app.py index 01a0a0c..756ec0e 100644 --- a/admin/app.py +++ b/admin/app.py @@ -17,9 +17,12 @@ from flask import ( Flask, render_template, request, redirect, url_for, session, flash ) -# Pristup skladištu igre (bez openai zavisnosti) iz glavnog idriz paketa. +# Admin stranice mini-app-ova (lagani moduli iz glavnog paketa, bez openai zavisnosti). sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) -from idriz.apps.superheroji import store as gamestore # noqa: E402 +from idriz.apps.superheroji import admin as _superheroji_admin # noqa: E402 + +# Svaki app-admin modul ima BP (Blueprint) i NAV (stavka lijevog menija). +ADMIN_APPS = [_superheroji_admin] # --- Konfiguracija ----------------------------------------------------------- @@ -52,6 +55,24 @@ app.config.update( PERMANENT_SESSION_LIFETIME=8 * 3600, ) +# Registruj admin stranice mini-app-ova i napuni lijevi meni iz njih. +for _m in ADMIN_APPS: + app.register_blueprint(_m.BP) + + +@app.context_processor +def _inject_nav(): + return {"nav_apps": [_m.NAV for _m in ADMIN_APPS]} + + +@app.before_request +def _require_login(): + """Sve rute (uključujući app Blueprint-ove) traže prijavu, osim logina i statike.""" + if request.endpoint in (None, "login", "static"): + return + if not session.get("user"): + return redirect(url_for("login", next=request.path)) + def login_required(f): @wraps(f) @@ -201,39 +222,6 @@ def status(): ) -@app.route("/superheroji", methods=["GET", "POST"]) -@login_required -def superheroji(): - if request.method == "POST": - action = request.form.get("action") - if action == "rounds": - try: - n = int(request.form.get("rounds", "")) - saved = gamestore.save_rounds(n) - flash(f"Broj rundi postavljen na {saved}.") - except (ValueError, TypeError): - flash("Neispravan broj rundi.") - elif action == "reset": - store = gamestore.HeroStore() - store.heroes = {} - store.aliases = {} - store.matchups = {} - store.save() - flash("Pamćenje jačina i dvoboja je obrisano.") - return redirect(url_for("superheroji")) - - store = gamestore.HeroStore() - return render_template( - "superheroji.html", - rounds=gamestore.load_rounds(), - min_rounds=gamestore.MIN_ROUNDS, - max_rounds=gamestore.MAX_ROUNDS, - heroes=store.leaderboard(), - matchups=store.matchup_list(), - active_page="superheroji", - ) - - if __name__ == "__main__": from waitress import serve print(f"Idriz admin na http://{LISTEN_HOST}:{LISTEN_PORT}") diff --git a/admin/templates/base.html b/admin/templates/base.html index f17ec47..9d98993 100644 --- a/admin/templates/base.html +++ b/admin/templates/base.html @@ -98,9 +98,11 @@ ● Status servisa - - ★ Superheroji + {% for it in nav_apps %} + + {{ it.icon }} {{ it.title }} + {% endfor %}