Initial commit - EcoCharge backend API + admin
This commit is contained in:
106
app.py
Normal file
106
app.py
Normal file
@@ -0,0 +1,106 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user