diff --git a/flaskr/cups.py b/flaskr/cups.py index 9df32f6..de8d28d 100644 --- a/flaskr/cups.py +++ b/flaskr/cups.py @@ -2,6 +2,40 @@ from flaskr.database import db def query_cups(): - sql = "SELECT name FROM cups" + sql = "SELECT name, id FROM cups" result = db.session.execute(sql).fetchall() return result + + +def get_cup_name(id: int): + sql = "SELECT name FROM cups WHERE id=:id" + result = db.session.execute(sql, {"id": id}).fetchone() + if result: + return result[0] + else: + raise ValueError("No cup with id found") + + +def get_cup_id(course_id: int): + sql = "SELECT cups_id FROM courses WHERE id=:course_id" + result = db.session.execute(sql, {"course_id": course_id}).fetchall() + if result: + return result[0] + else: + raise ValueError("No cup found for current course") + + +def get_all_times_in_cup(id: int) -> list[str]: + """Queries the database for all times made in the wanted cup""" + + sql = """ + SELECT courses.name, games.name, times.timems, users.username + FROM times + JOIN courses ON times.course_id=courses.id + JOIN games ON times.game_id=games.id + JOIN users ON times.user_id=users.id + WHERE times.cup_id=:id + """ + + result = db.session.execute(sql, {"id": id}).fetchall() + return result diff --git a/flaskr/templates/cup_id.html b/flaskr/templates/cup_id.html new file mode 100644 index 0000000..f5a3b6b --- /dev/null +++ b/flaskr/templates/cup_id.html @@ -0,0 +1,32 @@ +

{{cup_name}}

+ + + + +

Times

+ + + + + + + + {% if times_exist %} + {% for time in times %} + + + + + + + {% endfor %} + {% endif %} +
TimeCourseCupUser
{{time[0]}}{{time[1]}}{{time[2]}}{{time[3]}}
+ +Go back diff --git a/flaskr/templates/cups.html b/flaskr/templates/cups.html index 5aa7fa4..2bf68b5 100644 --- a/flaskr/templates/cups.html +++ b/flaskr/templates/cups.html @@ -15,7 +15,7 @@ table, tr, td { {% for item in cups %} - {{item[0]}} + {{item[0]}} {% endfor %} {% endif %} diff --git a/flaskr/times.py b/flaskr/times.py index de5bc30..3a15ad4 100644 --- a/flaskr/times.py +++ b/flaskr/times.py @@ -13,23 +13,36 @@ def add_time(game, course, time, user): game_id = db.session.execute(sql, {"game": game}).fetchone() if game_id is None: raise ValueError("No game_id found for", game) + sql = "SELECT id FROM courses WHERE courses.name=:course" course_id = db.session.execute(sql, {"course": course}).fetchone() if course_id is None: raise ValueError("No course_id found for", course) + sql = "SELECT id FROM users WHERE users.username=:user" user_id = db.session.execute(sql, {"user": user}).fetchone() if user_id is None: raise ValueError("No user_id found for", user) - sql = "INSERT INTO times (game_id, course_id, timems, user_id) VALUES (:game_id, :course_id, :time, :user_id)" - print(game_id, course_id, time, user_id) - print(sql) + sql = "SELECT courses.cup_id FROM cups, games, courses WHERE courses.game_id=:game_id AND courses.id=:course_id" + cup_id = db.session.execute( + sql, {"game_id": game_id[0], "course_id": course_id[0]} + ).fetchone() + print("CUP ID = ", cup_id) + if cup_id is None: + raise ValueError("No course with the current game-course pair.") + + sql = "INSERT INTO times (game_id, cup_id, course_id, timems, user_id) VALUES (:game_id, :cup_id, :course_id, :time, :user_id)" + + # TODO remove these + # print(game_id, cup_id, course_id, time, user_id) + # print(sql) db.session.execute( sql, { "game_id": game_id[0], + "cup_id": cup_id[0], "course_id": course_id[0], "time": time, "user_id": user_id[0], diff --git a/flaskr/views.py b/flaskr/views.py index bc6afc1..3e7783a 100644 --- a/flaskr/views.py +++ b/flaskr/views.py @@ -10,7 +10,7 @@ from flaskr.user import ( ) from flaskr.times import query_times, add_time from flaskr.games import query_games, get_game_name, get_all_times_in_game -from flaskr.cups import query_cups +from flaskr.cups import query_cups, get_cup_name, get_all_times_in_cup from flaskr.courses import query_courses @@ -50,6 +50,26 @@ def get_cups(): return render_template("cups.html", cups=cups, cups_exist=True) +@app.route("/cups/") +def get_cup_by_id(cup_id): + try: + cup_id = int(cup_id) + # TODO unnecessary sql query, name could be passed from the + cup_name = get_cup_name(cup_id) + except ValueError: + return render_template( + "error.html", message="Incorrect id, id not found or incorrect value" + ) + times = get_all_times_in_cup(cup_id) + print(times) + if times: + return render_template( + "cup_id.html", cup_name=cup_name, times=times, times_exist=True + ) + else: + return render_template("cup_id.html", times_exist=False) + + @app.route("/courses") def get_courses(): courses = query_courses() @@ -71,15 +91,22 @@ def get_times(): def create_time(): if request.method == "GET": return render_template("addtime.html") + elif request.method == "POST": if session.get("name") is None: return redirect(url_for("login")) + game = request.form["game"] course = request.form["course"] time = request.form["time"] user = session["name"] - add_time(game, course, time, user) + try: + add_time(game, course, time, user) + except ValueError as e: + print("Error adding the time", e) + return redirect(url_for("create_time")) return redirect(url_for("get_times")) + else: return "Error: Incorrect method" diff --git a/sql/schema.sql b/sql/schema.sql index c26f63c..ceae566 100644 --- a/sql/schema.sql +++ b/sql/schema.sql @@ -33,6 +33,7 @@ CREATE TABLE IF NOT EXISTS standards ( CREATE TABLE IF NOT EXISTS times ( id serial primary key, game_id int references games(id), + cup_id int references cups(id), course_id int references courses(id), timems varchar(80), user_id int references users(id),