feat: use api for matches

This commit is contained in:
2025-06-13 12:04:25 +02:00
parent fce1b69893
commit fc1e636cfd
3 changed files with 112 additions and 68 deletions

View File

@@ -58,7 +58,10 @@ def __czy_x_istnieje(typ, **id):
return False return False
def czy_sportowiec_istnieje(id_zawodnika: str): def czy_sportowiec_istnieje(id_zawodnika: str):
return __czy_x_istnieje("sportowcy", id_zawodnika=id_zawodnika) return __czy_x_istnieje("sportowcy", id_zawodnika=int(id_zawodnika))
def czy_klub_istnieje(id_klubu: str):
return __czy_x_istnieje("kluby", id_klubu=id_klubu)
# GET /api/v1 # GET /api/v1
def stub_hello(): def stub_hello():
@@ -145,16 +148,7 @@ def player_stats(r = None, id_zawodnika: str | None = None):
if id_zawodnika is None: if id_zawodnika is None:
# Gdy nie podano id wprost, sprawdź, czy podano je przez parametr. # Gdy nie podano id wprost, sprawdź, czy podano je przez parametr.
id_zawodnika = r.args.get('id_zawodnika', -1) id_zawodnika = r.args.get('id_zawodnika', 0)
if rok is None:
# Gdy nie podano roku wprost, sprawdź, czy podano je przez parametr.
# Jeśli nie, przyjmij None (2025).
rok = r.args.get('rok', None)
# Sprawdź, czy podano jakiekolwiek ID sportowca. Jeżeli nie, wypisz wszystkie mecze.
if id_zawodnika == -1:
mecze = getDb().get_sportsman_matches(year=rok)
# Sprawdź, czy sportowiec o podanym (lub niepodanym) id istnieje. # Sprawdź, czy sportowiec o podanym (lub niepodanym) id istnieje.
# Jeśli nie istnieje, wypisz wszystkie mecze. # Jeśli nie istnieje, wypisz wszystkie mecze.
@@ -163,47 +157,57 @@ def player_stats(r = None, id_zawodnika: str | None = None):
# Gdy sportowiec istnieje, wypisz jego mecze. # Gdy sportowiec istnieje, wypisz jego mecze.
else: else:
mecze = getDb().get_sportsman_matches(id_zawodnika=id_zawodnika, year=rok) staty = getDb().get_basic_stats(id_zawodnika=id_zawodnika)
for mecz in mecze: # for stat in staty:
response_json.append(mecz.jsonify()) response_json.append({
# print(f"zwracam mecze: {response_json}") 'unique_items': staty[0],
'time_played': staty[1],
'goals': staty[2],
'assists': staty[3],
'yellow_cards': staty[4],
'red_cards': staty[5],
'avg_score': staty[6],
}
)
print(f"zwracam staty: {response_json}")
return 200, "ok", response_json return 200, "ok", response_json
# GET /api/v1/player_stats # GET /api/v1/robert_stats
def robert_stats(r = None, id_zawodnika: str | None = None): def robert_stats(r = None, id_klubu: str | None = None):
""" """
Zwraca mecze. Zwraca mecze.
Przykład wywołania: Przykład wywołania:
robert_stats(r), tożsame z GET /api/v1/robert_stats robert_stats(r, id_zawodnika=1), tożsame z GET /api/v1/robert_stats?id_klubu=barcelona
robert_stats(r), tożsame z GET /api/v1/robert_stats
""" """
response_json = [] response_json = []
if id_zawodnika is None: if id_klubu is None:
# Gdy nie podano id wprost, sprawdź, czy podano je przez parametr. # Gdy nie podano id wprost, sprawdź, czy podano je przez parametr.
id_zawodnika = r.args.get('id_zawodnika', -1) id_klubu = r.args.get('id_klubu', 0)
if rok is None:
# Gdy nie podano roku wprost, sprawdź, czy podano je przez parametr.
# Jeśli nie, przyjmij None (2025).
rok = r.args.get('rok', None)
# Sprawdź, czy podano jakiekolwiek ID sportowca. Jeżeli nie, wypisz wszystkie mecze.
if id_zawodnika == -1:
mecze = getDb().get_sportsman_matches(year=rok)
# Sprawdź, czy sportowiec o podanym (lub niepodanym) id istnieje. # Sprawdź, czy sportowiec o podanym (lub niepodanym) id istnieje.
# Jeśli nie istnieje, wypisz wszystkie mecze. # Jeśli nie istnieje, wypisz wszystkie mecze.
elif not czy_sportowiec_istnieje(id_zawodnika=id_zawodnika): elif not czy_klub_istnieje(id_klubu=id_klubu):
return 404, "error", {"error_msg": "This sportsman has not been found in the database. Try: id_zawodnika=1"} return 404, "error", {"error_msg": "This club has not been found in the database. Try: id_klubu=barcelona"}
# Gdy sportowiec istnieje, wypisz jego mecze. # Gdy sportowiec istnieje, wypisz jego mecze.
else: else:
mecze = getDb().get_sportsman_matches(id_zawodnika=id_zawodnika, year=rok) staty = getDb().get_sportsman_club_stats(id_zawodnika=1, id_klubu=id_klubu)
for mecz in mecze: # for stat in staty:
response_json.append(mecz.jsonify()) response_json.append({
# print(f"zwracam mecze: {response_json}") 'unique_items': staty[0],
'time_played': staty[1],
'goals': staty[2],
'assists': staty[3],
'yellow_cards': staty[4],
'red_cards': staty[5],
'avg_score': staty[6],
}
)
print(f"zwracam staty roberta: {response_json}")
return 200, "ok", response_json return 200, "ok", response_json
# GET /api/v1/debugger_halt?token=XXX... # GET /api/v1/debugger_halt?token=XXX...

View File

@@ -584,6 +584,43 @@ class baza():
return query.all()[0] return query.all()[0]
@exit_gracefully
def get_sportsman_club_stats(self, id_zawodnika = None, zewnetrzne_id_zawodnika = None, id_klubu = None):
# Spróbuj otrzymać id zawodnika z zewnętrznego id.
if zewnetrzne_id_zawodnika is not None:
id_zawodnika = self.get_id_zawodnika_by_zewnetrzne_id(zewnetrzne_id_zawodnika)
if id_zawodnika is None:
return []
if id_klubu is None:
return self.get_basic_stats(id_zawodnika=id_zawodnika)
else:
if self.simple_select_all("kluby", id_klubu=id_klubu) == []:
return []
# Aliasy
SportowcyWMeczach = self.entities["sportowcy_w_meczach"]
query = self.session.query(
func.count(SportowcyWMeczach.id_rekordu ).label('unique_items'),
func.sum( SportowcyWMeczach.czas_gry ).label('time_played'),
func.sum( SportowcyWMeczach.goli ).label('goals'),
func.sum( SportowcyWMeczach.asyst ).label('assists'),
func.sum( SportowcyWMeczach.zolte_kartki ).label('yellow_cards'),
func.sum( SportowcyWMeczach.czerwone_kartki).label('red_cards'),
func.avg( SportowcyWMeczach.wynik ).label('avg_score'),
).where(
SportowcyWMeczach.czas_gry > 0
).where(
SportowcyWMeczach.id_zawodnika == id_zawodnika
).where(
SportowcyWMeczach.klub_id == id_klubu
)
return query.all()[0]
@exit_gracefully @exit_gracefully
def sample_data_init(self, override_safety_check=False): def sample_data_init(self, override_safety_check=False):
""" """

View File

@@ -3,39 +3,42 @@ import lewy_api_v1
import lewy_db import lewy_db
import lewy_globals import lewy_globals
import json import json
from lewy_api_v1 import get_matches from lewy_api_v1 import get_matches, player_stats, robert_stats
def get_lewy_stats(): def get_lewy_stats():
return { stats = player_stats(id_zawodnika=1)[2][0]
'all_time_stats': { polska = robert_stats(id_klubu="polska")[2][0]
'goals': 589+85, barcelona = robert_stats(id_klubu="barcelona")[2][0]
'assists':154+35, return {
'matches': 791+158, 'all_time_stats': {
}, 'goals': stats["goals"], # 589+85
'club_stats': { 'assists': stats["assists"], # 154+35
'goals': 589, 'matches': stats["unique_items"] # 791+158
'assists': 154, },
'matches': 791, 'club_stats': {
}, 'goals': barcelona["goals"], # 589
'nation_stats': { 'assists': barcelona["assists"], # 154
'goals': 85, 'matches': barcelona["unique_items"] # 791 # to trochę na wyrost, bo w części meczy był kontuzjowany
'assists': 35, },
'matches': 158, 'nation_stats': {
}, 'goals': polska["goals"], # 85
'international_cups': { 'assists': polska["assists"], # 35
'goals': 110, 'matches': polska["unique_items"] # 158
'assists': 19, },
'matches': 152, 'international_cups': {
}, 'goals': 110,
'national_cups': { 'assists': 19,
'goals': 58, 'matches': 152,
'assists': 4, },
'matches': 74, 'national_cups': {
}, 'goals': 58,
'cards': { 'assists': 4,
'yellow': 86, 'matches': 74,
'red': 2, },
} 'cards': {
} 'yellow': stats["yellow_cards"], # 86
'red': stats["red_cards"], # 2
}
}
def index(): def index():
dark_mode = request.cookies.get('darkMode', 'disabled') dark_mode = request.cookies.get('darkMode', 'disabled')
@@ -65,7 +68,7 @@ def mecze():
except: except:
selected_date = 2025 selected_date = 2025
#with open("static/lewandowski_matches.json", "r") as file: #with open("static/lewandowski_matches.json", "r") as file:
# data = json.load(file) # data = json.load(file)
status, msg, matches = get_matches(None, id_zawodnika=1, rok=selected_date) status, msg, matches = get_matches(None, id_zawodnika=1, rok=selected_date)
return render_template('matches.html', matches=matches, selected_date=selected_date) return render_template('matches.html', matches=matches, selected_date=selected_date)