diff --git a/Padel/initdb.sh b/Padel/initdb.sh new file mode 100644 index 0000000..1400574 --- /dev/null +++ b/Padel/initdb.sh @@ -0,0 +1 @@ +python -m flask --app padel init-db diff --git a/Padel/padel/__init__.py b/Padel/padel/__init__.py index 216c937..f04c1c8 100644 --- a/Padel/padel/__init__.py +++ b/Padel/padel/__init__.py @@ -1,12 +1,22 @@ +import os +from dotenv import load_dotenv from flask import Flask -from padel import paginas, reservas +from padel import paginas, reservas, basededatos + +load_dotenv() def create_app(): app = Flask(__name__) + app.config.from_prefixed_env() + + basededatos.init_app(app) app.register_blueprint(paginas.bp) app.register_blueprint(reservas.bp) + print(f"Current Environment: {os.getenv('ENVIRONMENT')}") + print(f"Using Database: {app.config.get('DATABASE')}") + return app diff --git a/Padel/padel/basededatos.py b/Padel/padel/basededatos.py new file mode 100644 index 0000000..874ba4a --- /dev/null +++ b/Padel/padel/basededatos.py @@ -0,0 +1,32 @@ +import sqlite3 +import click +from flask import current_app, g + +def init_app(app): + app.teardown_appcontext(close_db) + app.cli.add_command(init_db_command) + +@click.command("init-db") +def init_db_command(): + db = get_db() + + with current_app.open_resource("schema.sql") as f: + db.executescript(f.read().decode("utf-8")) + + click.echo("¡La base de datos fue inicializada con éxito!") + +def get_db(): + if "db" not in g: + g.db = sqlite3.connect( + current_app.config["DATABASE"], + detect_types=sqlite3.PARSE_DECLTYPES, + ) + g.db.row_factory = sqlite3.Row + + return g.db + +def close_db(e=None): + db = g.pop("db", None) + + if db is not None: + db.close() \ No newline at end of file diff --git a/Padel/padel/paginas.py b/Padel/padel/paginas.py index 9913066..08a13a8 100644 --- a/Padel/padel/paginas.py +++ b/Padel/padel/paginas.py @@ -1,5 +1,9 @@ -from flask import Blueprint, render_template, request, redirect, url_for -from datetime import datetime +from flask import ( + Blueprint, + render_template, + request, redirect, + url_for, +) bp = Blueprint("paginas", __name__) diff --git a/Padel/padel/reservas.py b/Padel/padel/reservas.py index bc7547c..f3a2c4c 100644 --- a/Padel/padel/reservas.py +++ b/Padel/padel/reservas.py @@ -1,18 +1,44 @@ -from flask import Blueprint, render_template +from flask import Blueprint, render_template, request, redirect, url_for + +from padel.basededatos import get_db bp = Blueprint("reservas", __name__) @bp.route("/misreservas") def misreservas(): - reservas = [] + db = get_db() + + reservas = db.execute( + "SELECT id, nombre, fecha, hora FROM reservas ORDER BY fecha DESC" + ).fetchall() + return render_template("reservas/misreservas.html", reservas=reservas) @bp.route("/reservar", methods=['GET', 'POST']) def reservar(): + if request.method == "POST": + nombre = request.form["nombre"] or "Anónimo" + fecha = request.form["fecha"] + hora = request.form["hora"] + + db = get_db() + db.execute( + "INSERT INTO reservas (nombre, fecha, hora) VALUES (?, ?, ?)", (nombre, fecha, hora), + ) + db.commit() + + return redirect(url_for("reservas.misreservas")) + return render_template("reservas/reservar.html") # Ruta para eliminar una reserva -#@bp.route('/eliminar_reserva/', methods=['POST']) -#def eliminar_reserva(index): -# del reservas[index] -# return redirect(url_for('index')) +@bp.route('/eliminar_reserva/', methods=['POST']) +def eliminar_reserva(id): + + db = get_db() + db.execute( + "DELETE FROM reservas WHERE id=?", (id,) + ) + db.commit() + + return redirect(url_for('reservas.misreservas')) diff --git a/Padel/padel/schema.sql b/Padel/padel/schema.sql new file mode 100644 index 0000000..c267b94 --- /dev/null +++ b/Padel/padel/schema.sql @@ -0,0 +1,8 @@ +DROP TABLE IF EXISTS reservas; + +CREATE TABLE reservas ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + nombre TEXT NOT NULL, + fecha DATE NOT NULL, + hora TIME NOT NULL +); diff --git a/Padel/padel/templates/reservas/misreservas.html b/Padel/padel/templates/reservas/misreservas.html index 79a30c7..bf678b2 100644 --- a/Padel/padel/templates/reservas/misreservas.html +++ b/Padel/padel/templates/reservas/misreservas.html @@ -7,8 +7,8 @@ {% block content %}