mirror of
https://github.com/iritmaximus/timetrials.git
synced 2026-10-12 19:13:48 +03:00
feat: added viewing times by cups, modified schema to include cup_id in
times
This commit is contained in:
+35
-1
@@ -2,6 +2,40 @@ from flaskr.database import db
|
|||||||
|
|
||||||
|
|
||||||
def query_cups():
|
def query_cups():
|
||||||
sql = "SELECT name FROM cups"
|
sql = "SELECT name, id FROM cups"
|
||||||
result = db.session.execute(sql).fetchall()
|
result = db.session.execute(sql).fetchall()
|
||||||
return result
|
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
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<h1>{{cup_name}}</h1>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
table, tr, td {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Times</h2>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Time</td>
|
||||||
|
<td>Course</td>
|
||||||
|
<td>Cup</td>
|
||||||
|
<td>User</td>
|
||||||
|
</tr>
|
||||||
|
{% if times_exist %}
|
||||||
|
{% for time in times %}
|
||||||
|
<tr>
|
||||||
|
<td>{{time[0]}}</td>
|
||||||
|
<td>{{time[1]}}</td>
|
||||||
|
<td>{{time[2]}}</td>
|
||||||
|
<td>{{time[3]}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<a href="/cups">Go back</a>
|
||||||
@@ -15,7 +15,7 @@ table, tr, td {
|
|||||||
</tr>
|
</tr>
|
||||||
{% for item in cups %}
|
{% for item in cups %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{item[0]}}</td>
|
<td><a href="/cups/{{item[1]}}">{{item[0]}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
+16
-3
@@ -13,23 +13,36 @@ def add_time(game, course, time, user):
|
|||||||
game_id = db.session.execute(sql, {"game": game}).fetchone()
|
game_id = db.session.execute(sql, {"game": game}).fetchone()
|
||||||
if game_id is None:
|
if game_id is None:
|
||||||
raise ValueError("No game_id found for", game)
|
raise ValueError("No game_id found for", game)
|
||||||
|
|
||||||
sql = "SELECT id FROM courses WHERE courses.name=:course"
|
sql = "SELECT id FROM courses WHERE courses.name=:course"
|
||||||
course_id = db.session.execute(sql, {"course": course}).fetchone()
|
course_id = db.session.execute(sql, {"course": course}).fetchone()
|
||||||
if course_id is None:
|
if course_id is None:
|
||||||
raise ValueError("No course_id found for", course)
|
raise ValueError("No course_id found for", course)
|
||||||
|
|
||||||
sql = "SELECT id FROM users WHERE users.username=:user"
|
sql = "SELECT id FROM users WHERE users.username=:user"
|
||||||
user_id = db.session.execute(sql, {"user": user}).fetchone()
|
user_id = db.session.execute(sql, {"user": user}).fetchone()
|
||||||
if user_id is None:
|
if user_id is None:
|
||||||
raise ValueError("No user_id found for", user)
|
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)
|
sql = "SELECT courses.cup_id FROM cups, games, courses WHERE courses.game_id=:game_id AND courses.id=:course_id"
|
||||||
print(sql)
|
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(
|
db.session.execute(
|
||||||
sql,
|
sql,
|
||||||
{
|
{
|
||||||
"game_id": game_id[0],
|
"game_id": game_id[0],
|
||||||
|
"cup_id": cup_id[0],
|
||||||
"course_id": course_id[0],
|
"course_id": course_id[0],
|
||||||
"time": time,
|
"time": time,
|
||||||
"user_id": user_id[0],
|
"user_id": user_id[0],
|
||||||
|
|||||||
+28
-1
@@ -10,7 +10,7 @@ from flaskr.user import (
|
|||||||
)
|
)
|
||||||
from flaskr.times import query_times, add_time
|
from flaskr.times import query_times, add_time
|
||||||
from flaskr.games import query_games, get_game_name, get_all_times_in_game
|
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
|
from flaskr.courses import query_courses
|
||||||
|
|
||||||
|
|
||||||
@@ -50,6 +50,26 @@ def get_cups():
|
|||||||
return render_template("cups.html", cups=cups, cups_exist=True)
|
return render_template("cups.html", cups=cups, cups_exist=True)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/cups/<int:cup_id>")
|
||||||
|
def get_cup_by_id(cup_id):
|
||||||
|
try:
|
||||||
|
cup_id = int(cup_id)
|
||||||
|
# TODO unnecessary sql query, name could be passed from the <a>
|
||||||
|
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")
|
@app.route("/courses")
|
||||||
def get_courses():
|
def get_courses():
|
||||||
courses = query_courses()
|
courses = query_courses()
|
||||||
@@ -71,15 +91,22 @@ def get_times():
|
|||||||
def create_time():
|
def create_time():
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
return render_template("addtime.html")
|
return render_template("addtime.html")
|
||||||
|
|
||||||
elif request.method == "POST":
|
elif request.method == "POST":
|
||||||
if session.get("name") is None:
|
if session.get("name") is None:
|
||||||
return redirect(url_for("login"))
|
return redirect(url_for("login"))
|
||||||
|
|
||||||
game = request.form["game"]
|
game = request.form["game"]
|
||||||
course = request.form["course"]
|
course = request.form["course"]
|
||||||
time = request.form["time"]
|
time = request.form["time"]
|
||||||
user = session["name"]
|
user = session["name"]
|
||||||
|
try:
|
||||||
add_time(game, course, time, user)
|
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"))
|
return redirect(url_for("get_times"))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return "Error: Incorrect method"
|
return "Error: Incorrect method"
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ CREATE TABLE IF NOT EXISTS standards (
|
|||||||
CREATE TABLE IF NOT EXISTS times (
|
CREATE TABLE IF NOT EXISTS times (
|
||||||
id serial primary key,
|
id serial primary key,
|
||||||
game_id int references games(id),
|
game_id int references games(id),
|
||||||
|
cup_id int references cups(id),
|
||||||
course_id int references courses(id),
|
course_id int references courses(id),
|
||||||
timems varchar(80),
|
timems varchar(80),
|
||||||
user_id int references users(id),
|
user_id int references users(id),
|
||||||
|
|||||||
Reference in New Issue
Block a user