Files
ecocharge_admin_backend/app.py
2026-03-09 14:11:28 +01:00

107 lines
2.9 KiB
Python

from flask import Flask, jsonify, render_template, request, redirect, url_for, session
from flask_cors import CORS
from config import Config
import psycopg2
app = Flask(__name__)
app.config.from_object(Config)
app.secret_key = app.config["SECRET_KEY"]
CORS(app)
conn = psycopg2.connect(
host="localhost",
port=5432,
database="ecocharge",
user="eco",
password="eco_pass"
)
@app.route("/")
def home():
return jsonify({
"message": "API EcoCharge en ligne"
})
@app.route("/api/status")
def status():
return jsonify({
"project": "EcoCharge",
"api": "ok",
"database": "postgresql_connected"
})
@app.route("/admin/login", methods=["GET", "POST"])
def admin_login():
if request.method == "POST":
username = request.form.get("username")
password = request.form.get("password")
if username == "admin" and password == "admin123":
session["admin_logged_in"] = True
return redirect(url_for("admin_dashboard"))
return render_template("login.html", error="Identifiants incorrects")
return render_template("login.html")
@app.route("/admin/dashboard", methods=["GET", "POST"])
def admin_dashboard():
if not session.get("admin_logged_in"):
return redirect(url_for("admin_login"))
cur = conn.cursor()
if request.method == "POST":
min_battery = request.form.get("min_battery")
max_temp = request.form.get("max_temp")
min_power = request.form.get("min_power")
cur.execute("""
INSERT INTO settings (key, value)
VALUES ('min_battery_voltage', %s)
ON CONFLICT (key)
DO UPDATE SET value = EXCLUDED.value
""", (min_battery,))
cur.execute("""
INSERT INTO settings (key, value)
VALUES ('max_battery_temperature', %s)
ON CONFLICT (key)
DO UPDATE SET value = EXCLUDED.value
""", (max_temp,))
cur.execute("""
INSERT INTO settings (key, value)
VALUES ('min_solar_power', %s)
ON CONFLICT (key)
DO UPDATE SET value = EXCLUDED.value
""", (min_power,))
conn.commit()
cur.execute("SELECT value FROM settings WHERE key = 'min_battery_voltage'")
row1 = cur.fetchone()
cur.execute("SELECT value FROM settings WHERE key = 'max_battery_temperature'")
row2 = cur.fetchone()
cur.execute("SELECT value FROM settings WHERE key = 'min_solar_power'")
row3 = cur.fetchone()
settings = {
"min_battery": row1[0] if row1 else "10.5",
"max_temp": row2[0] if row2 else "45",
"min_power": row3[0] if row3 else "5"
}
return render_template("admin_dashboard.html", settings=settings)
@app.route("/admin/logout")
def admin_logout():
session.pop("admin_logged_in", None)
return redirect(url_for("admin_login"))
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)