Don't differentiate seasons

This commit is contained in:
2024-02-14 12:54:01 +01:00
parent 092308be19
commit ff9def9e4b
9 changed files with 154 additions and 175 deletions

View File

@ -1,23 +1,23 @@
name,team_id,country_code,active name,team_id,country_code
NONE,NONE,NO,0 NONE,NONE,NO
Max Verstappen,RedBull,NL,1 Max Verstappen,RedBull,NL
Sergio Perez,RedBull,MX,1 Sergio Perez,RedBull,MX
Lewis Hamilton,Mercedes,UK,1 Lewis Hamilton,Mercedes,UK
George Russel,Mercedes,UK,1 George Russel,Mercedes,UK
Charles Leclerc,Ferrari,MC,1 Charles Leclerc,Ferrari,MC
Carlos Sainz,Ferrari,ES,1 Carlos Sainz,Ferrari,ES
Lando Norris,McLaren,UK,1 Lando Norris,McLaren,UK
Oscar Piastri,McLaren,AU,1 Oscar Piastri,McLaren,AU
Fernando Alonso,Aston Martin,ES,1 Fernando Alonso,Aston Martin,ES
Lance Stroll,Aston Martin,CA,1 Lance Stroll,Aston Martin,CA
Pierre Gasly,Alpine,FR,1 Pierre Gasly,Alpine,FR
Esteban Ocon,Alpine,FR,1 Esteban Ocon,Alpine,FR
Alexander Albon,Williams,TH,1 Alexander Albon,Williams,TH
Logan Sargeant,Williams,US,1 Logan Sargeant,Williams,US
Yuki Tsunoda,AlphaTauri,JP,1 Yuki Tsunoda,AlphaTauri,JP
Daniel Ricciardo,AlphaTauri,AU,1 Daniel Ricciardo,AlphaTauri,AU
Valteri Bottas,Alfa Romeo,FL,1 Valteri Bottas,Alfa Romeo,FL
Zhou Guanyu,Alfa Romeo,CN,1 Zhou Guanyu,Alfa Romeo,CN
Nico Hulkenberg,Haas,DE,1 Nico Hulkenberg,Haas,DE
Kevin Magnussen,Haas,DK,1 Kevin Magnussen,Haas,DK
Nyck de Vries,AlphaTauri,NL,1 Nyck de Vries,AlphaTauri,NL
1 name team_id country_code active
2 NONE NONE NO 0
3 Max Verstappen RedBull NL 1
4 Sergio Perez RedBull MX 1
5 Lewis Hamilton Mercedes UK 1
6 George Russel Mercedes UK 1
7 Charles Leclerc Ferrari MC 1
8 Carlos Sainz Ferrari ES 1
9 Lando Norris McLaren UK 1
10 Oscar Piastri McLaren AU 1
11 Fernando Alonso Aston Martin ES 1
12 Lance Stroll Aston Martin CA 1
13 Pierre Gasly Alpine FR 1
14 Esteban Ocon Alpine FR 1
15 Alexander Albon Williams TH 1
16 Logan Sargeant Williams US 1
17 Yuki Tsunoda AlphaTauri JP 1
18 Daniel Ricciardo AlphaTauri AU 1
19 Valteri Bottas Alfa Romeo FL 1
20 Zhou Guanyu Alfa Romeo CN 1
21 Nico Hulkenberg Haas DE 1
22 Kevin Magnussen Haas DK 1
23 Nyck de Vries AlphaTauri NL 1

View File

@ -1,20 +1,20 @@
id,user_id,race_id,season_id,p10_id,dnf_id,raceresult_id id,user_id,race_id,p10_id,dnf_id,raceresult_id
1,Henri,1,2023,Valteri Bottas,Zhou Guanyu,1 1,Henri,1,Valteri Bottas,Zhou Guanyu,1
2,Henri,2,2023,Valteri Bottas,Logan Sargeant,2 2,Henri,2,Valteri Bottas,Logan Sargeant,2
3,Henri,3,2023,Alexander Albon,Valteri Bottas,3 3,Henri,3,Alexander Albon,Valteri Bottas,3
4,Henri,4,2023,Oscar Piastri,Nyck de Vries,4 4,Henri,4,Oscar Piastri,Nyck de Vries,4
5,Henri,5,2023,Esteban Ocon,Charles Leclerc,5 5,Henri,5,Esteban Ocon,Charles Leclerc,5
6,Henri,7,2023,Yuki Tsunoda,Charles Leclerc,6 6,Henri,7,Yuki Tsunoda,Charles Leclerc,6
7,Henri,8,2023,Charles Leclerc,Carlos Sainz,7 7,Henri,8,Charles Leclerc,Carlos Sainz,7
8,Henri,9,2023,Oscar Piastri,Kevin Magnussen,8 8,Henri,9,Oscar Piastri,Kevin Magnussen,8
9,Henri,10,2023,Alexander Albon,NONE,9 9,Henri,10,Alexander Albon,NONE,9
10,Henri,11,2023,Pierre Gasly,Yuki Tsunoda,10 10,Henri,11,Pierre Gasly,Yuki Tsunoda,10
11,Henri,12,2023,Esteban Ocon,Kevin Magnussen,11 11,Henri,12,Esteban Ocon,Kevin Magnussen,11
12,Henri,13,2023,Lance Stroll,Esteban Ocon,12 12,Henri,13,Lance Stroll,Esteban Ocon,12
13,Henri,14,2023,Lance Stroll,Pierre Gasly,13 13,Henri,14,Lance Stroll,Pierre Gasly,13
14,Henri,15,2023,Oscar Piastri,Alexander Albon,14 14,Henri,15,Oscar Piastri,Alexander Albon,14
15,Henri,16,2023,Pierre Gasly,Logan Sargeant,15 15,Henri,16,Pierre Gasly,Logan Sargeant,15
16,Henri,17,2023,Fernando Alonso,Logan Sargeant,16 16,Henri,17,Fernando Alonso,Logan Sargeant,16
17,Henri,18,2023,Alexander Albon,Logan Sargeant,17 17,Henri,18,Alexander Albon,Logan Sargeant,17
18,Henri,19,2023,Yuki Tsunoda,Logan Sargeant,18 18,Henri,19,Yuki Tsunoda,Logan Sargeant,18
19,Henri,20,2023,Valteri Bottas,Logan Sargeant,19 19,Henri,20,Valteri Bottas,Logan Sargeant,19
1 id user_id race_id season_id p10_id dnf_id raceresult_id
2 1 Henri 1 2023 Valteri Bottas Zhou Guanyu 1
3 2 Henri 2 2023 Valteri Bottas Logan Sargeant 2
4 3 Henri 3 2023 Alexander Albon Valteri Bottas 3
5 4 Henri 4 2023 Oscar Piastri Nyck de Vries 4
6 5 Henri 5 2023 Esteban Ocon Charles Leclerc 5
7 6 Henri 7 2023 Yuki Tsunoda Charles Leclerc 6
8 7 Henri 8 2023 Charles Leclerc Carlos Sainz 7
9 8 Henri 9 2023 Oscar Piastri Kevin Magnussen 8
10 9 Henri 10 2023 Alexander Albon NONE 9
11 10 Henri 11 2023 Pierre Gasly Yuki Tsunoda 10
12 11 Henri 12 2023 Esteban Ocon Kevin Magnussen 11
13 12 Henri 13 2023 Lance Stroll Esteban Ocon 12
14 13 Henri 14 2023 Lance Stroll Pierre Gasly 13
15 14 Henri 15 2023 Oscar Piastri Alexander Albon 14
16 15 Henri 16 2023 Pierre Gasly Logan Sargeant 15
17 16 Henri 17 2023 Fernando Alonso Logan Sargeant 16
18 17 Henri 18 2023 Alexander Albon Logan Sargeant 17
19 18 Henri 19 2023 Yuki Tsunoda Logan Sargeant 18
20 19 Henri 20 2023 Valteri Bottas Logan Sargeant 19

View File

@ -1,20 +1,20 @@
id,race_id,season_id,p10_id,dnf_id id,race_id,p10_id,dnf_id
1,1,2023,Alexander Albon,Oscar Piastri 1,1,Alexander Albon,Oscar Piastri
2,2,2023,Kevin Magnussen,Lance Stroll 2,2,Kevin Magnussen,Lance Stroll
3,3,2023,Yuki Tsunoda,Charles Leclerc 3,3,Yuki Tsunoda,Charles Leclerc
4,4,2023,Yuki Tsunoda,Nyck de Vries 4,4,Yuki Tsunoda,Nyck de Vries
5,5,2023,Kevin Magnussen,NONE 5,5,Kevin Magnussen,NONE
6,7,2023,Oscar Piastri,Lance Stroll 6,7,Oscar Piastri,Lance Stroll
7,8,2023,Pierre Gasly,NONE 7,8,Pierre Gasly,NONE
8,9,2023,Valteri Bottas,Logan Sargeant 8,9,Valteri Bottas,Logan Sargeant
9,10,2023,Pierre Gasly,Nico Hulkenberg 9,10,Pierre Gasly,Nico Hulkenberg
10,11,2023,Carlos Sainz,Esteban Ocon 10,11,Carlos Sainz,Esteban Ocon
11,12,2023,Lance Stroll,Pierre Gasly 11,12,Lance Stroll,Pierre Gasly
12,13,2023,Yuki Tsunoda,Oscar Piastri 12,13,Yuki Tsunoda,Oscar Piastri
13,14,2023,Esteban Ocon,Logan Sargeant 13,14,Esteban Ocon,Logan Sargeant
14,15,2023,Valteri Bottas,Esteban Ocon 14,15,Valteri Bottas,Esteban Ocon
15,16,2023,Kevin Magnussen,Yuki Tsunoda 15,16,Kevin Magnussen,Yuki Tsunoda
16,17,2023,Pierre Gasly,Valteri Bottas 16,17,Pierre Gasly,Valteri Bottas
17,18,2023,Sergio Perez,Lewis Hamilton 17,18,Sergio Perez,Lewis Hamilton
18,19,2023,Logan Sargeant,Esteban Ocon 18,19,Logan Sargeant,Esteban Ocon
19,20,2023,Esteban Ocon,Sergio Perez 19,20,Esteban Ocon,Sergio Perez
1 id race_id season_id p10_id dnf_id
2 1 1 2023 Alexander Albon Oscar Piastri
3 2 2 2023 Kevin Magnussen Lance Stroll
4 3 3 2023 Yuki Tsunoda Charles Leclerc
5 4 4 2023 Yuki Tsunoda Nyck de Vries
6 5 5 2023 Kevin Magnussen NONE
7 6 7 2023 Oscar Piastri Lance Stroll
8 7 8 2023 Pierre Gasly NONE
9 8 9 2023 Valteri Bottas Logan Sargeant
10 9 10 2023 Pierre Gasly Nico Hulkenberg
11 10 11 2023 Carlos Sainz Esteban Ocon
12 11 12 2023 Lance Stroll Pierre Gasly
13 12 13 2023 Yuki Tsunoda Oscar Piastri
14 13 14 2023 Esteban Ocon Logan Sargeant
15 14 15 2023 Valteri Bottas Esteban Ocon
16 15 16 2023 Kevin Magnussen Yuki Tsunoda
17 16 17 2023 Pierre Gasly Valteri Bottas
18 17 18 2023 Sergio Perez Lewis Hamilton
19 18 19 2023 Logan Sargeant Esteban Ocon
20 19 20 2023 Esteban Ocon Sergio Perez

View File

@ -1,24 +1,24 @@
id,grandprix_id,season_id,number,date id,grandprix_id,number,date
1,Bahrain,2023,1,2023-03-05 1,Bahrain,1,2023-03-05
2,Saudi Arabia,2023,2,2023-03-19 2,Saudi Arabia,2,2023-03-19
3,Melbourne,2023,3,2023-04-02 3,Melbourne,3,2023-04-02
4,Baku,2023,4,2023-04-30 4,Baku,4,2023-04-30
5,Miami,2023,5,2023-05-07 5,Miami,5,2023-05-07
6,Imola,2023,6,2023-05-21 6,Imola,6,2023-05-21
7,Monaco,2023,7,2023-05-28 7,Monaco,7,2023-05-28
8,Barcelona,2023,8,2023-06-04 8,Barcelona,8,2023-06-04
9,Montreal,2023,9,2023-06-18 9,Montreal,9,2023-06-18
10,Spielberg,2023,10,2023-07-02 10,Spielberg,10,2023-07-02
11,Silverstone,2023,11,2023-07-09 11,Silverstone,11,2023-07-09
12,Budapest,2023,12,2023-07-23 12,Budapest,12,2023-07-23
13,Spa,2023,13,2023-07-30 13,Spa,13,2023-07-30
14,Zandvoort,2023,14,2023-08-27 14,Zandvoort,14,2023-08-27
15,Monza,2023,15,2023-09-03 15,Monza,15,2023-09-03
16,Singapore,2023,16,2023-09-17 16,Singapore,16,2023-09-17
17,Suzuka,2023,17,2023-09-24 17,Suzuka,17,2023-09-24
18,Qatar,2023,18,2023-10-08 18,Qatar,18,2023-10-08
19,Austin,2023,19,2023-10-22 19,Austin,19,2023-10-22
20,Mexico,2023,20,2023-10-29 20,Mexico,20,2023-10-29
21,Brazil,2023,21,2023-11-05 21,Brazil,21,2023-11-05
22,Las Vegas,2023,22,2023-11-18 22,Las Vegas,22,2023-11-18
23,Abu Dhabi,2023,23,2023-11-26 23,Abu Dhabi,23,2023-11-26
1 id grandprix_id season_id number date
2 1 Bahrain 2023 1 2023-03-05
3 2 Saudi Arabia 2023 2 2023-03-19
4 3 Melbourne 2023 3 2023-04-02
5 4 Baku 2023 4 2023-04-30
6 5 Miami 2023 5 2023-05-07
7 6 Imola 2023 6 2023-05-21
8 7 Monaco 2023 7 2023-05-28
9 8 Barcelona 2023 8 2023-06-04
10 9 Montreal 2023 9 2023-06-18
11 10 Spielberg 2023 10 2023-07-02
12 11 Silverstone 2023 11 2023-07-09
13 12 Budapest 2023 12 2023-07-23
14 13 Spa 2023 13 2023-07-30
15 14 Zandvoort 2023 14 2023-08-27
16 15 Monza 2023 15 2023-09-03
17 16 Singapore 2023 16 2023-09-17
18 17 Suzuka 2023 17 2023-09-24
19 18 Qatar 2023 18 2023-10-08
20 19 Austin 2023 19 2023-10-22
21 20 Mexico 2023 20 2023-10-29
22 21 Brazil 2023 21 2023-11-05
23 22 Las Vegas 2023 22 2023-11-18
24 23 Abu Dhabi 2023 23 2023-11-26

View File

@ -1,3 +0,0 @@
year,active
2023,1
2024,0
1 year active
2 2023 1
3 2024 0

View File

@ -1,2 +1,2 @@
name,active name
Henri,1 Henri

1 name active
2 Henri 1

View File

@ -1,17 +1,20 @@
import csv import csv
from model import * from model import *
def load_csv(filename): def load_csv(filename):
with open("data/" + filename + ".csv", newline="") as file: with open("data/" + filename + ".csv", newline="") as file:
reader = csv.reader(file, delimiter=",") reader = csv.reader(file, delimiter=",")
next(reader, None) # skip header next(reader, None) # skip header
return list(reader) return list(reader)
# @todo CSV-Writer # @todo CSV-Writer
def write_csv(filename): def write_csv(filename):
with open("data/" + filename + ".csv", newline="") as file: with open("data/" + filename + ".csv", newline="") as file:
writer = csv.writer(file, delimiter=",") writer = csv.writer(file, delimiter=",")
# @todo Complete CSV Files # @todo Complete CSV Files
# @todo Reload Static Data # @todo Reload Static Data
# Reload static database data, this has to be called from the app context # Reload static database data, this has to be called from the app context
@ -24,7 +27,6 @@ def reload_static_data(db):
Team.query.delete() Team.query.delete()
Driver.query.delete() Driver.query.delete()
GrandPrix.query.delete() GrandPrix.query.delete()
Season.query.delete()
Race.query.delete() Race.query.delete()
RaceResult.query.delete() RaceResult.query.delete()
User.query.delete() User.query.delete()
@ -37,8 +39,6 @@ def reload_static_data(db):
db.session.add(Driver().from_csv(row)) db.session.add(Driver().from_csv(row))
for row in load_csv("grandsprix"): for row in load_csv("grandsprix"):
db.session.add(GrandPrix().from_csv(row)) db.session.add(GrandPrix().from_csv(row))
for row in load_csv("seasons"):
db.session.add(Season().from_csv(row))
for row in load_csv("races"): for row in load_csv("races"):
db.session.add(Race().from_csv(row)) db.session.add(Race().from_csv(row))
for row in load_csv("raceresults"): for row in load_csv("raceresults"):
@ -50,6 +50,7 @@ def reload_static_data(db):
db.session.commit() db.session.commit()
# @todo Export Dynamic Data # @todo Export Dynamic Data
def export_dynamic_data(): def export_dynamic_data():
pass pass

View File

@ -13,12 +13,12 @@ db.init_app(app)
@app.route("/") @app.route("/")
def index(): def index():
users = User.query.all() users = User.query.all()
raceresults = RaceResult.query.filter_by(season_id=2023).all() raceresults = RaceResult.query.all()
guesses = dict() guesses = dict()
for raceresult in raceresults: for raceresult in raceresults:
guesses[raceresult.race_id] = dict() guesses[raceresult.race_id] = dict()
for guess in Guess.query.filter_by(season_id=2023).all(): for guess in Guess.query.all():
guesses[guess.race_id][guess.user_id] = guess guesses[guess.race_id][guess.user_id] = guess
return render_template("index.jinja", users=users, raceresults=raceresults, guesses=guesses) return render_template("index.jinja", users=users, raceresults=raceresults, guesses=guesses)

View File

@ -5,7 +5,6 @@ from datetime import datetime
db = SQLAlchemy() db = SQLAlchemy()
# Modeling these entities separately should make it easier to add new guess categories, for example team guesses or GP guesses
# This table contains meta information about the GPs, not specific to seasons (can be reused). # This table contains meta information about the GPs, not specific to seasons (can be reused).
class GrandPrix(db.Model): class GrandPrix(db.Model):
@ -19,17 +18,6 @@ class GrandPrix(db.Model):
name: Mapped[str] = mapped_column(String(64), primary_key=True) name: Mapped[str] = mapped_column(String(64), primary_key=True)
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
# This table contains season information
class Season(db.Model):
__tablename__ = "season"
def from_csv(self, row):
self.year = int(row[0])
self.active = bool(row[1])
return self
year: Mapped[int] = mapped_column(Integer, primary_key=True) # This is the year
active: Mapped[bool] = mapped_column(Boolean) # Only allow guessing the current season
# This table contains manifestations of GPs, with dates # This table contains manifestations of GPs, with dates
class Race(db.Model): class Race(db.Model):
@ -38,19 +26,17 @@ class Race(db.Model):
def from_csv(self, row): def from_csv(self, row):
self.id = int(row[0]) self.id = int(row[0])
self.grandprix_id = str(row[1]) self.grandprix_id = str(row[1])
self.season_id = int(row[2]) self.number = int(row[2])
self.number = int(row[3]) self.date = datetime.strptime(row[3], "%Y-%m-%d")
self.date = datetime.strptime(row[4], "%Y-%m-%d")
return self return self
id: Mapped[int] = mapped_column(Integer, primary_key=True) id: Mapped[int] = mapped_column(Integer, primary_key=True)
grandprix_id: Mapped[str] = mapped_column(ForeignKey("grandprix.name")) grandprix_id: Mapped[str] = mapped_column(ForeignKey("grandprix.name"))
season_id: Mapped[int] = mapped_column(ForeignKey("season.year"))
number: Mapped[int] = mapped_column(Integer) number: Mapped[int] = mapped_column(Integer)
date: Mapped[datetime] = mapped_column(DateTime) date: Mapped[datetime] = mapped_column(DateTime)
grandprix: Mapped["GrandPrix"] = relationship("GrandPrix", foreign_keys=[grandprix_id]) grandprix: Mapped["GrandPrix"] = relationship("GrandPrix", foreign_keys=[grandprix_id])
season: Mapped["Season"] = relationship("Season", foreign_keys=[season_id])
# This table contains teams, e.g. RedBull # This table contains teams, e.g. RedBull
class Team(db.Model): class Team(db.Model):
@ -64,6 +50,7 @@ class Team(db.Model):
name: Mapped[str] = mapped_column(String(32), primary_key=True) name: Mapped[str] = mapped_column(String(32), primary_key=True)
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
# This table contains drivers and their team associations, e.g. Max Verschtappen # This table contains drivers and their team associations, e.g. Max Verschtappen
class Driver(db.Model): class Driver(db.Model):
__tablename__ = "driver" __tablename__ = "driver"
@ -72,30 +59,27 @@ class Driver(db.Model):
self.name = str(row[0]) self.name = str(row[0])
self.team_id = str(row[1]) self.team_id = str(row[1])
self.country_code = str(row[2]) self.country_code = str(row[2])
self.active = bool(row[3])
return self return self
name: Mapped[str] = mapped_column(String(32), primary_key=True) name: Mapped[str] = mapped_column(String(32), primary_key=True)
team_id: Mapped[str] = mapped_column(ForeignKey("team.name")) team_id: Mapped[str] = mapped_column(ForeignKey("team.name"))
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
active: Mapped[bool] = mapped_column(Boolean) # Only allow guessing active drivers
team: Mapped["Team"] = relationship("Team", foreign_keys=[team_id]) team: Mapped["Team"] = relationship("Team", foreign_keys=[team_id])
class RaceResult(db.Model): class RaceResult(db.Model):
__tablename__ = "raceresult" __tablename__ = "raceresult"
def from_csv(self, row): def from_csv(self, row):
self.id = int(row[0]) self.id = int(row[0])
self.race_id = str(row[1]) self.race_id = str(row[1])
self.season_id = int(row[2]) self.p10_id = str(row[2])
self.p10_id = str(row[3]) self.dnf_id = str(row[3])
self.dnf_id = str(row[4])
return self return self
id: Mapped[int] = mapped_column(Integer, primary_key=True) id: Mapped[int] = mapped_column(Integer, primary_key=True)
race_id: Mapped[str] = mapped_column(ForeignKey("race.id")) race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
season_id: Mapped[int] = mapped_column(ForeignKey("season.year"))
# These map to drivers # These map to drivers
# p01_id: Mapped[int] = mapped_column(ForeignKey("driver.id")) # p01_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
@ -121,7 +105,6 @@ class RaceResult(db.Model):
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name")) dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id]) race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
season: Mapped["Season"] = relationship("Season", foreign_keys=[season_id]) # Redundant but should make things easier
# p01: Mapped["Driver"] = relationship("Driver", foreign_keys=[p01_id]) # Store all places to allow adding guesses # p01: Mapped["Driver"] = relationship("Driver", foreign_keys=[p01_id]) # Store all places to allow adding guesses
# p02: Mapped["Driver"] = relationship("Driver", foreign_keys=[p02_id]) # p02: Mapped["Driver"] = relationship("Driver", foreign_keys=[p02_id])
@ -145,17 +128,17 @@ class RaceResult(db.Model):
# p20: Mapped["Driver"] = relationship("Driver", foreign_keys=[p20_id]) # p20: Mapped["Driver"] = relationship("Driver", foreign_keys=[p20_id])
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id]) # Only store first DNF dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id]) # Only store first DNF
# This table contains users that can guess # This table contains users that can guess
class User(db.Model): class User(db.Model):
__tablename__ = "user" __tablename__ = "user"
def from_csv(self, row): def from_csv(self, row):
self.name = str(row[0]) self.name = str(row[0])
self.active = bool(row[1])
return self return self
name: Mapped[str] = mapped_column(String(32), primary_key=True) name: Mapped[str] = mapped_column(String(32), primary_key=True)
active: Mapped[bool] = mapped_column(Boolean) # Only show active users
# This table contains guesses made by users # This table contains guesses made by users
class Guess(db.Model): class Guess(db.Model):
@ -165,23 +148,21 @@ class Guess(db.Model):
self.id = int(row[0]) self.id = int(row[0])
self.user_id = str(row[1]) self.user_id = str(row[1])
self.race_id = str(row[2]) self.race_id = str(row[2])
self.season_id = int(row[3]) self.p10_id = str(row[3])
self.p10_id = str(row[4]) self.dnf_id = str(row[4])
self.dnf_id = str(row[5]) self.raceresult_id = int(row[5])
self.raceresult_id = int(row[6])
return self return self
id: Mapped[int] = mapped_column(Integer, primary_key=True) id: Mapped[int] = mapped_column(Integer, primary_key=True)
user_id: Mapped[str] = mapped_column(ForeignKey("user.name")) user_id: Mapped[str] = mapped_column(ForeignKey("user.name"))
race_id: Mapped[str] = mapped_column(ForeignKey("race.id")) race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
season_id: Mapped[int] = mapped_column(ForeignKey("season.year"))
p10_id: Mapped[str] = mapped_column(ForeignKey("driver.name")) p10_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name")) dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
raceresult_id: Mapped[int] = mapped_column(ForeignKey("raceresult.id")) raceresult_id: Mapped[int] = mapped_column(ForeignKey("raceresult.id"))
user: Mapped["User"] = relationship("User", foreign_keys=[user_id]) user: Mapped["User"] = relationship("User", foreign_keys=[user_id])
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id]) race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
season: Mapped["Season"] = relationship("Season", foreign_keys=[season_id]) # Redundant but should make things easier
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id]) p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id]) dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id])
raceresult: Mapped["RaceResult"] = relationship("RaceResult", foreign_keys=[raceresult_id]) raceresult: Mapped["RaceResult"] = relationship("RaceResult", foreign_keys=[raceresult_id])