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
+
+
+ | Time |
+ Course |
+ Cup |
+ User |
+
+ {% if times_exist %}
+ {% for time in times %}
+
+ | {{time[0]}} |
+ {{time[1]}} |
+ {{time[2]}} |
+ {{time[3]}} |
+
+ {% endfor %}
+ {% endif %}
+
+
+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),