feat: return matches with respect to received sportsman id
also include a comment in the database model to include a relation
This commit is contained in:
@@ -50,6 +50,16 @@ def not_implemented(data):
|
||||
# TODO: change list to string -> data, not data[0]
|
||||
return 501, f"not recognised/implemented: {data[0]}", []
|
||||
|
||||
def __czy_x_istnieje(typ, **id):
|
||||
rekord = getDb().simple_select_all(typ, **id)
|
||||
if rekord is not None and rekord != []:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def czy_sportowiec_istnieje(id_zawodnika: str):
|
||||
return __czy_x_istnieje("sportowcy", id_zawodnika=id_zawodnika)
|
||||
|
||||
# GET /api/v1
|
||||
def stub_hello():
|
||||
"""
|
||||
@@ -85,15 +95,36 @@ def stats():
|
||||
return 200, "ok", data_to_send
|
||||
|
||||
# GET /api/v1/matches
|
||||
def get_matches(r):
|
||||
def get_matches(r, id_zawodnika: str | None = None):
|
||||
"""
|
||||
TODO: Zwraca mecze.
|
||||
Zwraca mecze.
|
||||
Przykład wywołania:
|
||||
get_matches(r, id_zawodnika=1), tożsame z GET /api/v1/matches?id_zawodnika=1
|
||||
get_matches(r), tożsame z GET /api/v1/matches
|
||||
"""
|
||||
response_json = []
|
||||
mecze = getDb().simple_select_all("mecze")
|
||||
mecze = None
|
||||
|
||||
if id_zawodnika is None:
|
||||
# Gdy nie podano id wprost, sprawdź, czy podano je przez parametr.
|
||||
id_zawodnika = r.args.get('id_zawodnika', -1)
|
||||
|
||||
# Sprawdź, czy podano jakiekolwiek ID sportowca. Jeżeli nie, wypisz wszystkie mecze.
|
||||
if id_zawodnika == -1:
|
||||
mecze = getDb().simple_select_all("mecze")
|
||||
|
||||
# Sprawdź, czy sportowiec o podanym (lub niepodanym) id istnieje.
|
||||
# Jeśli nie istnieje, wypisz wszystkie mecze.
|
||||
elif not czy_sportowiec_istnieje(id_zawodnika=id_zawodnika):
|
||||
return 404, "error", {"error_msg": "This sportsman has not been found in the database. Try: id_zawodnika=1"}
|
||||
|
||||
# Gdy sportowiec istnieje, wypisz jego mecze.
|
||||
else:
|
||||
mecze = getDb().get_sportsman_matches(id_zawodnika=id_zawodnika)
|
||||
|
||||
for mecz in mecze:
|
||||
response_json.append(mecz.jsonify())
|
||||
print(response_json)
|
||||
# print(f"zwracam mecze: {response_json}")
|
||||
return 200, "ok", response_json
|
||||
|
||||
# GET /api/v1/debugger_halt?token=XXX...
|
||||
|
||||
@@ -95,7 +95,7 @@ class baza():
|
||||
id_zawodnika: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}sportowcy.id_zawodnika"))
|
||||
zawodnik: Mapped[ "sportowcy"] = relationship(back_populates="mecze_zawodnika")
|
||||
zewnetrzne_id_meczu: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}mecze.zewnetrzne_id_meczu"))
|
||||
mecz: Mapped[ "mecze"] = relationship()
|
||||
mecz: Mapped[ "mecze"] = relationship() # back_populates="zawodnicy_w_meczu", foreign_keys=[zewnetrzne_id_meczu])
|
||||
czas_gry: Mapped[ int] = mapped_column()
|
||||
goli: Mapped[ int] = mapped_column()
|
||||
asyst: Mapped[ int] = mapped_column()
|
||||
@@ -159,6 +159,8 @@ class baza():
|
||||
skrocona_nazwa_turnieju: Mapped[ str] = mapped_column()
|
||||
flaga: Mapped[ int] = mapped_column()
|
||||
|
||||
# zawodnicy_w_meczu: Mapped[ List["sportowcy_w_meczach"]] = relationship(back_populates="mecz")
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Mecz #{self.id_meczu} ({self.zewnetrzne_id_meczu}, {self.gospodarze.skrocona_nazwa} vs. {self.goscie.skrocona_nazwa})>"
|
||||
|
||||
@@ -494,18 +496,49 @@ class baza():
|
||||
if zewnetrzne_id_zawodnika is not None:
|
||||
id_zawodnika = self.get_id_zawodnika_by_zewnetrzne_id(zewnetrzne_id_zawodnika)
|
||||
|
||||
# Aliasy (dla czytelności)
|
||||
SportowcyWMeczach = self.entities["sportowcy_w_meczach"]
|
||||
Sportowcy = self.entities["sportowcy"]
|
||||
query = self.session.query(
|
||||
self.entities["sportowcy_w_meczach"]
|
||||
SportowcyWMeczach
|
||||
).join(
|
||||
self.entities["sportowcy_w_meczach"].zawodnik
|
||||
SportowcyWMeczach.zawodnik
|
||||
).filter(
|
||||
self.entities["sportowcy"].id_zawodnika == id_zawodnika
|
||||
Sportowcy.id_zawodnika == id_zawodnika
|
||||
)
|
||||
|
||||
#print(query)
|
||||
# print(f"get_sportowcy_w_meczach_by_sportsman_id: {query}")
|
||||
|
||||
if order.lower() == "desc":
|
||||
query = query.order_by(self.entities["sportowcy_w_meczach"].id_rekordu.desc())
|
||||
query = query.order_by(SportowcyWMeczach.id_rekordu.desc())
|
||||
|
||||
return query.all()
|
||||
|
||||
@exit_gracefully
|
||||
def get_sportsman_matches(self, id_zawodnika = None, zewnetrzne_id_zawodnika = None, order = "DESC"):
|
||||
|
||||
if zewnetrzne_id_zawodnika is not None:
|
||||
id_zawodnika = self.get_id_zawodnika_by_zewnetrzne_id(zewnetrzne_id_zawodnika)
|
||||
|
||||
# Aliasy
|
||||
Mecze = self.entities["mecze"]
|
||||
SportowcyWMeczach = self.entities["sportowcy_w_meczach"]
|
||||
Sportowcy = self.entities["sportowcy"]
|
||||
|
||||
query = self.session.query(
|
||||
Mecze
|
||||
).join(
|
||||
SportowcyWMeczach, Mecze.zewnetrzne_id_meczu == SportowcyWMeczach.zewnetrzne_id_meczu
|
||||
).join(
|
||||
Sportowcy, SportowcyWMeczach.id_zawodnika == Sportowcy.id_zawodnika
|
||||
).filter(
|
||||
Sportowcy.id_zawodnika == id_zawodnika
|
||||
)
|
||||
|
||||
# print(f"get_sportsman_matches: {query}")
|
||||
|
||||
if order.lower() == "desc":
|
||||
query = query.order_by(Mecze.data.desc())
|
||||
|
||||
return query.all()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user